Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Configure ada_moveit for Articulable Fork #54

Open
wants to merge 61 commits into
base: jjaime2/dynamixel_hw_interface
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
2d8ac13
Add ros2_control block for Articulable Fork, and initial positions
jjaime2 Nov 13, 2024
2f9129a
Add Articulable Fork info to SRDF
jjaime2 Nov 13, 2024
e6d962e
Add Articulable Fork mock controllers
jjaime2 Nov 13, 2024
8e0769a
Add af_ros2_control and fix readonly param
jjaime2 Nov 13, 2024
7e876aa
Fix indentation
jjaime2 Nov 13, 2024
3bb0bc9
Fix namespace conflict by renaming ada_hardware::DynamixelHardware to…
jjaime2 Nov 14, 2024
e7fa968
Merge branch 'jjaime2/dynamixel_hw_interface' into jjaime2/articulabl…
jjaime2 Nov 14, 2024
1ab1440
Merge branch 'jjaime2/dynamixel_hw_interface' into jjaime2/articulabl…
jjaime2 Nov 14, 2024
301926f
Add PickIK kinematics solver for articulable_fork group
jjaime2 Nov 14, 2024
7907726
Add OMPL planner for Articulable Fork
jjaime2 Nov 15, 2024
678d95d
Add af_velocity_controller and af_joint_trajectory_controller, add hy…
jjaime2 Nov 17, 2024
1e243d2
Change mock controllers for AF
jjaime2 Nov 17, 2024
b50e25a
Add planning group for ADA + AF end-to-end control
jjaime2 Nov 18, 2024
bfb28ee
Add spacing
jjaime2 Nov 20, 2024
d3f4391
Add mock jaco_af_controller and jaco_af_cartesian_controller
jjaime2 Nov 20, 2024
f9ec2af
Rename move group all to jaco_af
jjaime2 Nov 20, 2024
2b17d17
Add jaco_af OMPL planning
jjaime2 Nov 20, 2024
926943f
Add jaco_af PickIkPlugin
jjaime2 Nov 24, 2024
3d3c8cd
Change Jaco+AF cartesian controller to damped least squares, Remove o…
jjaime2 Nov 24, 2024
4f2396f
Use Jaco+AF move group for mock servo control
jjaime2 Nov 24, 2024
c414d0e
Add Jaco+AF MoveIt2 controllers, Remove old AF MoveIt2 controllers
jjaime2 Nov 24, 2024
3a98276
Use Jaco+AF move group for real servo control
jjaime2 Nov 24, 2024
d851430
Use Jaco+AF cartesian control for keyboard tele-op
jjaime2 Nov 24, 2024
e537c76
Add AF joints to servo republisher
jjaime2 Nov 24, 2024
eb8d630
Add real Jaco+AF controllers
jjaime2 Nov 24, 2024
8054301
Update to selectively_damped_least_squares
jjaime2 Nov 25, 2024
507a530
Update hybrid_controllers
jjaime2 Nov 25, 2024
260e945
Add hybrid servo yaml file
jjaime2 Nov 27, 2024
fb7b8c5
Add OverPlate configuration
jjaime2 Nov 29, 2024
32b4ddb
Add script to command twists
jjaime2 Nov 29, 2024
1a43bf9
Add OverPlate configuration to initial positions
jjaime2 Nov 29, 2024
a8aea27
Add frame_id argument to ada_twist_teleop
jjaime2 Dec 2, 2024
ebc95f3
TEMP: Set default velocity scaling factor to 1.0
jjaime2 Dec 7, 2024
a402eec
Remove jaco_af controllers, add af controllers
jjaime2 Dec 7, 2024
2fda537
Update MoveIt controllers to use af controllers
jjaime2 Dec 7, 2024
0e5f8bc
Update OMPL planners to use articulable_fork move group
jjaime2 Dec 7, 2024
adcf2a2
Remove af_cartesian_controller
jjaime2 Dec 7, 2024
197dfcc
Revert to using jaco_arm_cartesian_controller for keyboard tele-op
jjaime2 Dec 9, 2024
80c710f
Fix typo in jaco_arm_servo_controller
jjaime2 Dec 9, 2024
477a47d
Remove articulable_fork.launch.py
jjaime2 Dec 9, 2024
45be0b4
Merge branch 'jjaime2/dynamixel_hw_interface' into jjaime2/articulabl…
jjaime2 Dec 12, 2024
4d3b048
Cleanup
jjaime2 Dec 12, 2024
062356b
Add configuration for end_effector_tool
jjaime2 Dec 13, 2024
3ba9ae2
Merge branch 'jjaime2/articulable_fork_description' into jjaime2/arti…
jjaime2 Dec 14, 2024
ed730e0
Use updated ada macro
jjaime2 Dec 14, 2024
b6821e2
Update launch files to enable end_effector_tool parameterization
jjaime2 Dec 15, 2024
0fae939
Rename jaco_af move group to ada
jjaime2 Dec 16, 2024
e0e18c9
Merge branch 'jjaime2/dynamixel_hw_interface' into jjaime2/articulabl…
jjaime2 Dec 18, 2024
69d0976
Disable collision between af_link_base and forkHandle
jjaime2 Dec 18, 2024
ef1592b
Run pre-commit
jjaime2 Dec 18, 2024
669aa7d
Only load Dynamixel hardware interface if end_effector_tool is set to…
jjaime2 Dec 20, 2024
8852f74
Revert "Only load Dynamixel hardware interface if end_effector_tool i…
jjaime2 Dec 20, 2024
a902c0b
Configure semantic robot description with end_effector_tool
jjaime2 Dec 20, 2024
40a4a66
Change IMU serial port to /dev/ttyUSB1 to avoid conflict with Articul…
jjaime2 Jan 14, 2025
5b6a167
Merge branch 'main' into jjaime2/articulable_fork_moveit
jjaime2 Jan 14, 2025
2f9bc66
Remove end_effector_tool choice none since controlling the ada move g…
jjaime2 Jan 15, 2025
6eacdd7
Remove redundant list of choices in end_effector_tool launch argument
jjaime2 Jan 15, 2025
b83256a
Merge branch 'jjaime2/dynamixel_hw_interface' into jjaime2/articulabl…
jjaime2 Jan 15, 2025
311e409
Address pylint warnings
jjaime2 Jan 15, 2025
7301d24
Merge branch 'jjaime2/dynamixel_hw_interface' into jjaime2/articulabl…
jjaime2 Jan 29, 2025
219f0ff
Remove base_parent argument when instantiating ada macro
jjaime2 Jan 29, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion ada_imu/config/imu_params.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ imu_jointstate_publisher:
- -232.50333333333336
- 40.96

