Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
6 changes: 3 additions & 3 deletions .devcontainer/Dockerfile
Original file line number Diff line number Diff line change
@@ -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)
Expand Down Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"name": "Omron Moma humble",
"name": "Omron Moma Jazzy",
"dockerFile": "Dockerfile",
"remoteUser": "ubuntu",
"containerEnv": {
Expand Down
51 changes: 51 additions & 0 deletions .github/workflows/compile.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
name: Compile Check

on:
workflow_dispatch:

push:
branches:
- main
- develop

pull_request:
branches:
- main
- develop

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+
4 changes: 2 additions & 2 deletions .github/workflows/humble.yml → .github/workflows/docker.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: ROS Humble Omron MoMa Control stack
name: ROS Jazzy Omron MoMa Control stack

on:
workflow_dispatch:
Expand Down Expand Up @@ -54,4 +54,4 @@ jobs:
push: true
tags: |
${{ env.REGISTRY }}/${{ env.OWNER }}/${{ env.IMAGE_NAME }}:latest
${{ env.REGISTRY }}/${{ env.OWNER }}/${{ env.IMAGE_NAME }}:humble
${{ env.REGISTRY }}/${{ env.OWNER }}/${{ env.IMAGE_NAME }}:jazzy
45 changes: 36 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 | 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

The robot expects the remote PC to be configured with the following IP address to connect to the robot,
Expand Down Expand Up @@ -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
```
Expand All @@ -52,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
Expand Down
6 changes: 3 additions & 3 deletions docker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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}
Expand Down
2 changes: 1 addition & 1 deletion docker/compose-teleop.yaml
Original file line number Diff line number Diff line change
@@ -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
Expand Down
2 changes: 1 addition & 1 deletion docker/compose.yaml
Original file line number Diff line number Diff line change
@@ -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
Expand Down
81 changes: 22 additions & 59 deletions moma_ros/config/ld250_tm12x-nav2.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand All @@ -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"]

Expand Down Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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"
Expand Down
Loading
Loading