ROS2 Communication & Tools
Master ROS2 topics, services, and essential debugging tools
Tutorial Overview
🎯 Learning Objectives
By the end of this tutorial, you will:
✅ Understand ROS2 communication paradigms (topics, services, actions)
✅ List and inspect topics, services, and nodes
✅ Publish and subscribe to topics from command line
✅ Call services to control robot
✅ Use rqt tools for visualization and debugging
✅ Record and playback data with rosbags
✅ Debug communication issues
✅ Understand message types and interfaces
⏱️ Time Required
Reading & Concepts: 25 minutes
Command Line Tools: 30 minutes
RQT Tools: 25 minutes
Rosbag Practice: 20 minutes
Debugging: 15 minutes
Total: ~115 minutes
📚 Prerequisites
✅ Completed Getting Started
✅ Robot powered on and connected
✅ SSH access to robot
✅ Basic Linux command line knowledge
✅ Understanding of terminal navigation
🛠️ What You'll Need
✅ Beetlebot (powered on, base system running)
✅ Laptop with ROS2 Jazzy installed
✅ Both robot and laptop on same WiFi network
✅ Terminal access (SSH to robot or direct)
Part 1: ROS2 Communication Paradigms
Topics (Publish-Subscribe)
What are topics?
Continuous data streams
Many-to-many communication
Publishers send data, subscribers receive
Asynchronous (fire-and-forget)
Example:
When to use:
Sensor data (LiDAR, camera, IMU)
Status updates (battery, position)
Continuous streams (video, telemetry)
Services (Request-Response)
What are services?
One-time request-response
Synchronous (wait for response)
Client sends request, server responds
Like function calls
Example:
When to use:
Commands (ARM, DISARM, emergency stop)
Queries (get parameter, check status)
One-time actions
Actions (Goal-Based)
What are actions?
Long-running tasks with feedback
Can be cancelled
Provides progress updates
Goal → Feedback → Result
Example:
When to use:
Navigation goals
Long tasks (mapping, complex motions)
Need progress updates or cancellation
Part 2: Exploring Your Robot's Topics
List All Topics
Your robot has these key topics:
Get Topic Information
Exercise 2.1: Topic Discovery
Task: Identify all sensor topics and their rates
Part 3: Reading Topic Data
Echo Topics (View Live Data)
Exercise 2.2: Understanding Sensor Data
Task: Examine different sensor message formats
LiDAR data:
IMU data:
Odometry data:
Part 4: Publishing to Topics
Understanding Message Structure
First, see what a message looks like:
For differential drive (Beetlebot):
linear.x: Forward/backward speed (m/s)angular.z: Turn rate (rad/s)Other fields unused (can't strafe sideways or fly!)
Publishing Commands
⚠️ CRITICAL: Command Timeout
Your robot has a 500ms command timeout. Commands must be published continuously (at least 2 Hz) or the robot will automatically DISARM and stop.
❌ THIS WILL NOT WORK:
✅ THIS WORKS:
Exercise 2.3: Manual Robot Control
Task: Drive robot using command line
Test 1: Forward motion
Test 2: Rotation
Test 3: Arc motion
Test 4: Using timeout command
Part 5: Services
List Available Services
Calling Services
ARM/DISARM robot:
Check Service Type and Interface
Exercise 2.4: Service Control Flow
Task: Test ARM → Drive → DISARM sequence
What you learned:
Robot automatically DISARMs after 500ms without commands
Must continuously publish commands to maintain motion
Services provide control over robot state
Part 6: Understanding the Communication Graph
Using rqt_graph
Visualize node connections:
What you'll see:
[PLACEHOLDER: Screenshot of rqt_graph showing Beetlebot nodes]
Exercise 2.5: Trace a Command
Task: Follow /cmd_vel from joystick to motors
Part 7: Recording and Playback (rosbag)
Recording Data
Record specific topics:
Record all topics:
Record with compression:
Playback Data
Play recorded bag:
Exercise 2.6: Record and Analyze
Task: Record driving session, analyze offline
Recording:
Analysis:
Part 8: RQT Tools
rqt_plot (Time Series)
Plot data over time:
Add topics to plot:
[PLACEHOLDER: Screenshot of rqt_plot showing odometry]
rqt_image_view (Camera)
View camera stream:
rqt_console (Logs)
View system logs:
rqt_topic (Topic Monitor)
Monitor multiple topics:
Exercise 2.7: Multi-Tool Monitoring
Task: Monitor robot with multiple tools
Setup:
Observe:
rqt_plot shows position changing
rqt_console shows any warnings/errors
rqt_topic shows bandwidth and rates
Part 9: Troubleshooting Communication
Problem: Topic Not Publishing
Symptoms: ros2 topic hz /scan shows nothing
Debug steps:
Problem: Can't Send Commands
Symptoms: Robot doesn't respond to /cmd_vel
Debug steps:
Problem: Services Not Responding
Symptoms: Service call hangs or fails
Part 10: Knowledge Check
Concept Quiz
What's the difference between topics and services?
Why must cmd_vel be published continuously?
What does /odometry/filtered provide that /wheel/odom doesn't?
When would you use rqt_graph?
What information does rosbag store?
Hands-On Challenge
Task: Record, analyze, and report driving behavior
Requirements:
Record 60-second driving session with:
/scan
/odometry/filtered
/imu/data
/cmd_vel
/battery_voltage
Include in recording:
Forward motion
Rotation in place
Arc motion
Full stop
Analyze recording:
Maximum linear velocity achieved
Maximum angular velocity achieved
Total distance traveled (from odometry)
Battery voltage drop
Any anomalies (gaps, errors)
Create report:
Bag file statistics
Plots of key data (position, velocity)
Summary of findings
Recommendations
Part 11: What You've Learned
✅ Congratulations!
You now understand:
Communication Basics:
✅ Topics, services, and actions
✅ When to use each paradigm
✅ Publish-subscribe architecture
Command Line Tools:
✅ Listing and inspecting topics/services/nodes
✅ Publishing to topics (with correct --rate!)
✅ Calling services
✅ Reading topic data
Robot Control:
✅ ARM/DISARM mechanism
✅ Velocity command structure
✅ Command timeout (500ms)
✅ Safety systems
Debugging:
✅ rqt_graph visualization
✅ rosbag recording/playback
✅ rqt tools (plot, console, topic)
✅ Common issues and solutions
Next Steps
🎯 You're Now Ready For:
Immediate Next: → Robot Simulation with Gazebo - Test safely in simulation
Hardware Tutorials: → Sensor Data Visualization - Deep dive into sensor topics → Teleoperation Control - Advanced driving techniques
Advanced Topics:
Custom node development (Python/C++)
Message type creation
Action servers/clients
Parameter management
Quick Reference
Essential Commands
Key Topics Reference
/cmd_vel
Twist
10 Hz
Main velocity control
/scan
LaserScan
10 Hz
LiDAR data
/odometry/filtered
Odometry
30 Hz
Fused position (EKF)
/wheel/odom
Odometry
20 Hz
Wheel-only position
/imu/data
Imu
100 Hz
IMU filtered
/battery_voltage
Float32
1-10 Hz
Battery status
/joy
Joy
50 Hz
Joystick input
/pi_camera/image_raw/compressed
CompressedImage
30 Hz
Camera stream
Important Services
/lyra/arm
Trigger
Enable motors
/lyra/disarm
Trigger
Disable motors
/lyra/emergency_stop
Trigger
Emergency stop
Completed ROS2 Communication & Tools! 🎉
→ Continue to Robot Simulation with Gazebo → Or return to Tutorial Index
Last Updated: January 2026 Tutorial 2 of 11 - Beginner Level Estimated completion time: 115 minutes
Last updated