serial_port: '/dev/ttyUSB0'
serial_port: '/dev/ttyUSB1'
velocity_thresh: 0.05 # radians per second

# weights used in exponential rolling averages, between 0 and 1
Expand Down
49 changes: 49 additions & 0 deletions ada_moveit/config/ada.ros2_control.xacro
Original file line number Diff line number Diff line change
Expand Up @@ -133,4 +133,53 @@

</ros2_control>
</xacro:macro>

<xacro:macro name="af_ros2_control" params="name initial_positions_file sim">
<xacro:property name="initial_positions" value="${xacro.load_yaml(initial_positions_file)['initial_positions']}"/>

<ros2_control name="${name}" type="system">
<hardware>
<xacro:if value="${sim == 'mock'}">
<plugin>mock_components/GenericSystem</plugin>
<param name="mock_sensor_commands">false</param>
<param name="state_following_offset">0.0</param>
</xacro:if>
<xacro:if value="${sim == 'real'}">
<plugin>dynamixel_hardware/DynamixelHardware</plugin>
<param name="usb_port">/dev/ttyUSB0</param>
<param name="baud_rate">1000000</param>
</xacro:if>
</hardware>

<joint name="af_joint_1">
<param name="id">1</param>
<command_interface name="position" />
<command_interface name="velocity" />
<state_interface name="position">
<param name="initial_value">${initial_positions['af_joint_1']}</param>
</state_interface>
<state_interface name="velocity">
<param name="initial_value">0.0</param>
</state_interface>
<state_interface name="effort">
<param name="initial_value">0.0</param>
</state_interface>
</joint>
<joint name="af_joint_2">
<param name="id">2</param>
<command_interface name="position" />
<command_interface name="velocity" />
<state_interface name="position">
<param name="initial_value">${initial_positions['af_joint_2']}</param>
</state_interface>
<state_interface name="velocity">
<param name="initial_value">0.0</param>
</state_interface>
<state_interface name="effort">
<param name="initial_value">0.0</param>
</state_interface>
</joint>
</ros2_control>

