Tutorial: Docking with Nova Carter Using Nav2 and FoundationPose in Sim
Prerequisites
Finish the Tutorial for FoundationPose with Isaac Sim.
Download a pre-trained SyntheticaDETR model for AMR:
cd ${ISAAC_ROS_WS}/isaac_ros_assets/models/synthetica_detr && \ wget 'https://api.ngc.nvidia.com/v2/models/nvidia/isaac/synthetica_detr/versions/1.0.0_onnx/files/sdetr_amr.onnx'
Instructions
Set up Isaac Sim:
Install and launch Isaac Sim following the Isaac ROS Isaac Sim Setup Guide.
Add the charging dock at the path
/localhost/NVIDIA/Assets/Isaac/4.2/Isaac/Props/NVIDIA/Carter/ChargingDock/charging_station_galileo.usd
to the Isaac ROS Sample scene.Adjust docking and robot transforms as desired. For example: set dock to (-10.0, 14.0, 0.01, 0.0, 0.0, 180) and set robot to (-2.0, 14.0, 0.0, 0.0, 0.0, 180).
Select
/World/Nova_Carter_ROS/ros_lidars/publish_front_2d_lidar_scan
in the Stage pane and change the topic name for front 2D Lidar as shown below.Select
/World/Nova_Carter_ROS/ros_lidars/front_2d_lidar_render_product
in the Stage pane and setenabled
to True (checked).Select
/World/Nova_Carter_ROS/ros_lidars/front_3d_lidar_render_product
in the Stage pane and setenabled
to False (unchecked).Press Play to initiate data publishing from Isaac Sim.
Build and install the required packages:
Make sure you followed the Prerequisites and you are inside the Isaac ROS Docker container.
Install the prebuilt Debian package:
sudo apt-get update
sudo apt-get install -y ros-humble-nova-carter-bringup
Make sure you followed the Prerequisites and you are inside the Isaac ROS Docker container.
Use
rosdep
to install the package’s dependencies:sudo apt-get update
rosdep update && rosdep install --from-paths ${ISAAC_ROS_WS}/src/nova_carter/nova_carter_bringup --ignore-src -y
Build the package from source:
cd ${ISAAC_ROS_WS}/ && \ colcon build --symlink-install --packages-up-to nova_carter_bringup \ --packages-skip isaac_ros_peoplesemseg_models_install
Source the ROS workspace:
Note
Make sure to repeat this step in every terminal created inside the Docker container.
Because this package was built from source, the enclosing workspace must be sourced for ROS to be able to find the package’s contents.
source install/setup.bash
Continuing inside the Docker container, convert the model (
.onnx
) to a TensorRT engine plan:/usr/src/tensorrt/bin/trtexec --onnx=${ISAAC_ROS_WS}/isaac_ros_assets/models/synthetica_detr/sdetr_amr.onnx --saveEngine=${ISAAC_ROS_WS}/isaac_ros_assets/models/synthetica_detr/sdetr_amr.plan
Run the launch file:
ros2 launch nova_carter_docking docking_with_fp_sim.launch.py init_pose_x:=-2.0 init_pose_y:=14.0 init_pose_yaw:=3.14
Note
Verify that you see an
RViz2
window open. InRViz2
, change theDetection3DArray
topic name to/tracking/output
to display the 3D pose estimation bounding box overlaid on the input image.Send a docking action:
ros2 action send_goal /dock_robot opennav_docking_msgs/action/DockRobot " { use_dock_id: false, dock_pose: { pose: { position: {x: -10.0, y: 14.0, z: 0.0}, orientation: {x: 0.0, y: 0.0, z: 1.0, w: 0.0} }, header: { frame_id: 'map' } }, dock_type: 'nova_carter_dock', navigate_to_staging_pose: true }"
Troubleshooting
If the Nova Carter does not establish contact with the dock after the docking process is complete, consider adjusting the
external_detection_translation_x
parameter in/workspaces/isaac_ros-dev/src/nova_carter/nova_carter_docking/params/nova_carter_docking_fp.yaml
. The default value is-0.15
. You may increase this value to bring the Nova Carter closer to the dock. More details for docking parameters can be found on GitHub.If you encounter a situation where the robot cannot complete the docking goal using FoundationPose, it may be due to the limited performance of your workstation. In our example, we are using a workstation with the following specifications:
CPU: Intel Core i9-14900K, 24 cores, 6.0 GHz
GPU: NVIDIA RTX 6000 Ada Generation
RAM: 128 GB DDR5
We rely on pose estimation at the staging location and dock using the tracking results. As the robot gets closer to the dock, detection becomes unreliable due to the limited field of view. To address this, you may need to increase the reset_period parameter in the launch file here or consider launching the fp_dock_pose_publisher in the launch file here separately at the staging location when the pose estimation is accurate.