From 287eabf4928fe35b2f7bd59e6b786dc715a6d62c Mon Sep 17 00:00:00 2001 From: Kalana Ratnayake Date: Tue, 31 Mar 2026 04:21:20 +0000 Subject: [PATCH 1/5] added changes to work with moveit jazzy --- moma_ros/config/ld250_tm12x.srdf | 62 +++++++ moma_ros/config/ld250_tm12x_joint_limits.yaml | 37 ++++ .../config/ld250_tm12x_ompl_planning.yaml | 165 ++++++++++++++++++ .../ld250_tm12x.hardware.launch.py | 10 +- .../ld250_tm12x/ld250_tm12x.moveit.launch.py | 131 +++++--------- .../ld250_tm12x/ld250_tm12x.rviz.launch.py | 100 +++++------ moma_ros/package.xml | 2 + 7 files changed, 366 insertions(+), 141 deletions(-) create mode 100644 moma_ros/config/ld250_tm12x.srdf create mode 100644 moma_ros/config/ld250_tm12x_joint_limits.yaml create mode 100644 moma_ros/config/ld250_tm12x_ompl_planning.yaml diff --git a/moma_ros/config/ld250_tm12x.srdf b/moma_ros/config/ld250_tm12x.srdf new file mode 100644 index 0000000..9986470 --- /dev/null +++ b/moma_ros/config/ld250_tm12x.srdf @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/moma_ros/config/ld250_tm12x_joint_limits.yaml b/moma_ros/config/ld250_tm12x_joint_limits.yaml new file mode 100644 index 0000000..be32764 --- /dev/null +++ b/moma_ros/config/ld250_tm12x_joint_limits.yaml @@ -0,0 +1,37 @@ +# Combined ld250_tm12x joint limits override. +# These acceleration limits are local fallback values so MoveIt's time-parameterization +# can generate executable trajectories for the mobile-manipulator stack. +default_velocity_scaling_factor: 0.1 +default_acceleration_scaling_factor: 0.1 + +joint_limits: + joint_1: + has_velocity_limits: true + max_velocity: 2.0943951023931953 + has_acceleration_limits: true + max_acceleration: 2.0943951023931953 + joint_2: + has_velocity_limits: true + max_velocity: 2.0943951023931953 + has_acceleration_limits: true + max_acceleration: 2.0943951023931953 + joint_3: + has_velocity_limits: true + max_velocity: 3.1415926535897931 + has_acceleration_limits: true + max_acceleration: 3.1415926535897931 + joint_4: + has_velocity_limits: true + max_velocity: 3.1415926535897931 + has_acceleration_limits: true + max_acceleration: 3.1415926535897931 + joint_5: + has_velocity_limits: true + max_velocity: 3.1415926535897931 + has_acceleration_limits: true + max_acceleration: 3.1415926535897931 + joint_6: + has_velocity_limits: true + max_velocity: 3.1415926535897931 + has_acceleration_limits: true + max_acceleration: 3.1415926535897931 diff --git a/moma_ros/config/ld250_tm12x_ompl_planning.yaml b/moma_ros/config/ld250_tm12x_ompl_planning.yaml new file mode 100644 index 0000000..6b1d4b1 --- /dev/null +++ b/moma_ros/config/ld250_tm12x_ompl_planning.yaml @@ -0,0 +1,165 @@ +planning_plugins: + - ompl_interface/OMPLPlanner +request_adapters: + - default_planning_request_adapters/ResolveConstraintFrames + - default_planning_request_adapters/ValidateWorkspaceBounds + - default_planning_request_adapters/CheckStartStateBounds + - default_planning_request_adapters/CheckStartStateCollision +response_adapters: + - default_planning_response_adapters/AddTimeOptimalParameterization + - default_planning_response_adapters/ValidateSolution + - default_planning_response_adapters/DisplayMotionPath +start_state_max_bounds_error: 0.1 +planner_configs: + SBLkConfigDefault: + type: geometric::SBL + range: 0.0 + ESTkConfigDefault: + type: geometric::EST + range: 0.0 + goal_bias: 0.05 + LBKPIECEkConfigDefault: + type: geometric::LBKPIECE + range: 0.0 + border_fraction: 0.9 + min_valid_path_fraction: 0.5 + BKPIECEkConfigDefault: + type: geometric::BKPIECE + range: 0.0 + border_fraction: 0.9 + failed_expansion_score_factor: 0.5 + min_valid_path_fraction: 0.5 + KPIECEkConfigDefault: + type: geometric::KPIECE + range: 0.0 + goal_bias: 0.05 + border_fraction: 0.9 + failed_expansion_score_factor: 0.5 + min_valid_path_fraction: 0.5 + RRTkConfigDefault: + type: geometric::RRT + range: 0.0 + goal_bias: 0.05 + RRTConnectkConfigDefault: + type: geometric::RRTConnect + range: 0.0 + RRTstarkConfigDefault: + type: geometric::RRTstar + range: 0.0 + goal_bias: 0.05 + delay_collision_checking: 1 + TRRTkConfigDefault: + type: geometric::TRRT + range: 0.0 + goal_bias: 0.05 + max_states_failed: 10 + temp_change_factor: 2.0 + min_temperature: 10e-10 + init_temperature: 10e-6 + frountier_threshold: 0.0 + frountierNodeRatio: 0.1 + k_constant: 0.0 + PRMkConfigDefault: + type: geometric::PRM + max_nearest_neighbors: 10 + PRMstarkConfigDefault: + type: geometric::PRMstar + FMTkConfigDefault: + type: geometric::FMT + num_samples: 1000 + radius_multiplier: 1.1 + nearest_k: 1 + cache_cc: 1 + heuristics: 0 + extended_fmt: 1 + BFMTkConfigDefault: + type: geometric::BFMT + num_samples: 1000 + radius_multiplier: 1.0 + nearest_k: 1 + balanced: 0 + optimality: 1 + heuristics: 1 + cache_cc: 1 + extended_fmt: 1 + PDSTkConfigDefault: + type: geometric::PDST + STRIDEkConfigDefault: + type: geometric::STRIDE + range: 0.0 + goal_bias: 0.05 + use_projected_distance: 0 + degree: 16 + max_degree: 18 + min_degree: 12 + max_pts_per_leaf: 6 + estimated_dimension: 0.0 + min_valid_path_fraction: 0.2 + BiTRRTkConfigDefault: + type: geometric::BiTRRT + range: 0.0 + temp_change_factor: 0.1 + init_temperature: 100 + frountier_threshold: 0.0 + frountier_node_ratio: 0.1 + cost_threshold: 1e300 + LBTRRTkConfigDefault: + type: geometric::LBTRRT + range: 0.0 + goal_bias: 0.05 + epsilon: 0.4 + BiESTkConfigDefault: + type: geometric::BiEST + range: 0.0 + ProjESTkConfigDefault: + type: geometric::ProjEST + range: 0.0 + goal_bias: 0.05 + LazyPRMkConfigDefault: + type: geometric::LazyPRM + range: 0.0 + LazyPRMstarkConfigDefault: + type: geometric::LazyPRMstar + SPARSkConfigDefault: + type: geometric::SPARS + stretch_factor: 3.0 + sparse_delta_fraction: 0.25 + dense_delta_fraction: 0.001 + max_failures: 1000 + SPARStwokConfigDefault: + type: geometric::SPARStwo + stretch_factor: 3.0 + sparse_delta_fraction: 0.25 + dense_delta_fraction: 0.001 + max_failures: 5000 + TrajOptDefault: + type: geometric::TrajOpt + +tmr_arm: + default_planner_config: RRTConnectkConfigDefault + planner_configs: + - SBLkConfigDefault + - ESTkConfigDefault + - LBKPIECEkConfigDefault + - BKPIECEkConfigDefault + - KPIECEkConfigDefault + - RRTkConfigDefault + - RRTConnectkConfigDefault + - RRTstarkConfigDefault + - TRRTkConfigDefault + - PRMkConfigDefault + - PRMstarkConfigDefault + - FMTkConfigDefault + - BFMTkConfigDefault + - PDSTkConfigDefault + - STRIDEkConfigDefault + - BiTRRTkConfigDefault + - LBTRRTkConfigDefault + - BiESTkConfigDefault + - ProjESTkConfigDefault + - LazyPRMkConfigDefault + - LazyPRMstarkConfigDefault + - SPARSkConfigDefault + - SPARStwokConfigDefault + - TrajOptDefault + longest_valid_segment_fraction: 0.01 diff --git a/moma_ros/launch/ld250_tm12x/ld250_tm12x.hardware.launch.py b/moma_ros/launch/ld250_tm12x/ld250_tm12x.hardware.launch.py index a963c7b..7f75741 100644 --- a/moma_ros/launch/ld250_tm12x/ld250_tm12x.hardware.launch.py +++ b/moma_ros/launch/ld250_tm12x/ld250_tm12x.hardware.launch.py @@ -1,5 +1,6 @@ import sys import os +import xacro from launch import LaunchDescription from launch.actions import DeclareLaunchArgument, IncludeLaunchDescription, OpaqueFunction from launch.substitutions import LaunchConfiguration @@ -18,6 +19,11 @@ def load_file(package_name, file_path): return '' +def load_robot_description(package_name, file_path): + absolute_file_path = os.path.join(get_package_share_directory(package_name), file_path) + return xacro.process_file(absolute_file_path).toxml() + + def _is_enabled(context, name): return LaunchConfiguration(name).perform(context).lower() == 'true' @@ -55,7 +61,9 @@ def _create_hardware_actions(context, tm_robot_ip, tm_use_simulation, robot_desc ) if override_enabled: - robot_description = {'robot_description': load_file('moma_description', 'urdf/ld250_tm12x.urdf')} + robot_description = { + 'robot_description': load_robot_description('moma_description', 'xacro/ld250_tm12x.urdf.xacro') + } actions.append( Node( package='robot_state_publisher', diff --git a/moma_ros/launch/ld250_tm12x/ld250_tm12x.moveit.launch.py b/moma_ros/launch/ld250_tm12x/ld250_tm12x.moveit.launch.py index e7fec9a..acfa65a 100644 --- a/moma_ros/launch/ld250_tm12x/ld250_tm12x.moveit.launch.py +++ b/moma_ros/launch/ld250_tm12x/ld250_tm12x.moveit.launch.py @@ -1,99 +1,61 @@ import os -import sys import yaml -import json -import xacro from launch import LaunchDescription from launch_ros.actions import Node from ament_index_python.packages import get_package_share_directory +from moveit_configs_utils import MoveItConfigsBuilder -def load_file(package_name, file_path): - package_path = get_package_share_directory(package_name) - absolute_file_path = os.path.join(package_path, file_path) - - try: - with open(absolute_file_path, 'r') as file: - return file.read() - except EnvironmentError: # parent of IOError, OSError *and* WindowsError where available - return None def load_yaml(package_name, file_path): - package_path = get_package_share_directory(package_name) - absolute_file_path = os.path.join(package_path, file_path) + absolute_file_path = os.path.join(get_package_share_directory(package_name), file_path) try: with open(absolute_file_path, 'r') as file: return yaml.safe_load(file) - except OSError: # parent of IOError, OSError *and* WindowsError where available + except OSError: return None - -def generate_launch_description(): - # Configure robot_description - robot_description_config = xacro.process_file( - os.path.join( - get_package_share_directory('moma_description'), - 'xacro', - 'ld250_tm12x.urdf.xacro', - ) - ) - robot_description = {'robot_description': robot_description_config.toxml()} - - - # SRDF Configuration - robot_description_semantic_config = load_file('tm12x_moveit_config' , 'config/tm12x.srdf') - robot_description_semantic = {'robot_description_semantic': robot_description_semantic_config} - - # Kinematics - kinematics_yaml = load_yaml('tm12x_moveit_config' , 'config/kinematics.yaml') - robot_description_kinematics = {'robot_description_kinematics': kinematics_yaml} - - # Planning Configuration - ompl_planning_pipeline_config = { - 'planning_pipelines': ['ompl'], - 'ompl': { - 'planning_plugin': 'ompl_interface/OMPLPlanner', - 'request_adapters': """default_planner_request_adapters/AddTimeOptimalParameterization - default_planner_request_adapters/FixWorkspaceBounds - default_planner_request_adapters/FixStartStateBounds - default_planner_request_adapters/FixStartStateCollision - default_planner_request_adapters/FixStartStatePathConstraints""", - 'start_state_max_bounds_error': 0.1, - }, - } - ompl_planning_yaml = load_yaml('tm12x_moveit_config' , 'config/ompl_planning.yaml') - ompl_planning_pipeline_config['ompl'].update(ompl_planning_yaml) - - # Trajectory Execution Configuration -> Controllers - controllers_yaml = load_yaml('tm12x_moveit_config', 'config/controllers.yaml') - moveit_controllers = { - 'moveit_simple_controller_manager': controllers_yaml, - 'moveit_controller_manager': 'moveit_simple_controller_manager/MoveItSimpleControllerManager' - } - - # Trajectory Execution Functionality - trajectory_execution = { - 'moveit_manage_controllers': True, - 'trajectory_execution.allowed_execution_duration_scaling': 1.2, - 'trajectory_execution.allowed_goal_duration_margin': 0.5, - 'trajectory_execution.allowed_start_tolerance': 0.1, - } - - # Planning scene - planning_scene_monitor_parameters = { - 'publish_planning_scene': True, - 'publish_geometry_updates': True, - 'publish_state_updates': True, - 'publish_transforms_updates': True, - } - - # Joint limits - joint_limits_yaml = { - 'robot_description_planning': load_yaml( - 'tm12x_moveit_config', 'config/joint_limits.yaml' +def get_moveit_config(): + moveit_config = ( + MoveItConfigsBuilder('ld250_tm12x', package_name='tm12x_moveit_config') + .robot_description( + file_path=os.path.join( + get_package_share_directory('moma_description'), + 'xacro', + 'ld250_tm12x.urdf.xacro', + ) + ) + .robot_description_semantic( + file_path=os.path.join( + get_package_share_directory('moma_ros'), + 'config', + 'ld250_tm12x.srdf', + ) + ) + .trajectory_execution( + file_path=os.path.join( + get_package_share_directory('tm12x_moveit_config'), + 'config', + 'moveit2_controllers.yaml', + ) ) - } + .joint_limits( + file_path=os.path.join( + get_package_share_directory('moma_ros'), + 'config', + 'ld250_tm12x_joint_limits.yaml', + ) + ) + .planning_pipelines(default_planning_pipeline='ompl', pipelines=['ompl']) + .to_moveit_configs() + ) + + moveit_config.planning_pipelines['ompl'] = load_yaml('moma_ros', 'config/ld250_tm12x_ompl_planning.yaml') + return moveit_config + +def generate_launch_description(): + moveit_config = get_moveit_config() # Start the actual move_group node/action server run_move_group_node = Node( @@ -102,14 +64,7 @@ def generate_launch_description(): output='screen', emulate_tty=True, parameters=[ - robot_description, - robot_description_semantic, - robot_description_kinematics, - ompl_planning_pipeline_config, - trajectory_execution, - moveit_controllers, - planning_scene_monitor_parameters, - joint_limits_yaml, + moveit_config.to_dict(), {"use_sim_time": True}, ], ) diff --git a/moma_ros/launch/ld250_tm12x/ld250_tm12x.rviz.launch.py b/moma_ros/launch/ld250_tm12x/ld250_tm12x.rviz.launch.py index 9478406..3cff7f0 100644 --- a/moma_ros/launch/ld250_tm12x/ld250_tm12x.rviz.launch.py +++ b/moma_ros/launch/ld250_tm12x/ld250_tm12x.rviz.launch.py @@ -1,8 +1,5 @@ import os -import sys import yaml -import json -import xacro from launch import LaunchDescription from launch.actions import DeclareLaunchArgument from launch.conditions import IfCondition, UnlessCondition @@ -10,28 +7,57 @@ from launch_ros.substitutions import FindPackageShare from launch.substitutions import LaunchConfiguration, PathJoinSubstitution from ament_index_python.packages import get_package_share_directory - -def load_file(package_name, file_path): - package_path = get_package_share_directory(package_name) - absolute_file_path = os.path.join(package_path, file_path) - - try: - with open(absolute_file_path, 'r') as file: - return file.read() - except EnvironmentError: # parent of IOError, OSError *and* WindowsError where available - return None +from moveit_configs_utils import MoveItConfigsBuilder def load_yaml(package_name, file_path): - package_path = get_package_share_directory(package_name) - absolute_file_path = os.path.join(package_path, file_path) + absolute_file_path = os.path.join(get_package_share_directory(package_name), file_path) try: with open(absolute_file_path, 'r') as file: return yaml.safe_load(file) - except OSError: # parent of IOError, OSError *and* WindowsError where available + except OSError: return None + +def get_moveit_config(): + moveit_config = ( + MoveItConfigsBuilder('ld250_tm12x', package_name='tm12x_moveit_config') + .robot_description( + file_path=os.path.join( + get_package_share_directory('moma_description'), + 'xacro', + 'ld250_tm12x.urdf.xacro', + ) + ) + .robot_description_semantic( + file_path=os.path.join( + get_package_share_directory('moma_ros'), + 'config', + 'ld250_tm12x.srdf', + ) + ) + .trajectory_execution( + file_path=os.path.join( + get_package_share_directory('tm12x_moveit_config'), + 'config', + 'moveit2_controllers.yaml', + ) + ) + .joint_limits( + file_path=os.path.join( + get_package_share_directory('moma_ros'), + 'config', + 'ld250_tm12x_joint_limits.yaml', + ) + ) + .planning_pipelines(default_planning_pipeline='ompl', pipelines=['ompl']) + .to_moveit_configs() + ) + + moveit_config.planning_pipelines['ompl'] = load_yaml('moma_ros', 'config/ld250_tm12x_ompl_planning.yaml') + return moveit_config + def generate_launch_description(): use_moveit = LaunchConfiguration('use_moveit') @@ -40,42 +66,12 @@ def generate_launch_description(): default_value='true', description='Whether to start RViz with the MoveIt configuration' ) - - # Configure robot_description - robot_description_config = xacro.process_file( - os.path.join( - get_package_share_directory('moma_description'), - 'xacro', - 'ld250_tm12x.urdf.xacro', - ) - ) - robot_description = {'robot_description': robot_description_config.toxml()} - - # SRDF Configuration - robot_description_semantic_config = load_file('tm12x_moveit_config' , 'config/tm12x.srdf') - robot_description_semantic = {'robot_description_semantic': robot_description_semantic_config} - - # Planning Configuration - ompl_planning_pipeline_config = { - 'planning_pipelines': ['ompl'], - 'ompl': { - 'planning_plugin': 'ompl_interface/OMPLPlanner', - 'request_adapters': """default_planner_request_adapters/AddTimeOptimalParameterization default_planner_request_adapters/FixWorkspaceBounds default_planner_request_adapters/FixStartStateBounds default_planner_request_adapters/FixStartStateCollision default_planner_request_adapters/FixStartStatePathConstraints""", - 'start_state_max_bounds_error': 0.1, - }, - } - - # Kinematics - kinematics_yaml = load_yaml('tm12x_moveit_config' , 'config/kinematics.yaml') - robot_description_kinematics = {'robot_description_kinematics': kinematics_yaml} + moveit_config = get_moveit_config() # RViz configurations moveit_rviz_config = PathJoinSubstitution([FindPackageShare('moma_ros'), 'rviz', 'ld250_tm12x-moveit.rviz']) nav2_rviz_cfg = PathJoinSubstitution([FindPackageShare('moma_ros'), 'rviz', 'ld250_tm12x-nav2.rviz']) - # Joint limits - joint_limits_yaml = {'robot_description_planning': load_yaml('tm12x_moveit_config', 'config/joint_limits.yaml')} - # RViz moveit_rviz_node = Node( package='rviz2', @@ -86,11 +82,11 @@ def generate_launch_description(): arguments=['-d', moveit_rviz_config], condition=IfCondition(use_moveit), parameters=[ - robot_description, - robot_description_semantic, - ompl_planning_pipeline_config, - robot_description_kinematics, - joint_limits_yaml, + moveit_config.robot_description, + moveit_config.robot_description_semantic, + moveit_config.planning_pipelines, + moveit_config.robot_description_kinematics, + moveit_config.joint_limits, ], ) diff --git a/moma_ros/package.xml b/moma_ros/package.xml index 75bdddd..4b092e3 100644 --- a/moma_ros/package.xml +++ b/moma_ros/package.xml @@ -9,6 +9,8 @@ ament_cmake + moveit_configs_utils + ament_lint_auto ament_lint_common From 32036452ae48d4788326ffafed4fce76f667c8f2 Mon Sep 17 00:00:00 2001 From: Kalana Ratnayake Date: Tue, 31 Mar 2026 05:28:59 +0000 Subject: [PATCH 2/5] updated the config, launch and readme to use jazzy instead of humble --- .devcontainer/Dockerfile | 6 +- .devcontainer/devcontainer.json | 2 +- .github/workflows/{humble.yml => docker.yml} | 4 +- README.md | 14 +- docker/Dockerfile | 6 +- docker/compose-teleop.yaml | 2 +- docker/compose.yaml | 2 +- moma_ros/config/ld250_tm12x-nav2.yaml | 81 +++------ moma_ros/config/ld250_tm12x_joint_limits.yaml | 37 ---- .../config/ld250_tm12x_ompl_planning.yaml | 165 ------------------ .../ld250_tm12x/ld250_tm12x.moveit.launch.py | 7 +- .../ld250_tm12x/ld250_tm12x.rviz.launch.py | 7 +- 12 files changed, 49 insertions(+), 284 deletions(-) rename .github/workflows/{humble.yml => docker.yml} (96%) delete mode 100644 moma_ros/config/ld250_tm12x_joint_limits.yaml delete mode 100644 moma_ros/config/ld250_tm12x_ompl_planning.yaml diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index e23f481..022b078 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,4 +1,4 @@ -FROM ros:humble +FROM ros:jazzy # Add vscode user with same UID and GID as your host system # (modified from https://code.visualstudio.com/remote/advancedcontainers/add-nonroot-user#_creating-a-nonroot-user) @@ -52,8 +52,8 @@ RUN echo "source /opt/ros/${ROS_DISTRO}/setup.bash" >> ~/.bashrc # make sure folders exist WORKDIR /home/$USERNAME/colcon_ws/src -RUN git clone https://github.com/CollaborativeRoboticsLab/omron_arm.git -b develop -RUN git clone https://github.com/CollaborativeRoboticsLab/omron_base.git -b develop +RUN git clone https://github.com/CollaborativeRoboticsLab/tmr_ros2.git -b develop +RUN git clone https://github.com/CollaborativeRoboticsLab/omron_amr.git -b develop RUN git clone https://github.com/CollaborativeRoboticsLab/omron_gripper.git -b develop # Install python packages diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index cc69976..bac9f65 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,5 +1,5 @@ { - "name": "Omron Moma humble", + "name": "Omron Moma Jazzy", "dockerFile": "Dockerfile", "remoteUser": "ubuntu", "containerEnv": { diff --git a/.github/workflows/humble.yml b/.github/workflows/docker.yml similarity index 96% rename from .github/workflows/humble.yml rename to .github/workflows/docker.yml index d627971..4468b46 100644 --- a/.github/workflows/humble.yml +++ b/.github/workflows/docker.yml @@ -1,4 +1,4 @@ -name: ROS Humble Omron MoMa Control stack +name: ROS Jazzy Omron MoMa Control stack on: workflow_dispatch: @@ -54,4 +54,4 @@ jobs: push: true tags: | ${{ env.REGISTRY }}/${{ env.OWNER }}/${{ env.IMAGE_NAME }}:latest - ${{ env.REGISTRY }}/${{ env.OWNER }}/${{ env.IMAGE_NAME }}:humble \ No newline at end of file + ${{ env.REGISTRY }}/${{ env.OWNER }}/${{ env.IMAGE_NAME }}:jazzy \ No newline at end of file diff --git a/README.md b/README.md index 756ea46..2bed557 100644 --- a/README.md +++ b/README.md @@ -4,12 +4,18 @@ Original packages are from [OmronAPAC](https://github.com/OmronAPAC) This repository allows controlling the Base, Arm and Gripper of the Omron Mobile Manipulator using packages, -- [omron_arm](https://github.com/CollaborativeRoboticsLab/omron_arm) package -- [omron_base](https://github.com/CollaborativeRoboticsLab/omron_base) package +- [tmr_ros2](https://github.com/CollaborativeRoboticsLab/tmr_ros2) package +- [omron_amr](https://github.com/CollaborativeRoboticsLab/omron_amr) package - [omron_gripper](https://github.com/CollaborativeRoboticsLab/omron_gripper.git) package For supported features and limitations, see the individual repositories on the features supported by the MoMa. +| Branch | ROS2 Version | +|--------|--------------| +| main | Jazzy | +| develop | Jazzy | +| humble | Humble | + ## Device Configuration The robot expects the remote PC to be configured with the following IP address to connect to the robot, @@ -37,8 +43,8 @@ pip install pymodbus Clone the repositories into the `src` folder by ```sh -git clone https://github.com/CollaborativeRoboticsLab/omron_arm.git -git clone https://github.com/CollaborativeRoboticsLab/omron_base.git +git clone https://github.com/CollaborativeRoboticsLab/tmr_ros2.git +git clone https://github.com/CollaborativeRoboticsLab/omron_amr.git git clone https://github.com/CollaborativeRoboticsLab/omron_gripper.git git clone https://github.com/CollaborativeRoboticsLab/omron_moma.git ``` diff --git a/docker/Dockerfile b/docker/Dockerfile index 631b9c4..7c64a15 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -5,7 +5,7 @@ #--------------------------------------------------------------------------------------------------------------------------- # Use a base image suitable for Raspberry Pi with ROS 2 Humble -FROM ros:humble-ros-base-jammy AS base +FROM ros:jazzy AS base # Set environment variables ENV DEBIAN_FRONTEND=noninteractive @@ -65,8 +65,8 @@ RUN pip3 install --no-cache-dir pymodbus WORKDIR ${WORKSPACE_ROOT}/src RUN git clone https://github.com/CollaborativeRoboticsLab/omron_moma.git -RUN git clone https://github.com/CollaborativeRoboticsLab/omron_arm.git -RUN git clone https://github.com/CollaborativeRoboticsLab/omron_base.git +RUN git clone https://github.com/CollaborativeRoboticsLab/tmr_ros2.git +RUN git clone https://github.com/CollaborativeRoboticsLab/omron_amr.git RUN git clone https://github.com/CollaborativeRoboticsLab/omron_gripper.git WORKDIR ${WORKSPACE_ROOT} diff --git a/docker/compose-teleop.yaml b/docker/compose-teleop.yaml index 0548d84..ea6f6eb 100644 --- a/docker/compose-teleop.yaml +++ b/docker/compose-teleop.yaml @@ -1,7 +1,7 @@ services: omron_moma: container_name: omron_moma - image: ghcr.io/collaborativeroboticslab/omron_moma:humble + image: ghcr.io/collaborativeroboticslab/omron_moma:jazzy command: ros2 launch moma_ros ld250_tm12x.teleop.launch.py environment: - PYTHONUNBUFFERED=1 # GUI related diff --git a/docker/compose.yaml b/docker/compose.yaml index c954b5e..8b92a46 100644 --- a/docker/compose.yaml +++ b/docker/compose.yaml @@ -1,7 +1,7 @@ services: omron_moma: container_name: omron_moma - image: ghcr.io/collaborativeroboticslab/omron_moma:humble + image: ghcr.io/collaborativeroboticslab/omron_moma:jazzy command: ros2 launch moma_ros ld250_tm12x.launch.py tm_use_simulation:=false use_rviz:=true use_moveit:=true use_nav2:=true environment: - PYTHONUNBUFFERED=1 # GUI related diff --git a/moma_ros/config/ld250_tm12x-nav2.yaml b/moma_ros/config/ld250_tm12x-nav2.yaml index c78ea02..607cbb7 100644 --- a/moma_ros/config/ld250_tm12x-nav2.yaml +++ b/moma_ros/config/ld250_tm12x-nav2.yaml @@ -50,58 +50,17 @@ bt_navigator: bt_loop_duration: 10 default_server_timeout: 20 wait_for_service_timeout: 1000 + action_server_result_timeout: 900.0 + navigators: ["navigate_to_pose", "navigate_through_poses"] + navigate_to_pose: + plugin: "nav2_bt_navigator::NavigateToPoseNavigator" + navigate_through_poses: + plugin: "nav2_bt_navigator::NavigateThroughPosesNavigator" + error_code_names: ["compute_path_error_code", "follow_path_error_code"] # 'default_nav_through_poses_bt_xml' and 'default_nav_to_pose_bt_xml' are use defaults: # nav2_bt_navigator/navigate_to_pose_w_replanning_and_recovery.xml # nav2_bt_navigator/navigate_through_poses_w_replanning_and_recovery.xml # They can be set here or via a RewrittenYaml remap from a parent launch file to Nav2. - plugin_lib_names: - - nav2_compute_path_to_pose_action_bt_node - - nav2_compute_path_through_poses_action_bt_node - - nav2_smooth_path_action_bt_node - - nav2_follow_path_action_bt_node - - nav2_spin_action_bt_node - - nav2_wait_action_bt_node - - nav2_assisted_teleop_action_bt_node - - nav2_back_up_action_bt_node - - nav2_drive_on_heading_bt_node - - nav2_clear_costmap_service_bt_node - - nav2_is_stuck_condition_bt_node - - nav2_goal_reached_condition_bt_node - - nav2_goal_updated_condition_bt_node - - nav2_globally_updated_goal_condition_bt_node - - nav2_is_path_valid_condition_bt_node - - nav2_initial_pose_received_condition_bt_node - - nav2_reinitialize_global_localization_service_bt_node - - nav2_rate_controller_bt_node - - nav2_distance_controller_bt_node - - nav2_speed_controller_bt_node - - nav2_truncate_path_action_bt_node - - nav2_truncate_path_local_action_bt_node - - nav2_goal_updater_node_bt_node - - nav2_recovery_node_bt_node - - nav2_pipeline_sequence_bt_node - - nav2_round_robin_node_bt_node - - nav2_transform_available_condition_bt_node - - nav2_time_expired_condition_bt_node - - nav2_path_expiring_timer_condition - - nav2_distance_traveled_condition_bt_node - - nav2_single_trigger_bt_node - - nav2_goal_updated_controller_bt_node - - nav2_is_battery_low_condition_bt_node - - nav2_navigate_through_poses_action_bt_node - - nav2_navigate_to_pose_action_bt_node - - nav2_remove_passed_goals_action_bt_node - - nav2_planner_selector_bt_node - - nav2_controller_selector_bt_node - - nav2_goal_checker_selector_bt_node - - nav2_controller_cancel_bt_node - - nav2_path_longer_on_approach_bt_node - - nav2_wait_cancel_bt_node - - nav2_spin_cancel_bt_node - - nav2_back_up_cancel_bt_node - - nav2_assisted_teleop_cancel_bt_node - - nav2_drive_on_heading_cancel_bt_node - - nav2_is_battery_charging_condition_bt_node bt_navigator_navigate_through_poses_rclcpp_node: ros__parameters: @@ -119,7 +78,7 @@ controller_server: min_y_velocity_threshold: 0.0 min_theta_velocity_threshold: 0.001 failure_tolerance: 0.3 - progress_checker_plugin: "progress_checker" + progress_checker_plugins: ["progress_checker"] goal_checker_plugins: ["general_goal_checker"] # "precise_goal_checker" controller_plugins: ["FollowPath"] @@ -278,7 +237,7 @@ planner_server: use_sim_time: false planner_plugins: ["GridBased"] GridBased: - plugin: "nav2_navfn_planner/NavfnPlanner" + plugin: "nav2_navfn_planner::NavfnPlanner" tolerance: 0.5 use_astar: false allow_unknown: true @@ -295,23 +254,26 @@ smoother_server: behavior_server: ros__parameters: - costmap_topic: local_costmap/costmap_raw - footprint_topic: local_costmap/published_footprint + local_costmap_topic: local_costmap/costmap_raw + global_costmap_topic: global_costmap/costmap_raw + local_footprint_topic: local_costmap/published_footprint + global_footprint_topic: global_costmap/published_footprint cycle_frequency: 10.0 behavior_plugins: ["spin", "backup", "drive_on_heading", "assisted_teleop", "wait"] spin: - plugin: "nav2_behaviors/Spin" + plugin: "nav2_behaviors::Spin" backup: - plugin: "nav2_behaviors/BackUp" + plugin: "nav2_behaviors::BackUp" drive_on_heading: - plugin: "nav2_behaviors/DriveOnHeading" + plugin: "nav2_behaviors::DriveOnHeading" wait: - plugin: "nav2_behaviors/Wait" + plugin: "nav2_behaviors::Wait" assisted_teleop: - plugin: "nav2_behaviors/AssistedTeleop" - global_frame: odom + plugin: "nav2_behaviors::AssistedTeleop" + global_frame: map + local_frame: odom robot_base_frame: base_link - transform_tolerance: 0.4 + transform_tolerance: 0.1 use_sim_time: false simulate_ahead_time: 2.0 max_rotational_vel: 1.0 @@ -329,6 +291,7 @@ waypoint_follower: use_sim_time: false loop_rate: 20 stop_on_failure: false + action_server_result_timeout: 900.0 waypoint_task_executor_plugin: "wait_at_waypoint" wait_at_waypoint: plugin: "nav2_waypoint_follower::WaitAtWaypoint" diff --git a/moma_ros/config/ld250_tm12x_joint_limits.yaml b/moma_ros/config/ld250_tm12x_joint_limits.yaml deleted file mode 100644 index be32764..0000000 --- a/moma_ros/config/ld250_tm12x_joint_limits.yaml +++ /dev/null @@ -1,37 +0,0 @@ -# Combined ld250_tm12x joint limits override. -# These acceleration limits are local fallback values so MoveIt's time-parameterization -# can generate executable trajectories for the mobile-manipulator stack. -default_velocity_scaling_factor: 0.1 -default_acceleration_scaling_factor: 0.1 - -joint_limits: - joint_1: - has_velocity_limits: true - max_velocity: 2.0943951023931953 - has_acceleration_limits: true - max_acceleration: 2.0943951023931953 - joint_2: - has_velocity_limits: true - max_velocity: 2.0943951023931953 - has_acceleration_limits: true - max_acceleration: 2.0943951023931953 - joint_3: - has_velocity_limits: true - max_velocity: 3.1415926535897931 - has_acceleration_limits: true - max_acceleration: 3.1415926535897931 - joint_4: - has_velocity_limits: true - max_velocity: 3.1415926535897931 - has_acceleration_limits: true - max_acceleration: 3.1415926535897931 - joint_5: - has_velocity_limits: true - max_velocity: 3.1415926535897931 - has_acceleration_limits: true - max_acceleration: 3.1415926535897931 - joint_6: - has_velocity_limits: true - max_velocity: 3.1415926535897931 - has_acceleration_limits: true - max_acceleration: 3.1415926535897931 diff --git a/moma_ros/config/ld250_tm12x_ompl_planning.yaml b/moma_ros/config/ld250_tm12x_ompl_planning.yaml deleted file mode 100644 index 6b1d4b1..0000000 --- a/moma_ros/config/ld250_tm12x_ompl_planning.yaml +++ /dev/null @@ -1,165 +0,0 @@ -planning_plugins: - - ompl_interface/OMPLPlanner -request_adapters: - - default_planning_request_adapters/ResolveConstraintFrames - - default_planning_request_adapters/ValidateWorkspaceBounds - - default_planning_request_adapters/CheckStartStateBounds - - default_planning_request_adapters/CheckStartStateCollision -response_adapters: - - default_planning_response_adapters/AddTimeOptimalParameterization - - default_planning_response_adapters/ValidateSolution - - default_planning_response_adapters/DisplayMotionPath -start_state_max_bounds_error: 0.1 -planner_configs: - SBLkConfigDefault: - type: geometric::SBL - range: 0.0 - ESTkConfigDefault: - type: geometric::EST - range: 0.0 - goal_bias: 0.05 - LBKPIECEkConfigDefault: - type: geometric::LBKPIECE - range: 0.0 - border_fraction: 0.9 - min_valid_path_fraction: 0.5 - BKPIECEkConfigDefault: - type: geometric::BKPIECE - range: 0.0 - border_fraction: 0.9 - failed_expansion_score_factor: 0.5 - min_valid_path_fraction: 0.5 - KPIECEkConfigDefault: - type: geometric::KPIECE - range: 0.0 - goal_bias: 0.05 - border_fraction: 0.9 - failed_expansion_score_factor: 0.5 - min_valid_path_fraction: 0.5 - RRTkConfigDefault: - type: geometric::RRT - range: 0.0 - goal_bias: 0.05 - RRTConnectkConfigDefault: - type: geometric::RRTConnect - range: 0.0 - RRTstarkConfigDefault: - type: geometric::RRTstar - range: 0.0 - goal_bias: 0.05 - delay_collision_checking: 1 - TRRTkConfigDefault: - type: geometric::TRRT - range: 0.0 - goal_bias: 0.05 - max_states_failed: 10 - temp_change_factor: 2.0 - min_temperature: 10e-10 - init_temperature: 10e-6 - frountier_threshold: 0.0 - frountierNodeRatio: 0.1 - k_constant: 0.0 - PRMkConfigDefault: - type: geometric::PRM - max_nearest_neighbors: 10 - PRMstarkConfigDefault: - type: geometric::PRMstar - FMTkConfigDefault: - type: geometric::FMT - num_samples: 1000 - radius_multiplier: 1.1 - nearest_k: 1 - cache_cc: 1 - heuristics: 0 - extended_fmt: 1 - BFMTkConfigDefault: - type: geometric::BFMT - num_samples: 1000 - radius_multiplier: 1.0 - nearest_k: 1 - balanced: 0 - optimality: 1 - heuristics: 1 - cache_cc: 1 - extended_fmt: 1 - PDSTkConfigDefault: - type: geometric::PDST - STRIDEkConfigDefault: - type: geometric::STRIDE - range: 0.0 - goal_bias: 0.05 - use_projected_distance: 0 - degree: 16 - max_degree: 18 - min_degree: 12 - max_pts_per_leaf: 6 - estimated_dimension: 0.0 - min_valid_path_fraction: 0.2 - BiTRRTkConfigDefault: - type: geometric::BiTRRT - range: 0.0 - temp_change_factor: 0.1 - init_temperature: 100 - frountier_threshold: 0.0 - frountier_node_ratio: 0.1 - cost_threshold: 1e300 - LBTRRTkConfigDefault: - type: geometric::LBTRRT - range: 0.0 - goal_bias: 0.05 - epsilon: 0.4 - BiESTkConfigDefault: - type: geometric::BiEST - range: 0.0 - ProjESTkConfigDefault: - type: geometric::ProjEST - range: 0.0 - goal_bias: 0.05 - LazyPRMkConfigDefault: - type: geometric::LazyPRM - range: 0.0 - LazyPRMstarkConfigDefault: - type: geometric::LazyPRMstar - SPARSkConfigDefault: - type: geometric::SPARS - stretch_factor: 3.0 - sparse_delta_fraction: 0.25 - dense_delta_fraction: 0.001 - max_failures: 1000 - SPARStwokConfigDefault: - type: geometric::SPARStwo - stretch_factor: 3.0 - sparse_delta_fraction: 0.25 - dense_delta_fraction: 0.001 - max_failures: 5000 - TrajOptDefault: - type: geometric::TrajOpt - -tmr_arm: - default_planner_config: RRTConnectkConfigDefault - planner_configs: - - SBLkConfigDefault - - ESTkConfigDefault - - LBKPIECEkConfigDefault - - BKPIECEkConfigDefault - - KPIECEkConfigDefault - - RRTkConfigDefault - - RRTConnectkConfigDefault - - RRTstarkConfigDefault - - TRRTkConfigDefault - - PRMkConfigDefault - - PRMstarkConfigDefault - - FMTkConfigDefault - - BFMTkConfigDefault - - PDSTkConfigDefault - - STRIDEkConfigDefault - - BiTRRTkConfigDefault - - LBTRRTkConfigDefault - - BiESTkConfigDefault - - ProjESTkConfigDefault - - LazyPRMkConfigDefault - - LazyPRMstarkConfigDefault - - SPARSkConfigDefault - - SPARStwokConfigDefault - - TrajOptDefault - longest_valid_segment_fraction: 0.01 diff --git a/moma_ros/launch/ld250_tm12x/ld250_tm12x.moveit.launch.py b/moma_ros/launch/ld250_tm12x/ld250_tm12x.moveit.launch.py index acfa65a..6e8cf11 100644 --- a/moma_ros/launch/ld250_tm12x/ld250_tm12x.moveit.launch.py +++ b/moma_ros/launch/ld250_tm12x/ld250_tm12x.moveit.launch.py @@ -42,16 +42,15 @@ def get_moveit_config(): ) .joint_limits( file_path=os.path.join( - get_package_share_directory('moma_ros'), + get_package_share_directory('tm12x_moveit_config'), 'config', - 'ld250_tm12x_joint_limits.yaml', + 'joint_limits.yaml', ) ) .planning_pipelines(default_planning_pipeline='ompl', pipelines=['ompl']) .to_moveit_configs() ) - - moveit_config.planning_pipelines['ompl'] = load_yaml('moma_ros', 'config/ld250_tm12x_ompl_planning.yaml') + moveit_config.planning_pipelines['ompl'] = load_yaml('tm12x_moveit_config', 'config/ompl_planning.yaml') return moveit_config def generate_launch_description(): diff --git a/moma_ros/launch/ld250_tm12x/ld250_tm12x.rviz.launch.py b/moma_ros/launch/ld250_tm12x/ld250_tm12x.rviz.launch.py index 3cff7f0..f7f7702 100644 --- a/moma_ros/launch/ld250_tm12x/ld250_tm12x.rviz.launch.py +++ b/moma_ros/launch/ld250_tm12x/ld250_tm12x.rviz.launch.py @@ -46,16 +46,15 @@ def get_moveit_config(): ) .joint_limits( file_path=os.path.join( - get_package_share_directory('moma_ros'), + get_package_share_directory('tm12x_moveit_config'), 'config', - 'ld250_tm12x_joint_limits.yaml', + 'joint_limits.yaml', ) ) .planning_pipelines(default_planning_pipeline='ompl', pipelines=['ompl']) .to_moveit_configs() ) - - moveit_config.planning_pipelines['ompl'] = load_yaml('moma_ros', 'config/ld250_tm12x_ompl_planning.yaml') + moveit_config.planning_pipelines['ompl'] = load_yaml('tm12x_moveit_config', 'config/ompl_planning.yaml') return moveit_config def generate_launch_description(): From c8ae970da9ec5f37eb85ed1e053e325b02392c7e Mon Sep 17 00:00:00 2001 From: Kalana Ratnayake Date: Tue, 31 Mar 2026 05:46:54 +0000 Subject: [PATCH 3/5] added compile tag --- .github/workflows/compile.yml | 53 +++++++++++++++++++++++++++++++++++ README.md | 10 +++---- 2 files changed, 58 insertions(+), 5 deletions(-) create mode 100644 .github/workflows/compile.yml diff --git a/.github/workflows/compile.yml b/.github/workflows/compile.yml new file mode 100644 index 0000000..29016d9 --- /dev/null +++ b/.github/workflows/compile.yml @@ -0,0 +1,53 @@ +name: Compile Check + +on: + workflow_dispatch: + + push: + branches: + - main + - develop + - humble + + pull_request: + branches: + - main + - develop + - humble + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + build: + runs-on: ubuntu-24.04 + + steps: + - name: Check out repository + uses: actions/checkout@v4 + + - name: Set up ROS 2 Jazzy + uses: ros-tooling/setup-ros@v0.7 + with: + required-ros-distributions: jazzy + + - name: Install system tooling + run: | + sudo apt-get update + sudo apt-get install -y python3-colcon-common-extensions python3-rosdep + + - name: Initialize rosdep + run: | + sudo rosdep init || true + rosdep update + + - name: Install package dependencies + run: | + rosdep install --from-paths . --ignore-src --rosdistro jazzy -r -y + + - name: Build workspace + shell: bash + run: | + source /opt/ros/jazzy/setup.bash + colcon build --event-handlers console_direct+ diff --git a/README.md b/README.md index 2bed557..2c241eb 100644 --- a/README.md +++ b/README.md @@ -10,11 +10,11 @@ This repository allows controlling the Base, Arm and Gripper of the Omron Mobile For supported features and limitations, see the individual repositories on the features supported by the MoMa. -| Branch | ROS2 Version | -|--------|--------------| -| main | Jazzy | -| develop | Jazzy | -| humble | Humble | +| Branch | ROS2 Version | Compile | +|--------|--------------|---------| +| main | Jazzy | [![main](https://github.com/CollaborativeRoboticsLab/omron_moma/actions/workflows/compile.yml/badge.svg?branch=main)](https://github.com/CollaborativeRoboticsLab/omron_moma/actions/workflows/compile.yml?query=branch%3Amain) | +| develop | Jazzy | [![develop](https://github.com/CollaborativeRoboticsLab/omron_moma/actions/workflows/compile.yml/badge.svg?branch=develop)](https://github.com/CollaborativeRoboticsLab/omron_moma/actions/workflows/compile.yml?query=branch%3Adevelop) | +| humble | Humble | [![humble](https://github.com/CollaborativeRoboticsLab/omron_moma/actions/workflows/compile.yml/badge.svg?branch=humble)](https://github.com/CollaborativeRoboticsLab/omron_moma/actions/workflows/compile.yml?query=branch%3Ahumble) | ## Device Configuration From b8ca3c9308dc4e088fcb101a15832f70b9122143 Mon Sep 17 00:00:00 2001 From: Kalana Ratnayake Date: Tue, 31 Mar 2026 05:53:42 +0000 Subject: [PATCH 4/5] updated readme and compile check --- .github/workflows/compile.yml | 2 -- README.md | 41 ++++++++++++++++++++++++++--------- 2 files changed, 31 insertions(+), 12 deletions(-) diff --git a/.github/workflows/compile.yml b/.github/workflows/compile.yml index 29016d9..7a6c527 100644 --- a/.github/workflows/compile.yml +++ b/.github/workflows/compile.yml @@ -7,13 +7,11 @@ on: branches: - main - develop - - humble pull_request: branches: - main - develop - - humble concurrency: group: ${{ github.workflow }}-${{ github.ref }} diff --git a/README.md b/README.md index 2c241eb..1807e05 100644 --- a/README.md +++ b/README.md @@ -10,11 +10,11 @@ This repository allows controlling the Base, Arm and Gripper of the Omron Mobile For supported features and limitations, see the individual repositories on the features supported by the MoMa. -| Branch | ROS2 Version | Compile | -|--------|--------------|---------| -| main | Jazzy | [![main](https://github.com/CollaborativeRoboticsLab/omron_moma/actions/workflows/compile.yml/badge.svg?branch=main)](https://github.com/CollaborativeRoboticsLab/omron_moma/actions/workflows/compile.yml?query=branch%3Amain) | -| develop | Jazzy | [![develop](https://github.com/CollaborativeRoboticsLab/omron_moma/actions/workflows/compile.yml/badge.svg?branch=develop)](https://github.com/CollaborativeRoboticsLab/omron_moma/actions/workflows/compile.yml?query=branch%3Adevelop) | -| humble | Humble | [![humble](https://github.com/CollaborativeRoboticsLab/omron_moma/actions/workflows/compile.yml/badge.svg?branch=humble)](https://github.com/CollaborativeRoboticsLab/omron_moma/actions/workflows/compile.yml?query=branch%3Ahumble) | +| Branch | ROS2 Version | +|--------|--------------| +| main | Jazzy | +| develop | Jazzy | +| humble | Humble | ## Device Configuration @@ -58,34 +58,55 @@ colcon build **or save time and use devcontainer** +## Launch Parameters + +The top-level launch entry point is `ros2 launch moma_ros ld250_tm12x.launch.py`. + +| Parameter | Default | Description | +|-----------|---------|-------------| +| `tm_use_simulation` | `false` | Runs the TM arm bringup in simulation mode instead of connecting to the physical arm. | +| `tm_robot_ip` | `192.168.1.2` | IP address of the TM arm controller. | +| `use_arm` | `true` | Starts the TM arm hardware stack. If `false`, the arm hardware and MoveIt are not started. | +| `use_base` | `true` | Starts the AMR base hardware stack. If `false`, the base hardware and Nav2 are not started. | +| `use_rviz` | `false` | Starts RViz. When enabled, the launch automatically chooses the MoveIt RViz layout if the arm and MoveIt are active, otherwise it uses the Nav2 RViz layout. | +| `use_moveit` | `true` | Starts MoveIt for the arm. This is only effective when `use_arm:=true`. | +| `use_nav2` | `true` | Starts Nav2 for the mobile base. This is only effective when `use_base:=true`. | + ## Usage -### Start the system headless +### Start the full system headless ```bash source install/setup.bash ros2 launch moma_ros ld250_tm12x.launch.py ``` -### Start the system with RVIZ +### Start the full system with RVIZ ```bash source install/setup.bash ros2 launch moma_ros ld250_tm12x.launch.py use_rviz:=true ``` -### Start the system without Nav2 or Moveit to evaluate the Hardware connection +### Start the full system without Nav2 or Moveit to evaluate the Hardware connection ```bash source install/setup.bash ros2 launch moma_ros ld250_tm12x.launch.py use_nav2:=false use_moveit:=false ``` -### Start the system without Nav2 to control just the Arm and Gripper using RVIZ +### Start the ARM only to control Arm and Gripper using RVIZ + +```bash +source install/setup.bash +ros2 launch moma_ros ld250_tm12x.launch.py use_base:=false use_rviz:=true +``` + +### Start the base only to control just the base using RVIZ ```bash source install/setup.bash -ros2 launch moma_ros ld250_tm12x.launch.py use_nav2:=false use_rviz:=true +ros2 launch moma_ros ld250_tm12x.launch.py use_arm:=false use_rviz:=true ``` ## Docker From b5b5d739bd18bfbfec65686e33672f68ba1ebcc1 Mon Sep 17 00:00:00 2001 From: Kalana Ratnayake Date: Tue, 31 Mar 2026 06:04:49 +0000 Subject: [PATCH 5/5] updated readme --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 1807e05..9e34464 100644 --- a/README.md +++ b/README.md @@ -10,11 +10,11 @@ This repository allows controlling the Base, Arm and Gripper of the Omron Mobile For supported features and limitations, see the individual repositories on the features supported by the MoMa. -| Branch | ROS2 Version | -|--------|--------------| -| main | Jazzy | -| develop | Jazzy | -| humble | Humble | +| Branch | ROS2 Version | Compile | +|--------|--------------|---------| +| main | Jazzy | [![main](https://github.com/CollaborativeRoboticsLab/omron_moma/actions/workflows/compile.yml/badge.svg?branch=main)](https://github.com/CollaborativeRoboticsLab/omron_moma/actions/workflows/compile.yml?query=branch%3Amain) | +| develop | Jazzy | [![develop](https://github.com/CollaborativeRoboticsLab/omron_moma/actions/workflows/compile.yml/badge.svg?branch=develop)](https://github.com/CollaborativeRoboticsLab/omron_moma/actions/workflows/compile.yml?query=branch%3Adevelop) | +| humble | Humble | - | ## Device Configuration