</xacro:macro>
</robot>
80 changes: 78 additions & 2 deletions ada_moveit/config/ada.srdf
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,17 @@
This is a format for representing semantic information about the robot structure.
A URDF file must exist for this robot as well, where the joints and the links that are referenced are defined
-->
<robot name="ada">
<robot name="ada" xmlns:xacro="http://www.ros.org/wiki/xacro">
<xacro:arg name="end_effector_tool" default="fork" />
<xacro:property name="end_effector_tool" value="$(arg end_effector_tool)" />

<!--GROUPS: Representation of a set of joints and links. This can be useful for specifying DOF to plan for, defining arms, end effectors, etc-->
<!--LINKS: When a link is specified, the parent joint of that link (if it exists) is automatically included-->
<!--JOINTS: When a joint is specified, the child link of that joint (which will always exist) is automatically included-->
<!--CHAINS: When a chain is specified, all the links along the chain (including endpoints) are included in the group. Additionally, all the joints that are parents to included links are also included. This means that joints along the chain and the parent joint of the base link are included in the group-->
<!--SUBGROUPS: Groups can also be formed by referencing to already defined group names-->
<group name="jaco_arm">
<chain base_link="j2n6s200_link_base" tip_link="forkTip"/>
<chain base_link="j2n6s200_link_base" tip_link="j2n6s200_end_effector"/>
</group>
<group name="hand">
<link name="j2n6s200_end_effector"/>
Expand All @@ -21,6 +24,14 @@
<joint name="j2n6s200_joint_finger_1"/>
<joint name="j2n6s200_joint_finger_2"/>
</group>
<xacro:if value="${end_effector_tool == 'articulable_fork'}">
<group name="articulable_fork">
<chain base_link="af_link_base" tip_link="forkTip"/>
</group>
</xacro:if>
<group name="ada">
<chain base_link="j2n6s200_link_base" tip_link="forkTip"/>
</group>
<!--GROUP STATES: Purpose: Define a named state for a particular group, in terms of joint values. This is useful to define states like 'folded arms'-->
<group_state name="Home" group="jaco_arm">
<joint name="j2n6s200_joint_1" value="-1.47568"/>
Expand Down Expand Up @@ -50,6 +61,36 @@
<joint name="j2n6s200_joint_finger_1" value="1.46977"/>
<joint name="j2n6s200_joint_finger_2" value="1.46977"/>
</group_state>
<xacro:if value="${end_effector_tool == 'articulable_fork'}">
<group_state name="Home" group="articulable_fork">
<joint name="af_joint_1" value="0.0"/>
<joint name="af_joint_2" value="0.0"/>
</group_state>
</xacro:if>
<group_state name="Home" group="ada">
<joint name="j2n6s200_joint_1" value="-1.47568"/>
<joint name="j2n6s200_joint_2" value="2.92779"/>
<joint name="j2n6s200_joint_3" value="1.00845"/>
<joint name="j2n6s200_joint_4" value="-2.0847"/>
<joint name="j2n6s200_joint_5" value="1.43588"/>
<joint name="j2n6s200_joint_6" value="1.32575"/>
<xacro:if value="${end_effector_tool == 'articulable_fork'}">
<joint name="af_joint_1" value="0.0"/>
<joint name="af_joint_2" value="0.0"/>
</xacro:if>
</group_state>
<group_state name="Candle" group="ada">
<joint name="j2n6s200_joint_1" value="0.0"/>
<joint name="j2n6s200_joint_2" value="3.14159"/>
<joint name="j2n6s200_joint_3" value="3.14159"/>
<joint name="j2n6s200_joint_4" value="0.0"/>
<joint name="j2n6s200_joint_5" value="0.0"/>
<joint name="j2n6s200_joint_6" value="0.0"/>
<xacro:if value="${end_effector_tool == 'articulable_fork'}">
<joint name="af_joint_1" value="0.0"/>
<joint name="af_joint_2" value="0.0"/>
</xacro:if>
</group_state>
<!--END EFFECTOR: Purpose: Delineate group(s) as end-effectors for other group(s).-->
<end_effector name="hand" parent_link="j2n6s200_link_6" group="hand" parent_group="jaco_arm"/>
<!--VIRTUAL JOINT: Purpose: this element defines a virtual joint between a robot link and an external frame of reference (considered fixed with respect to the robot)-->
Expand Down Expand Up @@ -266,4 +307,39 @@
<disable_collisions link1="uncalibrated_camera_link" link2="screwHeadLeft" reason="Adjacent"/>
<disable_collisions link1="uncalibrated_camera_link" link2="screwHeadRight" reason="Adjacent"/>

