from tdw.replicant.actions.reach_for_with_plan import ReachForWithPlan
Reach for a target object or position.
This is similar to ReachFor
but has the following differences:
- There are multiple
ReachFor
sub-actions defined by anIkPlanType
value. - There is no option for an offhand to follow the hand to the target.
ReachForWithPlan
can be useful when the agent needs to maneuver its arm in a specific way, such as reaching above a surface and then forward.
Within the Replicant
, this action gets used by reach_for(target, arm)
if the user sets the optional plan
parameter.
If target is an object, the target position is a point on the object. If the object has affordance points, the target position is the affordance point closest to the hand. Otherwise, the target position is the bounds position closest to the hand.
The Replicant's arm(s) will continuously over multiple communicate()
calls move until either the motion is complete or the arm collides with something (see self.collision_detection
).
- If the hand is near the target at the end of the action, the action succeeds.
- If the target is too far away at the start of the action, the action fails.
- The collision detection will respond normally to walls, objects, obstacle avoidance, etc.
- If
self.collision_detection.previous_was_same == True
, and if the previous action was a subclass ofArmMotion
, and it ended in a collision, this action ends immediately.
See also: ReachFor
.
-
ik_plan
TheIkPlan
this action will use. -
actions
A list of actions that will be filled inget_initialization_commands()
. -
action_index
The index of the current action. -
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.
ReachForWithPlan(plan, targets, absolute, arrived_at, max_distance, arms, dynamic, collision_detection, previous, duration, scale_duration, from_held, held_point)
Parameter | Type | Default | Description |
---|---|---|---|
plan | IkPlanType | An IkPlanType that will define the IkPlan this action will use. |
|
targets | List[TARGET] | The targets per arm. 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. | |
absolute | bool | If True, the target position is in world space coordinates. If False, the target position is relative to the Replicant. Ignored if target is an int. |
|
arrived_at | float | If the final ReachFor action ends and the hand is this distance or less from the target, the motion succeeds. |
|
max_distance | float | If at the start of the first ReachFor action the target is further away than this distance from the hand, the action fails. |
|
arms | List[Arm] | The Arm (s) that will reach for each target. |
|
dynamic | ReplicantDynamic | The ReplicantDynamic data that changes per communicate() call. |
|
collision_detection | CollisionDetection | The CollisionDetection rules. |
|
previous | Optional[Action] | The previous action. Can be None. | |
duration | float | The total duration of the motion in seconds. Each ReachFor action is a fraction of this. For example, if there are 2 ReachFor actions, then the duration of each of them is duration / 2 . |
|
scale_duration | bool | If True, duration will be multiplied by framerate / 60) , ensuring smoother motions at faster-than-life simulation speeds. |
|
from_held | bool | If False, the Replicant will try to move its hand to the target . If True, the Replicant will try to move its held object to the target . This is ignored if the hand isn't holding an object. |
|
held_point | str | The bounds point of the held object from which the offset will be calculated. Can be "bottom" , "top" , etc. For example, if this is "bottom" , the Replicant will move the bottom point of its held object to the target . This is ignored if from_held == False or ths hand isn't holding an object. |
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.