Skip to content

Commit 765d72e

Browse files
author
Chris Elion
authored
Fix vertical offsets for RayPerception3D (#2823)
* clean up ray perception * adjust offsets * remove dead code
1 parent 8c3a69e commit 765d72e

File tree

4 files changed

+13
-12
lines changed

4 files changed

+13
-12
lines changed

UnitySDK/Assets/ML-Agents/Examples/PushBlock/Scripts/PushAgentBasic.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ public override void CollectObservations()
8585
var rayDistance = 12f;
8686

8787
AddVectorObs(m_RayPer.Perceive(rayDistance, m_RayAngles, m_DetectableObjects));
88-
AddVectorObs(m_RayPer.Perceive(rayDistance, m_RayAngles, m_DetectableObjects, 1.5f));
88+
AddVectorObs(m_RayPer.Perceive(rayDistance, m_RayAngles, m_DetectableObjects, 1.5f, 1.5f));
8989
}
9090
}
9191

UnitySDK/Assets/ML-Agents/Examples/SharedAssets/Scripts/RayPerception3D.cs

+10-9
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ namespace MLAgents
1010
/// </summary>
1111
public class RayPerception3D : RayPerception
1212
{
13-
Vector3 m_EndPosition;
1413
RaycastHit m_Hit;
1514
float[] m_SubList;
1615

@@ -46,20 +45,22 @@ public override List<float> Perceive(float rayDistance,
4645
// along with object distance.
4746
foreach (var angle in rayAngles)
4847
{
49-
m_EndPosition = transform.TransformDirection(
50-
PolarToCartesian(rayDistance, angle));
51-
m_EndPosition.y = endOffset;
48+
Vector3 startPositionLocal = new Vector3(0, startOffset, 0);
49+
Vector3 endPositionLocal = PolarToCartesian(rayDistance, angle);
50+
endPositionLocal.y += endOffset;
51+
52+
var startPositionWorld = transform.TransformPoint(startPositionLocal);
53+
var endPositionWorld = transform.TransformPoint(endPositionLocal);
54+
55+
var rayDirection = endPositionWorld - startPositionWorld;
5256
if (Application.isEditor)
5357
{
54-
Debug.DrawRay(transform.position + new Vector3(0f, startOffset, 0f),
55-
m_EndPosition, Color.black, 0.01f, true);
58+
Debug.DrawRay(startPositionWorld,rayDirection, Color.black, 0.01f, true);
5659
}
5760

5861
Array.Clear(m_SubList, 0, m_SubList.Length);
5962

60-
if (Physics.SphereCast(transform.position +
61-
new Vector3(0f, startOffset, 0f), 0.5f,
62-
m_EndPosition, out m_Hit, rayDistance))
63+
if (Physics.SphereCast(startPositionWorld, 0.5f, rayDirection, out m_Hit, rayDistance))
6364
{
6465
for (var i = 0; i < detectableObjects.Length; i++)
6566
{

UnitySDK/Assets/ML-Agents/Examples/Soccer/Scripts/AgentSoccer.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ public override void CollectObservations()
9494
detectableObjects = m_DetectableObjectsBlue;
9595
}
9696
AddVectorObs(m_RayPer.Perceive(rayDistance, m_RayAngles, detectableObjects));
97-
AddVectorObs(m_RayPer.Perceive(rayDistance, m_RayAngles, detectableObjects, 1f));
97+
AddVectorObs(m_RayPer.Perceive(rayDistance, m_RayAngles, detectableObjects, 1f, 1f));
9898
}
9999

100100
public void MoveAgent(float[] act)

UnitySDK/Assets/ML-Agents/Examples/WallJump/Scripts/WallJumpAgent.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ public override void CollectObservations()
144144
AddVectorObs(m_RayPer.Perceive(
145145
rayDistance, rayAngles, m_DetectableObjects));
146146
AddVectorObs(m_RayPer.Perceive(
147-
rayDistance, rayAngles, m_DetectableObjects, 2.5f, 2.5f));
147+
rayDistance, rayAngles, m_DetectableObjects, 2.5f, 5.0f));
148148
var agentPos = m_AgentRb.position - ground.transform.position;
149149

150150
AddVectorObs(agentPos / 20f);

0 commit comments

Comments
 (0)