Skip to main content

Appendix A: ROS 2 Cheat Sheets

Common Commands

Package Management

# Create package
ros2 pkg create --build-type ament_python my_package

# Build workspace
colcon build
colcon build --packages-select my_package

# Source workspace
source install/setup.bash

Node Management

# List nodes
ros2 node list

# Node info
ros2 node info /node_name

# Run node
ros2 run package_name executable_name

# Run with parameters
ros2 run package_name node --ros-args -p param:=value

Topic Operations

# List topics
ros2 topic list

# Topic info
ros2 topic info /topic_name

# Echo topic
ros2 topic echo /topic_name

# Publish to topic
ros2 topic pub /topic_name std_msgs/msg/String "data: 'hello'"

# Topic rate
ros2 topic hz /topic_name

Service Operations

# List services
ros2 service list

# Service type
ros2 service type /service_name

# Call service
ros2 service call /service_name example_interfaces/srv/AddTwoInts "{a: 1, b: 2}"

Parameter Operations

# List parameters
ros2 param list

# Get parameter
ros2 param get /node_name parameter_name

# Set parameter
ros2 param set /node_name parameter_name value

# Dump parameters to file
ros2 param dump /node_name > params.yaml

Launch Files

# Run launch file
ros2 launch package_name launch_file.py

# With arguments
ros2 launch package_name launch_file.py arg:=value

ROS Bags

# Record all topics
ros2 bag record -a

# Record specific topics
ros2 bag record /topic1 /topic2

# Play bag
ros2 bag play my_bag.db3

# Info
ros2 bag info my_bag.db3

Python Node Template

#!/usr/bin/env python3
import rclpy
from rclpy.node import Node
from std_msgs.msg import String

class MyNode(Node):
def __init__(self):
super().__init__('my_node')

# Publisher
self.pub = self.create_publisher(String, 'topic', 10)

# Subscriber
self.sub = self.create_subscription(
String, 'input_topic',
self.callback, 10
)

# Timer
self.timer = self.create_timer(1.0, self.timer_callback)

# Parameter
self.declare_parameter('my_param', 'default_value')

def callback(self, msg):
self.get_logger().info(f'Received: {msg.data}')

def timer_callback(self):
msg = String()
msg.data = 'Hello'
self.pub.publish(msg)

def main(args=None):
rclpy.init(args=args)
node = MyNode()
rclpy.spin(node)
node.destroy_node()
rclpy.shutdown()

if __name__ == '__main__':
main()

Common Message Types

# String
from std_msgs.msg import String
msg = String()
msg.data = "text"

# Twist (velocity commands)
from geometry_msgs.msg import Twist
msg = Twist()
msg.linear.x = 0.5
msg.angular.z = 0.1

# Image
from sensor_msgs.msg import Image
# Use cv_bridge to convert

# LaserScan
from sensor_msgs.msg import LaserScan

# Point Cloud
from sensor_msgs.msg import PointCloud2

Troubleshooting

Problem: ros2: command not found Solution: Source ROS 2: source /opt/ros/humble/setup.bash

Problem: Package not found after build Solution: Source workspace: source install/setup.bash

Problem: DDS discovery issues Solution: Check ROS_DOMAIN_ID, ensure same network

Problem: Permission denied on /dev/ttyUSB0 Solution: sudo usermod -aG dialout $USER (logout/login)

See Also