ShivamMathtech/Arm-6-DOF-ROS-2

This is a research/development reference implementation. It is not a certified industrial safety controller and must not replace safety-rated drives, hardwired emergency stops, guarding, risk assessment, or applicable standards.

★ 0Forks 0PythonGitHub ↗Compare

README

Enterprise Arm 6-DOF — ROS 2 reference platform

industrial_arm_ros2 is a production-oriented reference workspace for a generic, six-axis industrial manipulator. It combines one robot description and joint-limit source with Gazebo Harmonic, ros2_control, MoveIt 2, numerical kinematics, guarded motion actions, diagnostics, perception adapters, tests, Docker, and CI.

Safety: This is a research/development reference implementation. It is not a certified industrial safety controller and must not replace safety-rated drives, hardwired emergency stops, guarding, risk assessment, or applicable standards.

Supported baseline

Component Baseline
OS Ubuntu 24.04 (Noble)
ROS ROS 2 Jazzy Jalisco
Simulator Gazebo Harmonic through ros_gz_sim
Control ros2_control, gz_ros2_control
Planning MoveIt 2 / OMPL
Languages C++17, Python 3.12

The included scripts/detect_environment.sh reports the locally installed versions. The project deliberately uses modern Gazebo, not Gazebo Classic.

Architecture

flowchart TD
    A["User API / CLI"] --> B["Motion action server"]
    B --> C["MoveIt planning"]
    B --> D["Trajectory safety validator"]
    P["Perception adapter"] --> C
    C --> D
    D --> E["ros2_control"]
    E --> F["Gazebo adapter"]
    E --> G["Mock hardware"]
    E --> H["Real-hardware safe stub"]
    K["Kinematics services"] --> B
    S["Safety supervisor"] --> D
    E --> O["Diagnostics"]
Loading

The application layer only talks to ROS interfaces. Selecting simulation, mock, or physical hardware changes the ros2_control adapter, not planning or application code.

Included packages

  • enterprise_arm_interfaces — messages, services, and actions.
  • enterprise_arm_description — modular Xacro, canonical limits, TF and RViz.
  • enterprise_arm_kinematics — Eigen FK, geometric Jacobian, DLS IK, singularity metrics, ROS services.
  • enterprise_arm_control — trajectory validation, safety state machine and lifecycle supervisor.
  • enterprise_arm_hardware — protocol-neutral transport abstraction and fail-closed real-hardware plugin.
  • enterprise_arm_motion — high-level actions and Python ArmClient.
  • enterprise_arm_moveit_config — SRDF, OMPL, kinematics, controllers and move_group launch.
  • enterprise_arm_gazebo — Gazebo Harmonic workcell and simulated controllers.
  • enterprise_arm_perception — generic detected-object adapter.
  • enterprise_arm_diagnostics — health and stale-state monitoring.
  • enterprise_arm_tools — executable FK, IK, joint, pose, stop, collision and pick/place examples.
  • enterprise_arm_bringup — composition and one-command startup.
  • enterprise_arm_tests — repository, launch, and simulation smoke tests.

Quick start

sudo apt update
sudo apt install ros-jazzy-desktop ros-jazzy-moveit \
  ros-jazzy-ros2-control ros-jazzy-ros2-controllers \
  ros-jazzy-gz-ros2-control ros-jazzy-ros-gz

source /opt/ros/jazzy/setup.bash
rosdep install --from-paths src --ignore-src -r -y
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=RelWithDebInfo
source install/setup.bash

Start the complete simulation:

ros2 launch enterprise_arm_bringup full_system.launch.py \
  hardware_mode:=simulation moveit:=true rviz:=true

Headless simulation:

ros2 launch enterprise_arm_gazebo simulation.launch.py gui:=false

Mock-hardware development:

ros2 launch enterprise_arm_bringup full_system.launch.py \
  hardware_mode:=mock moveit:=true rviz:=true

hardware_mode:=real is fail-closed. The provided adapter will not activate until a vendor transport is implemented and explicitly enabled.

FK and IK

ros2 run enterprise_arm_tools arm-fk 0.0 -0.6 1.1 0.0 0.7 0.0
ros2 run enterprise_arm_tools arm-ik 0.65 0.0 0.55 0.0 1.5708 0.0

The service APIs are also available:

ros2 service call /arm/compute_fk enterprise_arm_interfaces/srv/ComputeFK \
  "{joint_positions: [0.0, -0.6, 1.1, 0.0, 0.7, 0.0]}"

Motion

ros2 run enterprise_arm_tools arm-home
ros2 run enterprise_arm_tools arm-joints 0.2 -0.5 1.0 0.0 0.6 0.0 --duration 4.0
ros2 run enterprise_arm_tools arm-pose 0.55 0.10 0.50 0.0 1.5708 0.0
ros2 run enterprise_arm_tools demo-pick-place
ros2 run enterprise_arm_tools arm-stop

All joint trajectories pass through finite-value, joint-name, timestamp, position, velocity, acceleration, freshness, state, and E-stop checks before dispatch. Collision checks remain MoveIt's responsibility; the validator requires MoveIt acceptance for planned trajectories.

MoveIt and RViz

ros2 launch enterprise_arm_moveit_config moveit.launch.py use_sim_time:=true

In RViz select the arm planning group, choose a target, Plan, then Execute. The controller mapping targets /arm_controller/follow_joint_trajectory. The SRDF includes a fixed base virtual joint, the six-joint chain, tool end effector, and conservative adjacent-link collision exemptions.

Tests and validation

Without ROS installed, run the deterministic repository audit and math tests:

python3 scripts/validate_repository.py
python3 -m unittest discover -s test -v

In a Jazzy environment:

colcon test --event-handlers console_direct+
colcon test-result --verbose
ros2 launch enterprise_arm_tests graph_smoke.launch.py

For a repeatable container build:

docker compose -f docker/docker-compose.yml build
docker compose -f docker/docker-compose.yml run --rm arm bash -lc \
  'colcon build && colcon test && colcon test-result --verbose'

Expected ROS graph

Kind Names
Nodes robot_state_publisher, controller_manager, move_group, arm_kinematics, arm_motion_server, arm_safety_supervisor, arm_diagnostics
Topics /joint_states, /tf, /tf_static, /diagnostics, /arm/state, /arm/safety_status, /planning_scene
Services /arm/compute_fk, /arm/compute_ik, /arm/validate_trajectory, /arm/clear_fault, /arm/set_control_mode
Actions /arm/move_to_joint_state, /arm/move_to_pose, /arm/execute_trajectory, /arm_controller/follow_joint_trajectory

Configuration

The canonical robot limits are in src/enterprise_arm_description/config/joint_limits.yaml. Xacro, validation, MoveIt launch, and test code consume that file. Runtime parameters live with their owning packages; root config/ contains convenient links to the canonical files.

Run make detect, make audit, make build, or make test. See docs/ for architecture, mathematics, hardware integration, operations, security, rosbag replay and troubleshooting.

Known limitations

  • No vendor hardware protocol is invented; the real adapter intentionally refuses activation.
  • The generic parallel tool is a rigid flange visualization, not an actuated gripper.
  • The lightweight perception node adapts simulated detections; object detection and pose-estimation models are external integrations.
  • Software checks are non-certified and non-hard-real-time.
  • The control-mode service validates intent; actual controller switching uses the standard ros2 control switch_controllers operation.
  • This archive was statically verified in a runtime without ROS; CI/Docker are the authoritative ROS Jazzy build and simulation environments.

License

Apache-2.0. See LICENSE.

Contributors

ShivamMathtech

Issues