from tdw.wheelchair_replicant.actions.move_to import MoveTo
Turn the wheelchair to a target position or object and then move to it.
The action can end for several reasons depending on the collision detection rules (see self.collision_detection
.
- If the Replicant moves the target distance (i.e. it reaches its target), the action succeeds.
- If
self.collision_detection.previous_was_same == True
, and the previous action wasMoveBy
orMoveTo
, and it was in the same direction (forwards/backwards), and the previous action ended in failure, this action ends immediately. - If
self.collision_detection.avoid_obstacles == True
and the Replicant encounters a wall or object in its path:- If the object is in
self.collision_detection.exclude_objects
, the Replicant ignores it. - Otherwise, the action ends in failure.
- If the object is in
- If the Replicant collides with an object or a wall and
self.collision_detection.objects == True
and/orself.collision_detection.walls == True
respectively:- If the object is in
self.collision_detection.exclude_objects
, the Replicant ignores it. - Otherwise, the action ends in failure.
- If the object is in
-
turning
If True, the wheelchair is turning. If False, the wheelchair is moving. -
action
The current sub-action. This is first aTurnTo
, then aMoveBy
. -
arrived_at
If at any point during the action the difference between the target distance and distance traversed is less than this, then the action is successful. -
status
The current status of the action. By default, this isongoing
(the action isn't done). -
initialized
If True, the action has initialized. If False, the action will try to sendget_initialization_commands(resp)
on this frame. -
done
If True, this action is done and won't send any more commands.
MoveTo(target, turn_wheel_values, move_wheel_values, dynamic, collision_detection, previous, reset_arms, reset_arms_duration, scale_reset_arms_duration, aligned_at, arrived_at, collision_avoidance_distance, collision_avoidance_half_extents)
Parameter | Type | Default | Description |
---|---|---|---|
target | TARGET | The target. If int: An object ID. If dict: A position as an x, y, z dictionary. If numpy array: A position as an [x, y, z] numpy array. | |
turn_wheel_values | Optional[WheelValues] | The WheelValues that will be applied to the wheelchair's wheels while it's turning. If None, values will be derived from the angle. |
|
move_wheel_values | Optional[WheelValues] | The WheelValues that will be applied to the wheelchair's wheels while it's moving. If None, values will be derived from the distance. |
|
dynamic | ReplicantDynamic | The ReplicantDynamic data that changes per communicate() call. |
|
collision_detection | CollisionDetection | The CollisionDetection rules. |
|
previous | Optional[Action] | The previous action, if any. | |
reset_arms | bool | If True, reset the arms to their neutral positions while beginning to move. | |
reset_arms_duration | float | The speed at which the arms are reset in seconds. | |
scale_reset_arms_duration | bool | If True, reset_arms_duration will be multiplied by framerate / 60) , ensuring smoother motions at faster-than-life simulation speeds. |
|
aligned_at | float | If the angle between the traversed angle and the target angle is less than this threshold in degrees, the action succeeds. | |
arrived_at | float | If at any point during the action the difference between the target distance and distance traversed is less than this, then the action is successful. | |
collision_avoidance_distance | float | If collision_detection.avoid == True , an overlap will be cast at this distance from the Wheelchair Replicant to detect obstacles. |
|
collision_avoidance_half_extents | Dict[str, float] | If collision_detection.avoid == True , an overlap will be cast with these half extents to detect obstacles. |
self.get_initialization_commands(resp, static, dynamic, image_frequency)
Parameter | Type | Default | Description |
---|---|---|---|
resp | List[bytes] | The response from the build. | |
static | ReplicantStatic | The ReplicantStatic data that doesn't change after the Replicant is initialized. |
|
dynamic | ReplicantDynamic | The ReplicantDynamic data that changes per communicate() call. |
|
image_frequency | ImageFrequency | An ImageFrequency value describing how often image data will be captured. |
Returns: A list of commands to initialize this action.
self.get_ongoing_commands(resp, static, dynamic)
Evaluate an action per-frame to determine whether it's done.
Parameter | Type | Default | Description |
---|---|---|---|
resp | List[bytes] | The response from the build. | |
static | ReplicantStatic | The ReplicantStatic data that doesn't change after the Replicant is initialized. |
|
dynamic | ReplicantDynamic | The ReplicantDynamic data that changes per communicate() call. |
Returns: A list of commands to send to the build to continue the action.
self.get_end_commands(resp, static, dynamic, image_frequency)
Parameter | Type | Default | Description |
---|---|---|---|
resp | List[bytes] | The response from the build. | |
static | ReplicantStatic | The ReplicantStatic data that doesn't change after the Replicant is initialized. |
|
dynamic | ReplicantDynamic | The ReplicantDynamic data that changes per communicate() call. |
|
image_frequency | ImageFrequency | An ImageFrequency value describing how often image data will be captured. |
Returns: A list of commands that must be sent to end any action.