Advanced ROS 2 Concepts
Introduction​
This section covers advanced ROS 2 concepts that build upon the fundamentals introduced in Chapter 2. These topics are essential for developing complex robotic systems.
Real-time Performance​
Real-time Capabilities​
ROS 2 provides real-time capabilities through various mechanisms:
- Real-time scheduling: Using SCHED_FIFO and SCHED_RR policies
- Memory pre-allocation: Avoiding dynamic memory allocation during runtime
- Deterministic communication: Configuring DDS QoS for deterministic behavior
Example: Real-time Publisher​
#include <rclcpp/rclcpp.hpp>
#include <std_msgs/msg/string.hpp>
class RealTimePublisher : public rclcpp::Node
{
public:
RealTimePublisher() : Node("realtime_publisher")
{
// Configure publisher with real-time QoS
auto qos = rclcpp::QoS(rclcpp::KeepLast(10));
qos.reliable().durability_volatile();
publisher_ = this->create_publisher<std_msgs::msg::String>(
"realtime_topic", qos);
}
private:
rclcpp::Publisher<std_msgs::msg::String>::SharedPtr publisher_;
};
Advanced DDS Configuration​
Quality of Service (QoS) Settings​
QoS policies allow fine-tuning of communication behavior:
- Reliability: Reliable vs. best-effort delivery
- Durability: Volatile vs. transient-local
- History: Keep-all vs. keep-last policies
- Deadline: Message delivery deadline constraints
Custom DDS Profiles​
<?xml version="1.0" encoding="UTF-8"?>
<dds xmlns="http://www.eprosima.com/XMLSchemas/fastRTPS_Profiles">
<profiles>
<publisher profile_name="reliable_publisher">
<qos>
<reliability>
<kind>RELIABLE</kind>
</reliability>
<durability>
<kind>TRANSIENT_LOCAL</kind>
</durability>
</qos>
</publisher>
</profiles>
</dds>
ROS 2 Security​
Security Features​
ROS 2 includes built-in security features:
- Authentication: Identity verification
- Access Control: Permissions and roles
- Encryption: Data confidentiality and integrity
Security Configuration​
# Generate security files
ros2 security create_keystore ~/enclaves
ros2 security create_key ~/enclaves/node_name
Multi-robot Systems​
Robot-to-Robot Communication​
Setting up communication between multiple robots:
// Using unique namespaces for each robot
auto robot1_sub = create_subscription<MessageType>(
"/robot1/topic", qos, callback);
auto robot2_sub = create_subscription<MessageType>(
"/robot2/topic", qos, callback);
Distributed Coordination​
- Leader election: Algorithms for distributed leadership
- Consensus protocols: Agreement mechanisms
- Task allocation: Distributed task assignment
Performance Optimization​
Memory Management​
- Object pools: Reusing message objects
- Zero-copy transfers: Direct memory access
- Custom allocators: Specialized memory management
Communication Optimization​
- Intra-process communication: Direct node communication
- Message filtering: Reducing unnecessary data transfer
- Connection sharing: Reusing DDS connections
Advanced Tools​
Performance Analysis​
- ros2 doctor: System health checking
- ros2 bag: Data recording and playback
- rqt_plot: Real-time data visualization
Debugging Tools​
- ros2 lifecycle: Lifecycle node management
- ros2 param: Parameter server interaction
- ros2 action: Action server/client tools
Next Steps​
These advanced ROS 2 concepts provide the foundation for building sophisticated robotic systems. Combine these techniques with the Physical AI and humanoid robotics concepts from other chapters to create truly advanced robotic applications.