Skip to content
Open
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
5 changes: 5 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,3 +48,8 @@ jobs:
run: |
cd demos/turtlebot3_integration
docker build -t turtlebot3-medkit-demo:test -f Dockerfile .

- name: Build MoveIt Pick-and-Place demo image
run: |
cd demos/moveit_pick_place
docker build -t moveit-pick-place-demo:test -f Dockerfile .
27 changes: 27 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ to complete mobile robot integration:

- **Sensor Diagnostics** — Lightweight demo focusing on data monitoring and fault injection
- **TurtleBot3 Integration** — Full-featured demo with Nav2 navigation, showing entity hierarchy and real-time control
- **MoveIt Pick-and-Place** — Panda 7-DOF arm manipulation with MoveIt 2, fault monitoring for planning, controllers, and joint limits

**Key Capabilities Demonstrated:**

Expand All @@ -42,6 +43,7 @@ Both demos support:
|------|-------------|----------|--------|
| [Sensor Diagnostics](demos/sensor_diagnostics/) | Lightweight sensor diagnostics demo (no Gazebo required) | Data monitoring, fault injection, dual fault reporting paths | ✅ Ready |
| [TurtleBot3 Integration](demos/turtlebot3_integration/) | Full ros2_medkit integration with TurtleBot3 and Nav2 | SOVD-compliant API, manifest-based discovery, fault management | ✅ Ready |
| [MoveIt Pick-and-Place](demos/moveit_pick_place/) | Panda 7-DOF arm with MoveIt 2 manipulation and ros2_medkit | Planning fault detection, controller monitoring, joint limits | ✅ Ready |

### Quick Start

Expand Down Expand Up @@ -96,6 +98,31 @@ cd demos/turtlebot3_integration
- Fault injection scenarios for Nav2 components
- Real-time robot control via HTTP

#### MoveIt 2 Pick-and-Place Demo (Manipulation Stack)

Panda robot arm demo with pick-and-place manipulation:

```bash
cd demos/moveit_pick_place
./run-demo.sh
# RViz will open with Panda arm (or use --headless), Web UI at http://localhost:3000
# Move the arm: ./move-arm.sh demo
# Inject faults: ./inject-planning-failure.sh
# Check faults: ./check-faults.sh

# To stop
./stop-demo.sh
```

**Features:**

- Panda 7-DOF arm with MoveIt 2 and mock hardware (no physics sim)
- Interactive arm control via `move-arm.sh`
- Continuous pick-and-place task loop
- Manipulation fault monitoring (planning, controller, joint limits)
- 5 fault injection scenarios with one-click scripts
- SOVD-compliant REST API with rich entity hierarchy (4 areas, 7 components)

## Getting Started

### Prerequisites
Expand Down
28 changes: 28 additions & 0 deletions demos/moveit_pick_place/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
cmake_minimum_required(VERSION 3.8)
project(moveit_medkit_demo)

find_package(ament_cmake REQUIRED)

# Install launch files
install(DIRECTORY launch/
DESTINATION share/${PROJECT_NAME}/launch
)

# Install config files
install(DIRECTORY config/
DESTINATION share/${PROJECT_NAME}/config
)

# Install world files
install(DIRECTORY worlds/
DESTINATION share/${PROJECT_NAME}/worlds
)

# Install scripts
install(PROGRAMS
scripts/manipulation_monitor.py
scripts/pick_place_loop.py
DESTINATION lib/${PROJECT_NAME}
)

ament_package()
71 changes: 71 additions & 0 deletions demos/moveit_pick_place/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
# MoveIt 2 Panda + ros2_medkit Integration Demo
# Supports fake hardware (default) and Gazebo Harmonic simulation (--gazebo)

FROM osrf/ros:jazzy-desktop

ENV DEBIAN_FRONTEND=noninteractive
ENV ROS_DISTRO=jazzy
ENV COLCON_WS=/root/demo_ws

# Install MoveIt 2, Panda, ros2_control, Gazebo, and build dependencies
RUN apt-get update && apt-get install -y \
ros-jazzy-moveit \
ros-jazzy-moveit-resources-panda-moveit-config \
ros-jazzy-moveit-resources-panda-description \
ros-jazzy-moveit-planners-ompl \
ros-jazzy-moveit-ros-planning-interface \
ros-jazzy-moveit-ros-visualization \
ros-jazzy-moveit-simple-controller-manager \
ros-jazzy-moveit-servo \
ros-jazzy-ros2-controllers \
ros-jazzy-ros2-control \
ros-jazzy-joint-state-publisher \
ros-jazzy-joint-state-publisher-gui \
ros-jazzy-ros-gz-sim \
ros-jazzy-ros-gz-bridge \
ros-jazzy-gz-ros2-control \
ros-jazzy-ament-lint-auto \
ros-jazzy-ament-lint-common \
python3-colcon-common-extensions \
nlohmann-json3-dev \
libcpp-httplib-dev \
sqlite3 libsqlite3-dev git curl \
&& rm -rf /var/lib/apt/lists/*

# Clone ros2_medkit from GitHub (pinned to a specific ref for reproducibility)
ARG ROS2_MEDKIT_REF=main
WORKDIR ${COLCON_WS}/src
RUN git clone --depth 1 --branch ${ROS2_MEDKIT_REF} https://github.com/selfpatch/ros2_medkit.git && \
mv ros2_medkit/src/ros2_medkit_gateway \
ros2_medkit/src/ros2_medkit_msgs \
ros2_medkit/src/ros2_medkit_serialization \
ros2_medkit/src/ros2_medkit_fault_manager \
ros2_medkit/src/ros2_medkit_fault_reporter \
ros2_medkit/src/ros2_medkit_diagnostic_bridge . && \
rm -rf ros2_medkit

# Copy demo package from local context
COPY package.xml CMakeLists.txt ${COLCON_WS}/src/moveit_medkit_demo/
COPY config/ ${COLCON_WS}/src/moveit_medkit_demo/config/
COPY launch/ ${COLCON_WS}/src/moveit_medkit_demo/launch/
COPY scripts/ ${COLCON_WS}/src/moveit_medkit_demo/scripts/
COPY worlds/ ${COLCON_WS}/src/moveit_medkit_demo/worlds/

# Build ros2_medkit and demo package
# Note: rosdep install uses || true because ros2_medkit packages are not in
# rosdep indices (they're built from source). All system deps are already
# installed via apt above; rosdep handles any transitive deps it can resolve.
WORKDIR ${COLCON_WS}
RUN bash -c "source /opt/ros/jazzy/setup.bash && \
rosdep update && \
rosdep install --from-paths src --ignore-src -r -y || true" && \
bash -c "source /opt/ros/jazzy/setup.bash && \
colcon build --symlink-install --cmake-args -DBUILD_TESTING=OFF"

# Setup environment
RUN echo "source /opt/ros/jazzy/setup.bash" >> ~/.bashrc && \
echo "source ${COLCON_WS}/install/setup.bash" >> ~/.bashrc

EXPOSE 8080

CMD ["bash"]
Loading