| name | cross-machine-communication |
| description | 跨机器通信技能 - 网络配置、Discovery 加速、安全通信 |
| argument-hint | 跨机器 OR 网络 OR discovery OR security OR cross machine |
| user-invocable | true |
跨机器通信技能
ROS2 跨机器通信配置
何时使用
当需要以下帮助时使用此技能:
- 网络配置
- Discovery 加速
- 安全通信 (SROS2)
- NAT 穿越
- 带宽优化
核心实现
网络配置
export ROS_DOMAIN_ID=42
export ROS_IP=192.168.1.100
export ROS_HOSTNAME=robot-a.local
export ROS_DOMAIN_ID=42
export ROS_IP=192.168.1.101
export ROS_HOSTNAME=robot-b.local
ping robot-a.local
ros2 topic list
Discovery 加速
from rclpy.node import Node
class FastDiscoveryNode(Node):
def __init__(self):
super().__init__('fast_discovery')
self.declare_parameter('fast_discovery', True)
if self.get_parameter('fast_discovery').value:
self.set_parameters([
rclpy.parameter.Parameter(
'enclave', '/robot/controller'
)
])
SROS2 安全通信
mkdir -p security_store
cat > security_store/permissions.xml << EOF
<permissions>
<grant name="robot_grant">
<subject_name>CN=robot</subject_name>
<validity>
<not_before>2024-01-01T00:00:00</not_before>
<not_after>2029-12-31T23:59:59</not_after>
</validity>
<allow_rule>
<actions>
<action>READ</action>
<action>WRITE</action>
</actions>
<topics>
<topic>*/cmd_vel</topic>
<topic>*/odom</topic>
</topics>
</allow_rule>
</grant>
</permissions>
EOF
ros2 run demo_nodes_cpp talker --ros-args \
--enclaves /robot/controller \
--params-file security_store/permissions.yaml
Discovery 服务器
<?xml version="1.0"?>
<staticdiscovery>
<participant>
<name>discovery_server</name>
<ID>0</ID>
<externalunicastlocator address="192.168.1.100" port="53400"/>
</participant>
</staticdiscovery>
ros2 run fastrtps_cmake_integration fastrtps_discovery_server -i 0
export FASTRTPS_DEFAULT_PROFILES_FILE=discovery_server.xml