Isaac ROS
NVIDIA’s GPU-accelerated ROS 2 packages bring 10-100x speedups for perception tasks on Jetson.
ROS 2 (Robot Operating System 2) is an open-source robotics middleware that provides tools, libraries, and conventions for building robot applications. Despite its name, it’s not an operating system but a framework that runs on top of Linux (primarily), Windows, and macOS.
ROS 2 addresses limitations of ROS 1 for production robotics:
| Aspect | ROS 1 | ROS 2 |
|---|---|---|
| Communication | Custom (TCPROS) | DDS (industry standard) |
| Real-time | Not supported | Supported |
| Security | None built-in | DDS Security |
| Multi-robot | Difficult | Native support |
| Platforms | Linux only | Linux, Windows, macOS, RTOS |
| Lifecycle | None | Managed node lifecycle |
Independent processes that perform computation. A robot typically runs many nodes:
┌─────────┐ ┌──────────┐ ┌─────────┐ ┌──────────┐│ Camera │ │ SLAM │ │ Planner │ │ Controller││ Node │ │ Node │ │ Node │ │ Node │└─────────┘ └──────────┘ └─────────┘ └──────────┘Publish/subscribe messaging for streaming data:
Camera Node ──► /camera/image ──► SLAM Node ▲ │ Image ViewerRequest/response for synchronous operations:
Client ──► /get_map (Request) ──► Server ◄── Map Data (Response) ◄──For long-running tasks with feedback:
Client ──► /navigate_to_pose ──► Action Server ◄── Progress Feedback ◄── ◄── Final Result ◄──────┌─────────────────────────────────────────────────────────────────┐│ Your ROS 2 Application │├─────────────────────────────────────────────────────────────────┤│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────────┐ ││ │ rclcpp │ │ rclpy │ │ Other Clients │ ││ │ (C++ API) │ │(Python API) │ │ (Rust, Java, etc.) │ ││ └─────────────┘ └─────────────┘ └─────────────────────────┘ │├─────────────────────────────────────────────────────────────────┤│ RCL (ROS Client Library) │├─────────────────────────────────────────────────────────────────┤│ RMW (ROS Middleware Interface) │├─────────────────────────────────────────────────────────────────┤│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────────┐ ││ │ FastDDS │ │ CycloneDDS │ │ Zenoh, Other Impls │ ││ │ (Default) │ │ │ │ │ ││ └─────────────┘ └─────────────┘ └─────────────────────────┘ │└─────────────────────────────────────────────────────────────────┘Set up sources
sudo apt update && sudo apt install -y software-properties-commonsudo add-apt-repository universesudo apt update && sudo apt install curl -ysudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpgecho "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/nullInstall ROS 2
sudo apt updatesudo apt install ros-jazzy-desktop # Recommended LTS# Or: ros-humble-desktop for legacy projectsSource the setup
source /opt/ros/jazzy/setup.bash# Add to ~/.bashrc for persistenceecho "source /opt/ros/jazzy/setup.bash" >> ~/.bashrcVerify installation
ros2 run demo_nodes_cpp talker# In another terminal:ros2 run demo_nodes_cpp listener# Pull official ROS 2 imagedocker pull ros:jazzy
# Run with GUI support (Linux)docker run -it --rm \ --env="DISPLAY" \ --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \ ros:jazzy# List running nodesros2 node list
# List topicsros2 topic list
# Echo topic dataros2 topic echo /scan
# Get topic inforos2 topic info /camera/image_raw
# Call a serviceros2 service call /get_map nav_msgs/srv/GetMap
# Launch a systemros2 launch my_robot bringup.launch.py
# Record dataros2 bag record -a
# Play back dataros2 bag play my_recording#!/usr/bin/env python3import rclpyfrom rclpy.node import Nodefrom std_msgs.msg import String
class MinimalPublisher(Node): def __init__(self): super().__init__('minimal_publisher') self.publisher_ = self.create_publisher(String, 'topic', 10) self.timer = self.create_timer(0.5, self.timer_callback)
def timer_callback(self): msg = String() msg.data = 'Hello, ROS 2!' self.publisher_.publish(msg) self.get_logger().info(f'Publishing: "{msg.data}"')
def main(): rclpy.init() node = MinimalPublisher() rclpy.spin(node) node.destroy_node() rclpy.shutdown()
if __name__ == '__main__': main()#include <chrono>#include <memory>#include "rclcpp/rclcpp.hpp"#include "std_msgs/msg/string.hpp"
using namespace std::chrono_literals;
class MinimalPublisher : public rclcpp::Node {public: MinimalPublisher() : Node("minimal_publisher") { publisher_ = this->create_publisher<std_msgs::msg::String>("topic", 10); timer_ = this->create_wall_timer( 500ms, std::bind(&MinimalPublisher::timer_callback, this)); }
private: void timer_callback() { auto message = std_msgs::msg::String(); message.data = "Hello, ROS 2!"; publisher_->publish(message); RCLCPP_INFO(this->get_logger(), "Publishing: '%s'", message.data.c_str()); }
rclcpp::Publisher<std_msgs::msg::String>::SharedPtr publisher_; rclcpp::TimerBase::SharedPtr timer_;};
int main(int argc, char* argv[]) { rclcpp::init(argc, argv); rclcpp::spin(std::make_shared<MinimalPublisher>()); rclcpp::shutdown(); return 0;}| Package | Purpose |
|---|---|
nav2 | Navigation stack |
moveit2 | Motion planning for manipulation |
ros2_control | Hardware abstraction |
tf2 | Coordinate transforms |
rviz2 | 3D visualization |
rosbag2 | Data recording/playback |
gazebo_ros2 | Simulation integration |
Isaac ROS
NVIDIA’s GPU-accelerated ROS 2 packages bring 10-100x speedups for perception tasks on Jetson.
NITROS
Zero-copy GPU memory sharing between ROS 2 nodes — no CPU bottleneck.