ROS2网络多机通信DDS和安全加密SROS(多机器人系统)

本文介绍ROS2在局域网内的多机通信配置,对比ROS1,ROS2通过DDS实现通信更为简便。同时,深入探讨了ROS2的安全通信机制SROS2,包括秘钥管理、环境变量配置及跨平台支持,强调了网络安全在机器人系统中的重要性。

ROS1多机通信配置较为繁琐,但是ROS2非常简单,直接通过DDS实现。

如果是局域网,只需确保ROS_DOMAIN_ID一致即可。

例如设置ID为5:export ROS_DOMAIN_ID=5。

所有网络中设置一致,即可通信。()

PC1:

PC1开启订阅器

PC2:

/topic

可以查看开启前后主题多了一个/topic。

在PC2开启发布器:

publisher

PC1:

PC1收到消息

思考题:尝试通过网络控制turtlesim和turtlebot3。


ROS1和ROS2都支持消息加密以提高安全性。

ROS1:http://wiki.ros.org/SROS

SROS是ROS的一组安全性增强功能,例如对ROS中所有套接字传输的本机TLS支持,使用x.509证书(允许信任链),可定义的名称空间(针对ROS节点限制和允许的角色)以及契约用户-space工具自动生成节点密钥对,审核ROS网络以及构造/训练访问控制策略。此外,还提供了AppArmor配置文件库模板,允许用户强化或隔离在Linux内核上运行的基于ROS的进程。

网络安全正迅速成为机器人技术的普遍问题,尤其是随着机器人在社会中的普及越来越普遍。随着工业自动化,自动驾驶汽车,商业监控平台,家庭服务机器人以及许多其他机器人领域的出现,这些子系统的安全性应被视为至关重要,因为它们都为网络威胁提供了载体,可将其表现为现实世界中的风险。即使没有工业强度的机器人手臂或高速无人驾驶半卡车带来的危害,与智能手机和PC一样,承诺与物联网集成的个人机器人也可能成为侵犯隐私和身份盗窃来源的目标。

1. 安装    2. 教程    3. 概念    4. 命令行工具    5. 环境变量

ROS2:https://github.com/ros2/sros2/blob/master/SROS2_Linux.md

软件包提供了在DDS-Security之上使用ROS2的工具和说明。支持跨平台(Linux,macOS和Windows)以及跨不同语言(C++和Python),并都测试安全功能。

尽管正在设计SROS2支持任何一款安全的中间件,但目前正在仅支持RTI Connext Secure 5.3.1和eProsima的Fast-RTPS 1.6.0,并进行测试。如果要使用RTI Connext Secure运行演示,则需要许可证并需要安装。


这里,以ROS2网络中使用SROS2为例简要说明,网络消息安全性对多机器人系统非常重要。

dashing可以直接用功能包安装:

sudo apt install ros-dashing-sros2

创建秘钥仓库:

ros2 security create_keystore xxx_keys

创建节点:

ros2 security create_key xxx_keys /talker
ros2 security create_key xxx_keys /listener

We use minimal_publisher and minimal_subscriber here.

mr_keys(multi-robots)

配置环境变量:

export ROS_SECURITY_ROOT_DIRECTORY=xxx_keys
export ROS_SECURITY_ENABLE=true
export ROS_SECURITY_STRATEGY=Enforce

网络使用需要将秘钥复制到对应网络设备中。

scp -r talker USERNAME@xxx:~/xxx_keys

否则无法收到加密消息,虽然能看到节点和主题,但是没有任何更新和显示。

节点和主题
无法收到消息
security pub
security sub

 


 

### ROS主从机配置方法 #### 1. 设置ROS Master节点 在ROS系统中,Master节点起到核心作用,负责管理各个节点间的通信。为了确保其正常工作,需为主机分配充足的计算资源网络带宽[^1]。 #### 2. 配置主机与从机的`/etc/hosts`文件 为了让主机与从机能够相互识别,需要编辑两者的`/etc/hosts`文件。具体操作如下: - **主机端** 使用命令 `sudo nano /etc/hosts` 或 `sudo vim /etc/hosts` 编辑文件,并添加以下内容: ```plaintext 192.168.1.xxx 从机的hostname ``` - **从机端** 同样使用命令 `sudo nano /etc/hosts` 或 `sudo vim /etc/hosts` 编辑文件,并添加以下内容: ```plaintext 192.168.1.xxx 主机的hostname ``` 这里的 IP 地址应替换为实际使用的地址,而 hostname 则对应各自的机器名称[^3]。 #### 3. 修改`.bashrc`文件 为了指定每台计算机的角色以及连接至哪个 Master 节点,还需修改各自用户的 `.bashrc` 文件。 - **主机端** 执行命令 `vim ~/.bashrc` 并追加以下行: ```bash export ROS_HOSTNAME=本机的hostname export ROS_MASTER_URI=http://(主机(底盘)的IP):11311 ``` 替换其中的占位符为具体的值后保存退出,再运行 `source ~/.bashrc` 生效更改。 - **从机端** 类似地,在从机上也执行相同的操作,只是保持 `export ROS_MASTER_URI` 的指向不变即可[^3]。 #### 4. 测试连通性 完成以上步骤之后就可以验证是否成功建立了主从关系了。通常做法是在一台电脑上启动 `roscore` ,另一台上尝试发布消息或者订阅主题看能否交互无误[^3]。 ```python import rospy from std_msgs.msg import String def talker(): pub = rospy.Publisher('chatter', String, queue_size=10) rospy.init_node('talker', anonymous=True) rate = rospy.Rate(10) # 10hz while not rospy.is_shutdown(): hello_str = "hello world %s" % rospy.get_time() rospy.loginfo(hello_str) pub.publish(hello_str) rate.sleep() if __name__ == '__main__': try: talker() except rospy.ROSInterruptException: pass ``` 上述代码片段展示了一个简单的发布者示例程序,可用于测试跨设备的消息传递功能。 #### 工具辅助简化流程 存在一些专门设计用来提升ROS主从机配置效率的小型工具或脚本,它们允许用户通过定义变量如 ip_prefix remote_name 来快速部署环境参数调整过程[^2]。 ---
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangrelay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值