<!-- Disable collisions for Articulable Fork links -->
<xacro:if value="${end_effector_tool == 'articulable_fork'}">
<disable_collisions link1="af_link_base" link2="forkHandle" reason="Adjacent"/>
<disable_collisions link1="af_link_base" link2="af_link_1" reason="Adjacent"/>
<disable_collisions link1="af_link_base" link2="af_link_2" reason="Adjacent"/>
<disable_collisions link1="af_link_base" link2="af_ft_adapter_link" reason="Adjacent"/>
<disable_collisions link1="af_link_base" link2="af_motor_fixture_link" reason="Adjacent"/>
<disable_collisions link1="af_link_base" link2="forkTine" reason="Never"/>
<disable_collisions link1="af_link_base" link2="forque" reason="Never"/>
<disable_collisions link1="af_link_1" link2="af_link_base" reason="Adjacent"/>
<disable_collisions link1="af_link_1" link2="af_link_2" reason="Adjacent"/>
<disable_collisions link1="af_link_1" link2="af_ft_adapter_link" reason="Adjacent"/>
<disable_collisions link1="af_link_1" link2="af_motor_fixture_link" reason="Adjacent"/>
<disable_collisions link1="af_link_1" link2="forkTine" reason="Adjacent"/>
<disable_collisions link1="af_link_1" link2="forque" reason="Adjacent"/>
<disable_collisions link1="af_link_2" link2="af_link_1" reason="Adjacent"/>
<disable_collisions link1="af_link_2" link2="af_link_base" reason="Adjacent"/>
<disable_collisions link1="af_link_2" link2="af_ft_adapter_link" reason="Adjacent"/>
<disable_collisions link1="af_link_2" link2="af_motor_fixture_link" reason="Adjacent"/>
<disable_collisions link1="af_link_2" link2="forkTine" reason="Adjacent"/>
<disable_collisions link1="af_link_2" link2="forque" reason="Adjacent"/>
<disable_collisions link1="af_ft_adapter_link" link2="af_link_1" reason="Adjacent"/>
<disable_collisions link1="af_ft_adapter_link" link2="af_link_2" reason="Adjacent"/>
<disable_collisions link1="af_ft_adapter_link" link2="af_link_base" reason="Adjacent"/>
<disable_collisions link1="af_ft_adapter_link" link2="af_motor_fixture_link" reason="Adjacent"/>
<disable_collisions link1="af_ft_adapter_link" link2="forkTine" reason="Adjacent"/>
<disable_collisions link1="af_ft_adapter_link" link2="forque" reason="Adjacent"/>
<disable_collisions link1="af_motor_fixture_link" link2="af_link_1" reason="Adjacent"/>
<disable_collisions link1="af_motor_fixture_link" link2="af_link_2" reason="Adjacent"/>
<disable_collisions link1="af_motor_fixture_link" link2="af_ft_adapter_link" reason="Adjacent"/>
<disable_collisions link1="af_motor_fixture_link" link2="af_link_base" reason="Adjacent"/>
<disable_collisions link1="af_motor_fixture_link" link2="forkTine" reason="Adjacent"/>
<disable_collisions link1="af_motor_fixture_link" link2="forque" reason="Adjacent"/>
</xacro:if>

