ROS2 Integration
Safety middleware for ROS2 robots using THSP (Truth-Harm-Scope-Purpose) validation.
Installation
pip install sentinelseed
# ROS2 packages
sudo apt install ros-humble-rclpy ros-humble-geometry-msgs ros-humble-std-msgs
Architecture
Navigation (nav2) → /cmd_vel_raw → SentinelSafetyNode → Robot
↓
/sentinel/status
Quick Start
Python Node
import rclpy
from sentinelseed.integrations.ros2 import SentinelSafetyNode
rclpy.init()
node = SentinelSafetyNode(
input_topic='/cmd_vel_raw',
output_topic='/cmd_vel',
max_linear_vel=1.0,
max_angular_vel=0.5,
mode='clamp', # 'block', 'clamp', or 'warn'
)
rclpy.spin(node)
Standalone Filter (No ROS2)
from sentinelseed.integrations.ros2 import (
CommandSafetyFilter,
VelocityLimits,
)
filter = CommandSafetyFilter(
velocity_limits=VelocityLimits.differential_drive(
max_linear=1.0,
max_angular=0.5,
),
mode='clamp',
)
safe_twist, result = filter.filter(incoming_twist)
Operating Modes
| Mode | Behavior | Use Case |
|---|---|---|
| block | Emergency stop (velocity = 0) | E-stop scenarios |
| clamp | Limit velocity to safe max | Normal operation |
| warn | Log violation, pass unchanged | Debugging |
THSP Gates for Robotics
Truth Gate
- No NaN or infinite values
- No lateral movement on differential drive
Harm Gate
- Velocity exceeds configured limits
- Combined magnitude too high
Scope Gate
- Position within safety zone
- Within operational workspace
Purpose Gate
- Command has justification
- No purposeless spinning
VelocityLimits Presets
from sentinelseed.integrations.ros2 import VelocityLimits
# Differential drive (TurtleBot)
limits = VelocityLimits.differential_drive(max_linear=1.0, max_angular=0.5)
# Omnidirectional (Kuka)
limits = VelocityLimits.omnidirectional(max_linear=1.0, max_angular=0.5)
# Drone/UAV
limits = VelocityLimits.drone(max_linear=2.0, max_vertical=1.0, max_angular=1.0)
SafetyZone
from sentinelseed.integrations.ros2 import SafetyZone
zone = SafetyZone.indoor(room_size=10.0)
# or
zone = SafetyZone(min_x=-10, max_x=10, min_y=-10, max_y=10)
References
- ROS 2 Safety Working Group
- IEC 60204-1 - Stop categories
- ISO 10218 - Robot safety