From 02a6b1dc3b1c4dd03c54e1de99e8ca1bf3e89923 Mon Sep 17 00:00:00 2001 From: Thomason Zhou Date: Wed, 22 Apr 2026 17:12:53 -0600 Subject: [PATCH 1/6] Add use_fake_hardware flag for backwards compatibility while adding new arg for hardware_type --- launch/display_openarm.launch.py | 42 ++++++++++++++++++++++++++++++-- urdf/robot/openarm_robot.xacro | 10 +++++--- urdf/robot/v10.urdf.xacro | 2 ++ 3 files changed, 49 insertions(+), 5 deletions(-) diff --git a/launch/display_openarm.launch.py b/launch/display_openarm.launch.py index f14e231..a9b2f35 100644 --- a/launch/display_openarm.launch.py +++ b/launch/display_openarm.launch.py @@ -24,10 +24,21 @@ from launch_ros.actions import Node -def robot_state_publisher_spawner(context: LaunchContext, arm_type, ee_type, bimanual): +def robot_state_publisher_spawner( + context: LaunchContext, + arm_type, + ee_type, + bimanual, + ros2_control, + hardware_type, + use_fake_hardware, +): arm_type_str = context.perform_substitution(arm_type) ee_type_str = context.perform_substitution(ee_type) bimanual_str = context.perform_substitution(bimanual) + ros2_control_str = context.perform_substitution(ros2_control) + hardware_type_str = context.perform_substitution(hardware_type) + use_fake_hardware_str = context.perform_substitution(use_fake_hardware) xacro_path = os.path.join( get_package_share_directory("openarm_description"), @@ -40,6 +51,9 @@ def robot_state_publisher_spawner(context: LaunchContext, arm_type, ee_type, bim "arm_type": arm_type_str, "ee_type": ee_type_str, "bimanual": bimanual_str, + "ros2_control": ros2_control_str, + "hardware_type": hardware_type_str, + "use_fake_hardware": use_fake_hardware_str, } ).toprettyxml(indent=" ") @@ -92,13 +106,34 @@ def generate_launch_description(): description="Whether to use bimanual configuration" ) + ros2_control_arg = DeclareLaunchArgument( + "ros2_control", + default_value="false", + description="Use ros2_control hardware interfaces in the robot description." + ) + + hardware_type_arg = DeclareLaunchArgument( + "hardware_type", + default_value="", + description="Hardware backend to use, defaults to use_fake_hardware." + ) + + use_fake_hardware_arg = DeclareLaunchArgument( + "use_fake_hardware", + default_value="false", + description="Deprecated flag for backwards compatibility." + ) + arm_type = LaunchConfiguration("arm_type") ee_type = LaunchConfiguration("ee_type") bimanual = LaunchConfiguration("bimanual") + ros2_control = LaunchConfiguration("ros2_control") + hardware_type = LaunchConfiguration("hardware_type") + use_fake_hardware = LaunchConfiguration("use_fake_hardware") robot_state_publisher_loader = OpaqueFunction( function=robot_state_publisher_spawner, - args=[arm_type, ee_type, bimanual] + args=[arm_type, ee_type, bimanual, ros2_control, hardware_type, use_fake_hardware] ) rviz_loader = OpaqueFunction( @@ -110,6 +145,9 @@ def generate_launch_description(): arm_type_arg, ee_type_arg, bimanual_arg, + ros2_control_arg, + hardware_type_arg, + use_fake_hardware_arg, robot_state_publisher_loader, Node( package="joint_state_publisher_gui", diff --git a/urdf/robot/openarm_robot.xacro b/urdf/robot/openarm_robot.xacro index e0ff3a9..0e92333 100644 --- a/urdf/robot/openarm_robot.xacro +++ b/urdf/robot/openarm_robot.xacro @@ -20,6 +20,7 @@ ee_type:='' ros2_control:=false can_interface:='' + hardware_type:='real' use_fake_hardware:=false fake_sensor_commands:=false no_prefix:='false' @@ -54,6 +55,9 @@ + @@ -106,7 +110,7 @@ control_gains="${control_gains}" left_can_interface="${left_can_interface}" right_can_interface="${right_can_interface}" - use_fake_hardware="${use_fake_hardware}" + hardware_type="${hardware}" fake_sensor_commands="${fake_sensor_commands}" left_arm_prefix="${left_arm_prefix}" right_arm_prefix="${right_arm_prefix}" @@ -165,7 +169,7 @@ control_gains="${control_gains}" arm_prefix="${arm_prefix_modified}" can_interface="${can_interface}" - use_fake_hardware="${use_fake_hardware}" + hardware_type="${hardware}" fake_sensor_commands="${fake_sensor_commands}" hand="${hand}" bimanual="false" @@ -197,4 +201,4 @@ - \ No newline at end of file + diff --git a/urdf/robot/v10.urdf.xacro b/urdf/robot/v10.urdf.xacro index fc0420a..2bad105 100644 --- a/urdf/robot/v10.urdf.xacro +++ b/urdf/robot/v10.urdf.xacro @@ -35,6 +35,7 @@ + @@ -70,6 +71,7 @@ right_can_interface="$(arg right_can_interface)" left_arm_prefix="$(arg left_arm_prefix)" right_arm_prefix="$(arg right_arm_prefix)" + hardware_type="$(arg hardware_type)" use_fake_hardware="$(arg use_fake_hardware)" fake_sensor_commands="$(arg fake_sensor_commands)" no_prefix="$(arg no_prefix)" From 8db5adb017e7de74e40fdf48e674009de07ff135 Mon Sep 17 00:00:00 2001 From: Thomason Zhou Date: Wed, 22 Apr 2026 17:22:06 -0600 Subject: [PATCH 2/6] Set hardware_type default to _ --- urdf/robot/openarm_robot.xacro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/urdf/robot/openarm_robot.xacro b/urdf/robot/openarm_robot.xacro index 0e92333..8c16651 100644 --- a/urdf/robot/openarm_robot.xacro +++ b/urdf/robot/openarm_robot.xacro @@ -20,7 +20,7 @@ ee_type:='' ros2_control:=false can_interface:='' - hardware_type:='real' + hardware_type:='' use_fake_hardware:=false fake_sensor_commands:=false no_prefix:='false' From 43d63f2a1db0d10c5edd51928c7b2b6ef29664c1 Mon Sep 17 00:00:00 2001 From: Thomason Zhou Date: Wed, 22 Apr 2026 17:23:04 -0600 Subject: [PATCH 3/6] Pre-commit --- launch/display_openarm.launch.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/launch/display_openarm.launch.py b/launch/display_openarm.launch.py index a9b2f35..af26fea 100644 --- a/launch/display_openarm.launch.py +++ b/launch/display_openarm.launch.py @@ -133,7 +133,8 @@ def generate_launch_description(): robot_state_publisher_loader = OpaqueFunction( function=robot_state_publisher_spawner, - args=[arm_type, ee_type, bimanual, ros2_control, hardware_type, use_fake_hardware] + args=[arm_type, ee_type, bimanual, ros2_control, + hardware_type, use_fake_hardware] ) rviz_loader = OpaqueFunction( From 81a5b8d4182dec9947c54a1ab2791c180303ef47 Mon Sep 17 00:00:00 2001 From: Thomason Zhou Date: Wed, 22 Apr 2026 17:27:54 -0600 Subject: [PATCH 4/6] Complete rebase to use hardware_type across all files --- .../openarm.bimanual.ros2_control.xacro | 14 +++++++------- urdf/ros2_control/openarm.ros2_control.xacro | 6 +++--- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/urdf/ros2_control/openarm.bimanual.ros2_control.xacro b/urdf/ros2_control/openarm.bimanual.ros2_control.xacro index 56916e5..fc02ffd 100644 --- a/urdf/ros2_control/openarm.bimanual.ros2_control.xacro +++ b/urdf/ros2_control/openarm.bimanual.ros2_control.xacro @@ -6,7 +6,7 @@ control_gains left_can_interface:=^|can1 right_can_interface:=^|can0 - use_fake_hardware:=^|false + hardware_type:=^|real fake_sensor_commands:=^|false hand:=^|false left_arm_prefix:=^|left_ @@ -17,12 +17,12 @@ ${arm_type} - + mock_components/GenericSystem ${fake_sensor_commands} 0.0 - + openarm_hardware/OpenArm_v10HW ${left_can_interface} ${left_arm_prefix} @@ -42,7 +42,7 @@ ${control_gains['joint5']['kd']} ${control_gains['joint6']['kd']} ${control_gains['joint7']['kd']} - + @@ -82,12 +82,12 @@ ${arm_type} - + mock_components/GenericSystem ${fake_sensor_commands} 0.0 - + openarm_hardware/OpenArm_v10HW ${right_can_interface} ${right_arm_prefix} @@ -107,7 +107,7 @@ ${control_gains['joint5']['kd']} ${control_gains['joint6']['kd']} ${control_gains['joint7']['kd']} - + diff --git a/urdf/ros2_control/openarm.ros2_control.xacro b/urdf/ros2_control/openarm.ros2_control.xacro index 223c331..f3e93a2 100644 --- a/urdf/ros2_control/openarm.ros2_control.xacro +++ b/urdf/ros2_control/openarm.ros2_control.xacro @@ -5,7 +5,7 @@ params="arm_type control_gains can_interface - use_fake_hardware:=^|false + hardware_type:=^|real fake_sensor_commands:=^|false hand:=^|false gazebo_effort:=^|false @@ -17,12 +17,12 @@ ${arm_type} ${arm_prefix} - + mock_components/GenericSystem ${fake_sensor_commands} 0.0 - + openarm_hardware/OpenArm_${arm_type}HW ${can_interface} ${arm_prefix} From f57884194d55c10f42e3962086448488a2411fe0 Mon Sep 17 00:00:00 2001 From: Thomason Zhou Date: Wed, 22 Apr 2026 17:31:56 -0600 Subject: [PATCH 5/6] Update launch arg description --- launch/display_openarm.launch.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/launch/display_openarm.launch.py b/launch/display_openarm.launch.py index af26fea..06ce836 100644 --- a/launch/display_openarm.launch.py +++ b/launch/display_openarm.launch.py @@ -115,7 +115,7 @@ def generate_launch_description(): hardware_type_arg = DeclareLaunchArgument( "hardware_type", default_value="", - description="Hardware backend to use, defaults to use_fake_hardware." + description="Hardware backend to use (real/mock/mujoco)." ) use_fake_hardware_arg = DeclareLaunchArgument( From caaacea771e23445fc591801429881d5ab8f8538 Mon Sep 17 00:00:00 2001 From: Thomason Zhou Date: Wed, 22 Apr 2026 17:35:31 -0600 Subject: [PATCH 6/6] Change sim hardware to general hardware_type --- urdf/ros2_control/openarm.bimanual.ros2_control.xacro | 10 ++++++++++ urdf/ros2_control/openarm.ros2_control.xacro | 7 ++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/urdf/ros2_control/openarm.bimanual.ros2_control.xacro b/urdf/ros2_control/openarm.bimanual.ros2_control.xacro index fc02ffd..cec8420 100644 --- a/urdf/ros2_control/openarm.bimanual.ros2_control.xacro +++ b/urdf/ros2_control/openarm.bimanual.ros2_control.xacro @@ -7,6 +7,8 @@ left_can_interface:=^|can1 right_can_interface:=^|can0 hardware_type:=^|real + left_websocket_port:=^|1337 + right_websocket_port:=^|1338 fake_sensor_commands:=^|false hand:=^|false left_arm_prefix:=^|left_ @@ -17,6 +19,10 @@ ${arm_type} + + openarm_mujoco_hardware/MujocoHardware + ${left_websocket_port} + mock_components/GenericSystem ${fake_sensor_commands} @@ -82,6 +88,10 @@ ${arm_type} + + openarm_mujoco_hardware/MujocoHardware + ${right_websocket_port} + mock_components/GenericSystem ${fake_sensor_commands} diff --git a/urdf/ros2_control/openarm.ros2_control.xacro b/urdf/ros2_control/openarm.ros2_control.xacro index f3e93a2..d1ec6f4 100644 --- a/urdf/ros2_control/openarm.ros2_control.xacro +++ b/urdf/ros2_control/openarm.ros2_control.xacro @@ -11,12 +11,17 @@ gazebo_effort:=^|false arm_prefix:='' bimanual:=false - can_fd:=^|true"> + can_fd:=^|true + websocket_port:=1337"> ${arm_type} ${arm_prefix} + + openarm_mujoco_hardware/MujocoHardware + ${websocket_port} + mock_components/GenericSystem ${fake_sensor_commands}