Skip to main content

Module 1: ROS 2 Fundamentals (Weeks 1-5)

Overview

This module introduces the Robot Operating System 2 (ROS 2), the foundational middleware for robotics applications. You'll learn the core concepts, architecture, and practical implementation of ROS 2 systems essential for humanoid robotics development.

Learning Objectives

By the end of this module, you will be able to:

  • Explain the ROS 2 architecture and its key components
  • Create and manage ROS 2 packages, nodes, and communication patterns
  • Implement robot models using URDF (Unified Robot Description Format)
  • Work with transforms (TF) for coordinate frame management
  • Design launch files for complex robot system initialization
  • Debug and troubleshoot ROS 2 applications

Module Structure

Week 1: ROS 2 Architecture and Setup

  • ROS 2 vs ROS 1: Key differences and improvements
  • DDS (Data Distribution Service) and middleware
  • Workspace setup and package management
  • Basic node creation and execution

Week 2: Communication Patterns

  • Topics and publishers/subscribers
  • Services and clients
  • Actions and clients/servers
  • Parameters and configuration

Week 3: Advanced Communication and Launch Systems

  • Launch files and complex system management
  • Composition and node containers
  • Quality of Service (QoS) settings
  • Inter-process communication optimization

Week 4: Robot Modeling and URDF

  • URDF (Unified Robot Description Format) basics
  • Joint types and kinematic chains
  • Visual and collision properties
  • Robot state publisher and joint state publisher

Week 5: Transform Management and Navigation

  • TF (Transforms) and TF2 concepts
  • Static and dynamic transforms
  • Robot localization in simulation
  • Basic navigation concepts

Week 1: ROS 2 Architecture and Setup

Introduction to ROS 2

ROS 2 (Robot Operating System 2) is not an operating system but rather a flexible framework for writing robot software. It provides services designed for a heterogeneous computer cluster such as hardware abstraction, device drivers, libraries, visualizers, message-passing, package management, and more.

Key Improvements in ROS 2

  1. Real-time support: ROS 2 supports real-time execution, which is crucial for safety-critical robotic applications.
  2. Multi-robot systems: Better support for multi-robot systems and distributed architectures.
  3. Security: Built-in security features including authentication, authorization, and encryption.
  4. Quality of Service (QoS): Configurable communication policies for different types of data.
  5. DDS Middleware: Pluggable middleware layer using DDS (Data Distribution Service) for communication.

Setting Up Your Workspace

# Create a new workspace
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws

# Source the ROS 2 installation
source /opt/ros/humble/setup.bash # Replace 'humble' with your ROS 2 distribution

# Build the workspace
colcon build

# Source the workspace
source install/setup.bash

Creating Your First Package

cd ~/ros2_ws/src
ros2 pkg create --build-type ament_python my_robot_package

Week 2: Communication Patterns

Topics - Publisher/Subscriber Pattern

Topics in ROS 2 implement a publish/subscribe communication model where multiple nodes can publish messages to the same topic and multiple nodes can subscribe to the same topic.

# Publisher example
import rclpy
from rclpy.node import Node
from std_msgs.msg import String

class MinimalPublisher(Node):
def __init__(self):
super().__init__('minimal_publisher')
self.publisher_ = self.create_publisher(String, 'topic', 10)
timer_period = 0.5 # seconds
self.timer = self.create_timer(timer_period, self.timer_callback)
self.i = 0

def timer_callback(self):
msg = String()
msg.data = 'Hello World: %d' % self.i
self.publisher_.publish(msg)
self.get_logger().info('Publishing: "%s"' % msg.data)
self.i += 1

def main(args=None):
rclpy.init(args=args)
minimal_publisher = MinimalPublisher()
rclpy.spin(minimal_publisher)
minimal_publisher.destroy_node()
rclpy.shutdown()

if __name__ == '__main__':
main()

Services - Request/Response Pattern

Services provide a request/response communication model where a client sends a request and waits for a response from a server.

Actions - Goal/Result/Feedback Pattern

Actions are used for long-running tasks that provide feedback during execution and return a result upon completion.

Week 3: Advanced Communication and Launch Systems

Launch Files

Launch files allow you to start multiple nodes with a single command, configure parameters, and set up complex robot systems.

# launch/my_robot.launch.py
from launch import LaunchDescription
from launch_ros.actions import Node

def generate_launch_description():
return LaunchDescription([
Node(
package='my_robot_package',
executable='publisher_node',
name='publisher_node'
),
Node(
package='my_robot_package',
executable='subscriber_node',
name='subscriber_node'
)
])

Week 4: Robot Modeling and URDF

Understanding URDF

URDF (Unified Robot Description Format) is an XML format for representing a robot model. It describes the kinematic and dynamic properties of a robot, as well as its visual and collision properties.

<?xml version="1.0"?>
<robot name="simple_robot">
<link name="base_link">
<visual>
<geometry>
<box size="0.5 0.5 0.2"/>
</geometry>
</visual>
<collision>
<geometry>
<box size="0.5 0.5 0.2"/>
</geometry>
</collision>
<inertial>
<mass value="1"/>
<inertia ixx="1" ixy="0" ixz="0" iyy="1" iyz="0" izz="1"/>
</inertial>
</link>
</robot>

Week 5: Transform Management and Navigation

TF and TF2

TF (Transforms) is a package that keeps track of multiple coordinate frames over time. It maintains the relationship between coordinate frames in a tree structure buffered in time, and allows you to transform points, vectors, etc. between any two coordinate frames at any desired point in time.

Troubleshooting Common Issues

1. Package Not Found

Issue: Package 'package_name' not found Solution: Ensure the package is in your workspace's src directory and run colcon build followed by source install/setup.bash

2. DDS Communication Issues

Issue: Nodes in different terminals not communicating Solution: Ensure all terminals are sourcing the same ROS 2 installation and workspace

3. Permission Issues

Issue: Cannot create or modify files Solution: Check file permissions and ensure you're working in your user workspace

Hands-on Exercise

Create a simple ROS 2 package that includes:

  1. A publisher node that publishes a message every second
  2. A subscriber node that receives and logs the message
  3. A launch file to start both nodes
  4. Proper package configuration and dependencies

Test your package in a simulated environment and verify that the publisher and subscriber communicate correctly.