ROS 2 Humble packages for a Dobot Nova5 with a Robotiq 2F-85 gripper, MoveIt, and a wrist-mounted camera / AprilTag workflow.
This repository is the custom layer that sits on top of the upstream Dobot ROS 2 driver. It contains:
- A combined Nova5 + 2F-85 robot description
- A MoveIt configuration for the combined robot
- Bringup code that bridges Dobot joint feedback into
/joint_states - A full-system launch file that wires MoveIt, camera, TF, and AprilTag detection together
- An AprilTag relay node that republishes detected tags into the
mapframe - A web-commanded grasp task planner for human-in-the-loop grasp experiments
- A planning-scene table object so MoveIt avoids the experiment table during planning
Platform target: Ubuntu 22.04 + ROS 2 Humble
src/Nova_ROS2/
├── nova5_2f85_description/
│ ├── urdf/nova5_2f85.urdf.xacro
│ └── meshes/
├── nova5_2f85_moveit/
│ ├── config/
│ └── launch/nova5_2f85_moveit.launch.py
└── robotiq_2f85_bringup/
├── config/
│ ├── camera_calibration.yaml
│ └── tags_36h11.yaml
├── launch/nova5_full_bringup.launch.py
└── robotiq_2f85_bringup/
├── grasp_task_planner.py
├── nova5_2f85_joint_states.py
├── planning_scene_table.py
└── apriltag_arm_planner.py
Provides the combined robot model for the Nova5 arm and Robotiq 2F-85 gripper, including URDF/Xacro and meshes.
Provides the MoveIt configuration for the combined robot:
- SRDF
- kinematics
- joint limits
- controller config
- RViz config
- a MoveIt launch file:
nova5_2f85_moveit.launch.py
Contains runtime launch/config/python code for the real robot setup:
nova5_full_bringup.launch.pyStarts Dobot bringup, MoveIt, TF publishers, camera, AprilTag detection, and the local helper nodes.gripper_modbus_manager.pySingle supported Robotiq Modbus owner. It publishes/gripper/joint_statesand/web_feedback, serves the internal gripper action, and can reuse a configuredmodbus_indexor create a new gripper channel when needed.action_server.pyPublic gripper action proxy. It forwards user-facing gripper goals togripper_modbus_managerand does not open its own Modbus channel.nova5_2f85_joint_states.pyBridges/joint_states_robotfrom the Dobot driver into a combined/joint_statestopic that also includes gripper mimic joints.apriltag_arm_planner.pySubscribes to/detections, resolves tag frames through TF, and republishesmap_tag_<id>frames in themapframe.grasp_task_planner.pySubscribes to/web_command, acceptsstart_graspandstop_grasp, reads/grasp_object_id, moves to fixed grasp poses inbase_link, lifts with a Cartesian motion, and then moves to a fixed handover pose.planning_scene_table.pyApplies a conservative box-shaped table collision object to MoveIt's planning scene. The default full bringup places a0.7 x 0.7 x 0.8 mtable atx=0.0 m,y=0.2 minbase_link, with the robot base assumed to sit0.77 mabove the floor.
gripper_feedback_publisher.py remains in the repository as a legacy standalone poller, but it is not part of the current bringup and is not the supported runtime path.
This repo expects the upstream Dobot ROS 2 stack to be present in the same workspace, especially:
dobot_bringup_v3dobot_moveitdobot_msgs_v3
The launch files also expect common Humble packages such as:
moveit_ros_move_groupmoveit_configs_utilsrobot_state_publisherrviz2camera_rosapriltag_rostf2_ros
mkdir -p ~/dobot_ws/src
cd ~/dobot_ws/src
git clone https://github.com/Dobot-Arm/DOBOT_6Axis_ROS2_V3.git
git clone <this-repo-url> Nova_ROS2Build from the workspace root:
cd ~/dobot_ws
colcon build
source install/setup.bashros2 launch robotiq_2f85_bringup nova5_full_bringup.launch.pyThis launch file is intended to start:
- Dobot TCP bringup and feedback
robot_state_publisher- the
nova5_2f85_joint_statesbridge gripper_modbus_manageras the single supported gripper Modbus ownerrobotiq_2f85_action_serveras the public gripper proxygripper_cmd_senderas the/web_commandgripper routergrasp_task_planneras the/web_commandarm-task routerplanning_scene_tableas the MoveIt collision-table publisher/web_feedbackas string gripper readback for the web server (0=closed,100=open)- MoveIt
move_group - the Dobot MoveIt action bridge
- wrist camera input through
camera_ros - AprilTag detection through
apriltag_ros - static TF for camera mounting
- optional
map -> base_linktable transform - RViz
Useful launch arguments:
use_rviz:=falseto run without RVizuse_table_map:=falseto disable the staticmap -> base_linktransformuse_planning_table:=falseto disable the MoveIt table collision objectcam_x,cam_y,cam_z,cam_roll,cam_pitch,cam_yawto define the camera mounting transformmodbus_host,modbus_port,slave_idfor gripper communication settingsmodbus_index:=Nto reuse a known Dobot Modbus channel directly/web_commandacceptsgripper_pos:<percent>,start_grasp,stop_grasp, and legacy bare gripper percentages like83/grasp_object_idselects object IDs1..5for the grasp task planner/web_feedbackpublishes measured gripper state with0=closed,100=open
Example:
ros2 launch robotiq_2f85_bringup nova5_full_bringup.launch.py \
use_rviz:=false \
cam_x:=0.04 cam_y:=0.0 cam_z:=0.05 \
cam_roll:=0.0 cam_pitch:=0.0 cam_yaw:=0.0ros2 launch nova5_2f85_moveit nova5_2f85_moveit.launch.pyThis starts:
robot_state_publishernova5_2f85_joint_statesdobot_moveit/action_move_servermove_group- optional RViz
The full bringup connects the camera into the robot TF tree with:
base_link -> ... -> robotiq_85_base_link -> camera_link
It also publishes a zero-offset bridge:
camera_link -> camera
AprilTag detections from apriltag_ros can then be transformed into map, and apriltag_arm_planner.py republishes them as:
map_tag_0, map_tag_1, ...
The default table setup also publishes:
map -> base_link
with a fixed table height defined in nova5_full_bringup.launch.py.
For human-in-the-loop grasp experiments, grasp_task_planner.py uses the same
/web_command topic for arm-task commands. start_grasp moves the arm to the
configured grasp pose for the currently selected /grasp_object_id. After
manual gripper adjustment via /web_command, stop_grasp lifts the tool
straight up with a Cartesian path and then moves to a fixed handover pose.
robotiq_2f85_bringup/config/camera_calibration.yamlCamera intrinsics loaded bycamera_rosrobotiq_2f85_bringup/config/tags_36h11.yamlAprilTag family and configured tag IDs, includingtag_11
This README reflects the files currently present in this repository. If you change package names, add back removed runtime nodes, or split the full bringup into smaller launches, update this document to keep it aligned with the code.