</robot>
10 changes: 10 additions & 0 deletions ada_moveit/config/ada.urdf.xacro
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,14 @@
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="ada">
<xacro:arg name="initial_positions_file" default="initial_positions.yaml" />
<xacro:arg name="sim" default="real" />
<xacro:arg name="end_effector_tool" default="fork" />

<!-- Import ada urdf file -->
<xacro:include filename="$(find ada_description)/urdf/ada.xacro" />

<xacro:property name="end_effector_tool" value="$(arg end_effector_tool)" />
<xacro:ada end_effector_tool="${end_effector_tool}" />

<!-- Import control_xacro -->
<xacro:include filename="ada.ros2_control.xacro" />

Expand All @@ -14,4 +18,10 @@
initial_positions_file="$(arg initial_positions_file)"
sim="$(arg sim)" />

<xacro:if value="${end_effector_tool == 'articulable_fork'}">
<xacro:af_ros2_control name="AFHardware"
initial_positions_file="$(arg initial_positions_file)"
sim="$(arg sim)" />
</xacro:if>

</robot>
2 changes: 2 additions & 0 deletions ada_moveit/config/initial_positions.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,5 @@ initial_positions:
j2n6s200_joint_6: 1.32575
j2n6s200_joint_finger_1: 1.317
j2n6s200_joint_finger_2: 1.317
af_joint_1: 0.0
af_joint_2: 0.0
10 changes: 10 additions & 0 deletions ada_moveit/config/joint_limits.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -51,3 +51,13 @@ joint_limits:
max_velocity: 1.0
has_acceleration_limits: false
max_acceleration: 0
af_joint_1:
has_velocity_limits: true
max_velocity: 0.83775804095727813
has_acceleration_limits: false
max_acceleration: 0
af_joint_2:
has_velocity_limits: true
max_velocity: 0.83775804095727813
has_acceleration_limits: false
max_acceleration: 0
28 changes: 28 additions & 0 deletions ada_moveit/config/kinematics.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,31 @@ jaco_arm:
cost_threshold: 0.001
minimal_displacement_weight: 0.0
gd_step_size: 0.0001

ada:
kinematics_solver: pick_ik/PickIkPlugin
kinematics_solver_timeout: 0.05
kinematics_solver_attempts: 3
mode: global
stop_optimization_on_valid_solution: true
position_scale: 1.0
rotation_scale: 0.5
position_threshold: 0.001
orientation_threshold: 0.01
cost_threshold: 0.001
minimal_displacement_weight: 0.0
gd_step_size: 0.0001

articulable_fork:
kinematics_solver: pick_ik/PickIkPlugin
kinematics_solver_timeout: 0.05
kinematics_solver_attempts: 3
mode: global
stop_optimization_on_valid_solution: true
position_scale: 1.0
rotation_scale: 0.5
position_threshold: 0.001
orientation_threshold: 0.01
cost_threshold: 0.001
minimal_displacement_weight: 0.0
gd_step_size: 0.0001
37 changes: 36 additions & 1 deletion ada_moveit/config/mock_controllers.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,21 @@ controller_manager:
joint_state_broadcaster:
type: joint_state_broadcaster/JointStateBroadcaster


jaco_arm_cartesian_controller:
type: cartesian_twist_controller/CartesianTwistController


af_controller:
type: force_gate_controller/ForceGateController


af_servo_controller:
type: force_gate_controller/ForceGatePositionController

jaco_arm_cartesian_controller:
ros__parameters:
end_effector_link: "forkTip"
end_effector_link: "j2n6s200_end_effector"
robot_base_link: "j2n6s200_link_base"
ik_solver: "selectively_damped_least_squares"
joints:
Expand Down Expand Up @@ -85,6 +94,32 @@ jaco_arm_servo_controller:
- j2n6s200_joint_5
- j2n6s200_joint_6

