概述
目录
- 1 什么是ros
- 2 多机通讯的 需要具备的知识
- ① 基本网络知识
- ② ROS的通讯机制
- ③ 设置 ROS_MASTER_URI 和 HOST_IP
- ④ ROS 环境变量
- ⑤ .bashrc 的作用
- 3 实现方式
- 4 测试多机通讯
- ① 设置环境,按照 上面操作来
- ② 查看topic
- ③ talker listener 测试
- ④ 小乌龟 (turtlesim)键盘控制
- 5 总结
有个群里的同学拿着古月的书,问我怎么设置多机通讯,下面写一篇简单的配置
1 什么是ros
ROS是机器人操作系统(Robot Operating System)的英文缩写。ROS是用于编写机器人软件程序的一种具有高度灵活性的软件架构。它包含了大量工具软件、库代码和约定协议,旨在简化跨机器人平台创建复杂、鲁棒的机器人行为这一过程的难度与复杂度。ROS的原型源自斯坦福大学的STanford
Artificial Intelligence Robot (STAIR) 和 Personal Robotics (PR)项目。
2 多机通讯的 需要具备的知识
多机通讯主要是通过网络实现的,这个就是ros的核心通讯组件就是xmlrpc:
xml rpc是使用http协议做为传输协议的rpc机制,使用xml文本的方式传输命令和数据。一个rpc系统,必然包括2个部分:
- 1.rpc client,用来向rpc server调用方法,并接收方法的返回数据;
- 2.rpc server,用于响应rpc client的请求,执行方法,并回送方法执行结果。
RPC是Remote Procedure Call的缩写,翻译成中文就是远程过程调用,是一种在本地的机器上调用远端机器上的一个过程(方法)的技术,这个过程也被大家称为“分布式计算”,是为了提高各个分立机器的“互操作性”而发明出来的技术。
① 基本网络知识
首先你要保证两个设备在网络上是通的,常用的办法是通过ping,目前测试不能跨网段,如果有同学实现了,请告知
② ROS的通讯机制
具体的实现可以看这篇官方文档:http://wiki.ros.org/cn/ROS/Technical%20Overview
- 启动rosmaster 节点,这个时候会拉起一个xmlrpcsever uri=http://localhost:11311/ 参考的是
ROS_MASTER_URI
- 启动参数服务器
Parameter Server
,其实是上面master的一部分 - 启动节点,节点主要负责与其他节点的协商
- topic sub 和pub 其实是通过xml去协商的,topic 都算是xmlrpc 的 client,协商的时候会带上本机地址,这个地址是从ROS_IP或者hostname 去获取的
- 协商完成之后就可以点对点的传输数据了
③ 设置 ROS_MASTER_URI 和 HOST_IP
- ROS_MASTER_URI 是指定master 的uri的环境变量,默认是本机
- HOST_IP 是指定主机的地址,默认的主机名其实是个域名,不指定具体ip的话,协商之后的传输建立会因dns解析到不地址而失败
④ ROS 环境变量
ros的环境变量主要是几个带ROS的环境变量
- ROS_ROOT=/opt/ros/kinetic/share/ros ros根目录
- ROS_PACKAGE_PATH=/home/utry/catkin_ws/src:/opt/ros/kinetic/share ros的包路径,通过这个找到包
- ROS_MASTER_URI=http://localhost:11311 master xmlrpc的uri
- ROS_PYTHON_VERSION=2 python版本2
- ROS_VERSION=1 ros的版本
- ROSLISP_PACKAGE_DIRECTORIES=/home/utry/catkin_ws/devel/share/common-lisp lisp包路径
- ROS_DISTRO=kinetic 发行版本
- ROS_IP=192.168.0.114 本机ip,别人通过此ip与自己建立连接,不管是主机还是从机都要设置
- ROS_ETC_DIR=/opt/ros/kinetic/etc/ros 配置路径
⑤ .bashrc 的作用
.bashrc 文件会在你每次打开一个新终端的时候执行一次,我们会将一些环境变量的操作加在后面
3 实现方式
做到以下几点就可以:
- 多台装有ros的机器处于同一局域网,能相互ping同
- 在确认是主机的设备上启动roscore,设置主机HOST_IP,命令
export ROS_IP=本机ip
,这个是为了让别人能连上自己 - 从机设置 ROS_MASTER_URI=http://主机ip:11311,命令是
export ROS_MASTER_URI=http://主机ip:11311
,可以把这个加到.bashrc最后一行去,至此,可以通过命令查看到主机和连接到主机的机器的相关节点状态了 - 从机设置ROS_IP=本机IP,命令是
export ROS_IP=本机ip
- 至此结束了,下面测试
4 测试多机通讯
① 设置环境,按照 上面操作来
我2台虚拟机,一个做主机,主机状态是这样的:
从机状态:
启动roscore 和 listener,我改了源码,打印可能有点乱
② 查看topic
③ talker listener 测试
listen 已经打开了,我这边ssh 到从机上去执行,方便查看
④ 小乌龟 (turtlesim)键盘控制
-
主机启动小乌龟,从机控制,
-
反向控制,主机控制从机
5 总结
如果出这个错误
就是ROS_IP 没有设置
这个错误就是没有启动roscore 或者没有设置 ROS_MASTER_URI
正好看这个的时候把源码熟悉了一边,抽时间出一波,ros源码的专栏
最后
以上就是和谐仙人掌为你收集整理的看了这篇还不会 ROS1多机通信 你打我1 什么是ros2 多机通讯的 需要具备的知识3 实现方式4 测试多机通讯5 总结的全部内容,希望文章能够帮你解决看了这篇还不会 ROS1多机通信 你打我1 什么是ros2 多机通讯的 需要具备的知识3 实现方式4 测试多机通讯5 总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复