我是靠谱客的博主 和谐仙人掌,最近开发中收集的这篇文章主要介绍看了这篇还不会 ROS1多机通信 你打我1 什么是ros2 多机通讯的 需要具备的知识3 实现方式4 测试多机通讯5 总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

  • 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
在这里插入图片描述

  1. 启动rosmaster 节点,这个时候会拉起一个xmlrpcsever uri=http://localhost:11311/ 参考的是ROS_MASTER_URI
    在这里插入图片描述
  2. 启动参数服务器 Parameter Server,其实是上面master的一部分
  3. 启动节点,节点主要负责与其他节点的协商
    在这里插入图片描述
  4. topic sub 和pub 其实是通过xml去协商的,topic 都算是xmlrpc 的 client,协商的时候会带上本机地址,这个地址是从ROS_IP或者hostname 去获取的
  5. 协商完成之后就可以点对点的传输数据了

③ 设置 ROS_MASTER_URI 和 HOST_IP

  • ROS_MASTER_URI 是指定master 的uri的环境变量,默认是本机
  • HOST_IP 是指定主机的地址,默认的主机名其实是个域名,不指定具体ip的话,协商之后的传输建立会因dns解析到不地址而失败

④ ROS 环境变量

ros的环境变量主要是几个带ROS的环境变量

  1. ROS_ROOT=/opt/ros/kinetic/share/ros ros根目录
  2. ROS_PACKAGE_PATH=/home/utry/catkin_ws/src:/opt/ros/kinetic/share ros的包路径,通过这个找到包
  3. ROS_MASTER_URI=http://localhost:11311 master xmlrpc的uri
  4. ROS_PYTHON_VERSION=2 python版本2
  5. ROS_VERSION=1 ros的版本
  6. ROSLISP_PACKAGE_DIRECTORIES=/home/utry/catkin_ws/devel/share/common-lisp lisp包路径
  7. ROS_DISTRO=kinetic 发行版本
  8. ROS_IP=192.168.0.114 本机ip,别人通过此ip与自己建立连接,不管是主机还是从机都要设置
  9. ROS_ETC_DIR=/opt/ros/kinetic/etc/ros 配置路径

⑤ .bashrc 的作用

.bashrc 文件会在你每次打开一个新终端的时候执行一次,我们会将一些环境变量的操作加在后面
在这里插入图片描述

3 实现方式

做到以下几点就可以:

  1. 多台装有ros的机器处于同一局域网,能相互ping同
  2. 在确认是主机的设备上启动roscore,设置主机HOST_IP,命令export ROS_IP=本机ip,这个是为了让别人能连上自己
  3. 从机设置 ROS_MASTER_URI=http://主机ip:11311,命令是export ROS_MASTER_URI=http://主机ip:11311,可以把这个加到.bashrc最后一行去,至此,可以通过命令查看到主机和连接到主机的机器的相关节点状态了
  4. 从机设置ROS_IP=本机IP,命令是 export ROS_IP=本机ip
  5. 至此结束了,下面测试

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 总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部