Disclaimer: This is a community-level repository and is not associated with NDI in any way.
This repository offers a ros2_control
driver for Northern Digital Inc. (NDI) manufactured optical tracking systems. This driver is a streamlined and updated version of ICube-Robotics/ndisys_ros2. A comparison of this driver and ICube-Robotics' driver is shown below.
Feature | This driver | ICube-Robotics' driver |
---|---|---|
Compatible ROS2 distro | Jazzy (targets on Ubuntu 24.04) | Humble (targets on Ubuntu 22.04) |
Data structure of trackers' pose | Uses the pose_broadcaster to publish trackers' pose in a standard ROS 2 PoseStamped format | Implements a rigid pose broadcaster to publish trackers' pose in a self-defined format |
Broadcast tracking data to ROS 2 TF tree | Supported via pose_broadcaster | Supported via self-implemented broadcaster |
Shipped with NDI Combined API (C++) | Yes (v1.9.7) | Yes |
ROS2 Jazzy on Linux (this driver is developed and tested on Ubuntu 24.04 LTS).
ndi_bringup
: This package provides an example to bring up the driver for a NDI polaris vega system. Users may use this package as an reference to write their own bringup package for their application.ndi_description
: This package contains the .rom file andros2_control
macros for describing the NDI optical tracking systems.ndi_hardware
: This package contains theros2_control
hardware interface for NDI optical tracking systems. This package is built upon NDI's Combined API (C++) v1.9.7, which is shipped with this package at ndi_hardware/external.
-
Clone this repository in your ros2 workspace. Taking
~/ndi_ros2_ws
as an example:mkdir -p ~/ndi_ros2_ws/src cd ~/ndi_ros2_ws/src git clone https://github.com/zixingjiang/ndi_ros2_driver.git
-
Install dependencies.
cd ~/ndi_ros2_ws rosdep update --rosdistro=$ROS_DISTRO sudo apt update rosdep install --from-paths ./ -i -y --rosdistro ${ROS_DISTRO}
-
Build and source the workspace.
colcon build source install/setup.bash
-
Connect to NDI optical tracking system and bringup the driver. Connect the NDI system with your PC through Ethernet. The
ndi_bringup
package provides an example launch file to start a NDI polaris vega system with two trackers loaded (tracker_1: 8700339.rom; tracker_2: 8700340.rom):# Fill in your NDI system IP address in the following command ros2 launch ndi_bringup polaris_vega.launch.py \ ip:=<your_ndi_ip> \ gui:=true
By setting
gui:=true
you can start a Rviz visualization of the tracking data. -
Access the data. After starting the driver, you can access the tracking data through any of the following means: ros2_control state interface, ROS 2 topics, or TF. Note that the
ndi_bringup
package runs theros2_control
stack under thendi
namespace by default.
If you want to use this driver in your own project, it is recommended to take ndi_bringup
as an example and write your own bringup package. You may find this guide helpful.
If you want to use NDI devices with robots, you may need to do hand-eye calibration. Although this driver does not provide hand-eye calibration functionalities, there is a list of recommended hand-eye calibration packages that you can use with this driver:
- easy_handeye2: official ROS 2 port of the popular hand-eye calibration package easy_handeye.
- minimal_handeye_ros2: my own hand-eye calibration package that is lightweight and easy to use.
This driver is written with reference to ICube-Robotics/ndisys_ros2.
This repository is released under the Apache 2.0 license.