af_controller:
ros__parameters:
joints:
- af_joint_1
- af_joint_2
command_interfaces:
- position
state_interfaces:
- position
allow_partial_joints_goal: false
open_loop_control: false
stopped_velocity_tolerance: 0.01
# No gains on position interface
af_joint_1:
goal: 0.02
trajectory: 0.05
af_joint_2:
goal: 0.02
trajectory: 0.05

af_servo_controller:
ros__parameters:
joints:
- af_joint_1
- af_joint_2

hand_controller:
ros__parameters:
joints:
Expand Down
3 changes: 2 additions & 1 deletion ada_moveit/config/mock_servo.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,11 @@ servo_node:

## MoveIt properties
move_group_name: jaco_arm # Often 'manipulator' or 'arm'

planning_frame: j2n6s200_link_base # The MoveIt planning frame. Often 'base_link' or 'world'

## Other frames
ee_frame_name: forkTip # The name of the end effector link, used to return the EE pose
ee_frame_name: j2n6s200_end_effector # The name of the end effector link, used to return the EE pose
robot_link_command_frame: j2n6s200_link_base # commands must be given in the frame of a robot link. Usually either the base or end effector

## Stopping behaviour
Expand Down
19 changes: 19 additions & 0 deletions ada_moveit/config/moveit_controllers.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ moveit_simple_controller_manager:
- jaco_arm_controller
- jaco_arm_cartesian_controller
- jaco_arm_servo_controller
- af_controller
- af_servo_controller
- hand_controller

jaco_arm_controller:
Expand Down Expand Up @@ -47,6 +49,23 @@ moveit_simple_controller_manager:
- j2n6s200_joint_4
- j2n6s200_joint_5
- j2n6s200_joint_6

af_controller:
type: FollowJointTrajectory
action_ns: follow_joint_trajectory
default: true
joints:
- af_joint_1
- af_joint_2

af_servo_controller:
type: ""
action_ns: commands
default: false
joints:
- af_joint_1
- af_joint_2

hand_controller:
type: FollowJointTrajectory
action_ns: follow_joint_trajectory
Expand Down
30 changes: 30 additions & 0 deletions ada_moveit/config/ompl_planning.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,21 @@ planner_configs:
max_nearest_neighbors: 10 # use k nearest neighbors. default: 10
PRMstarkConfigDefault:
type: geometric::PRMstar
ada:
enforce_constrained_state_space: true
projection_evaluator: joints(j2n6s200_joint_1,j2n6s200_joint_2)
planner_configs:
- SBLkConfigDefault
- ESTkConfigDefault
- LBKPIECEkConfigDefault
- BKPIECEkConfigDefault
- KPIECEkConfigDefault
- RRTkConfigDefault
- RRTConnectkConfigDefault
- RRTstarkConfigDefault
- TRRTkConfigDefault
- PRMkConfigDefault
- PRMstarkConfigDefault
jaco_arm:
enforce_constrained_state_space: true
projection_evaluator: joints(j2n6s200_joint_1,j2n6s200_joint_2)
Expand All @@ -79,6 +94,21 @@ jaco_arm:
- TRRTkConfigDefault
- PRMkConfigDefault
- PRMstarkConfigDefault
articulable_fork:
enforce_constrained_state_space: true
projection_evaluator: joints(af_joint_1,af_joint_2)
planner_configs:
- SBLkConfigDefault
- ESTkConfigDefault
- LBKPIECEkConfigDefault
- BKPIECEkConfigDefault
- KPIECEkConfigDefault
- RRTkConfigDefault
- RRTConnectkConfigDefault
- RRTstarkConfigDefault
- TRRTkConfigDefault
- PRMkConfigDefault
- PRMstarkConfigDefault
hand:
enforce_constrained_state_space: true
projection_evaluator: joints(j2n6s200_joint_1,j2n6s200_joint_2)
Expand Down
Loading