当前位置: 首页 > news >正文

ROS移植机器人小车:小车主机与从机电脑的通信

这个主要涉及.bashrc文件及以下三个参数,

$ROS_MASTER_URI
$ROS_HOSTNAME
$ROS_IP

其中ROS_IP和ROS_HOSTNAME有什么不同呢?

ROS_IP/ROS_HOSTNAME
ROS_IP和ROS_HOSTNAME是可选的环境变量,用来设置ROS节点或工具的公开网地址。这两个选项是互斥的,如果两者都设置优先使用ROS_HOSTNAME。如果你指定一个IP地址,使用ROS_IP;如果制定一个主机名(a host name),使用ROS_HOSTNAME。当一个ROS成员报告URI给master或者其他成员,这个值就会被用到。这个设置只用在一台计算机有多个地址,需要强制ROS到特定的一个的情况。
除了’localhost’(本地主机),ROS成员绑定到所有可用的网络接口,他不影响实际绑定地址。如果这个值设定为本地主机,ROS成员只绑定在环回接口。这将会阻止远程成员与本地成员交流。

另外,我们要先选定哪个是主机,哪个是从机。一般,购买的小车,主控端是指树莓派与工控机,也就是ROS主机;远程端是指虚拟机或者你自己安装好ROS系统并且配置好ROS网络的的远程ROS从机;一般用户密码RikiRobot小车主控端与远程端的用户密码都是“123456”;我自己安装的系统要根据实际情况设置。

下面我从自己的实际配置介绍一下,

主机(树莓派):
IPv4地址:192.168.3.93
子网掩码:255.255.255.0
网关:192.168.3.1
从机(远程电脑):
IPv4地址:192.168.3.92(前三个数字在同一段,末尾数字不一样)
子网掩码:255.255.255.0
网关:192.168.3.1

检查连接

无论是从机还是主机,你都应该可以ping通下面的三个端口,

ping 192.168.3.1
ping 192.168.3.92
ping 192.168.3.93

ROS配置

修改bashrc
将下列两句加入到分别入到两个设备的.bashrc的最后一行
ROS_MASTER_UR=http://主机ip:11311
ROS_IP=自己ip

主机:
export ROS_MASTER_URI=http://192.168.3.93:11311
export ROS_IP=192.168.3.93

从机:
export ROS_MASTER_URI=http://192.168.3.93:11311
export ROS_IP=192.168.3.92

检查通信

主机和从机都要运行source ~/.bashrc之后,主机运行

roscore

从机运行

rostopic list

出现

/rosout
/rosout_agg

说明通信成功

关于报错:invalid ROS_IP (port should not be included)

有的教学中,设置的ROS_IP是不固定的(因为卖家并不知道买家的IP),所以会使用`hostname -I`这样的标识,在运行下面的指令时

roslaunch  rikirobot bringup.launch(我自己安装的系统)
或者

roslaunch clbrobot bringup.launch(卖家的系统)

有可能会报错,

invalid ROS_IP (port should not be included)

修改

export ROS_IP=`hostname -I`

export ROS_IP=`hostname -I | cut -d " " -f 1`

或者,

export ROS_IP=`ifconfig wlan0 | grep -w inet | cut -d : -f 2 | awk {'print $2'}`

注意:采用上面那个对应任意连接方式,但下面那个必须是使用wlan0无线WIFI。

修改后的主机和从机配置为,

主机(树莓派小车):
# export ROS_MASTER_URI=http://192.168.3.93:11311
# export ROS_IP=`hostname -I | cut -d " " -f 1`
export ROS_IP=`ifconfig wlan0 | grep -w inet | cut -d : -f 2 | awk {'print $2'}`
export ROS_HOSTNAME=`ifconfig wlan0 | grep -w inet | cut -d : -f 2 | awk {'print $2'}`
export ROS_MASTER_URI=http://`ifconfig wlan0 | grep -w inet | cut -d : -f 2 | awk {'print $2'}`:11311
# 2wd,4wd,mecanum,omni.omni4wd,tank,ackermann
export RIKIBASE=mecanum
export RIKILIDAR=rplidar
export USB_CAMERA=true
export CLB_SERIAL="AEEFGABES63K6M2JXWMTA4VUBU======"

从机(我的远程ubuntu电脑没有wifi,只有一根网线连接到路由器):
export ROS_MASTER_URI=http://192.168.3.93:11311
export ROS_IP=`hostname -I | cut -d " " -f 1`

最后,配置完了不要忘记

source  ~/.bashrc

恢复单机使用ROS

要在各自设备上运行roscore,就要关闭两机通信,可注释调上面这两个设置。

本文结束

相关文章:

  • Linux查看版本和系统信息
  • ROS移植机器人小车: rikirobot试运行
  • Linux+Grub启动引导修复错误:Gnu Grub Version 2.04 Minimal BASH-like editing is supported...
  • Ubuntu下安装指定版本的cmake包
  • Ubuntu20.04编译安装Opencv4.5.5安装包报错:Could NOT find ZLIB (missing: ZLIB_LIBRARY ZLIB_INCLUDE_DIR)
  • Ubuntu20.04编译安装Opencv4.5.5
  • Linux如何查看内核版本并安装内核头文件linux-headers-generic
  • Linux中如何安装特定的gcc版本
  • Ubuntu 20.04 源码编译Paddle2.2.2
  • Ubuntu20.04源码编译PaddleOCR2.4
  • OpenCV导入时报错 ImportError: numpy.core.multiarray failed to import
  • OpenVINO2022.1+open_model_zoo例程的编译与使用
  • OpenCV cv::plugin::impl::DynamicLib::libraryLoad load ..opencv_core_parallel_tbb45 =>FAILED
  • OpenVINO之text_detection_demo
  • Paddle在windows10+vs2019上的源码编译(失败)
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • Android优雅地处理按钮重复点击
  • Angular 响应式表单 基础例子
  • exports和module.exports
  • Flex布局到底解决了什么问题
  • Git初体验
  • Hexo+码云+git快速搭建免费的静态Blog
  • Java读取Properties文件的六种方法
  • java正则表式的使用
  • Js基础——数据类型之Null和Undefined
  • k8s 面向应用开发者的基础命令
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • SpiderData 2019年2月16日 DApp数据排行榜
  • web标准化(下)
  • 思维导图—你不知道的JavaScript中卷
  • 提醒我喝水chrome插件开发指南
  • 微信小程序开发问题汇总
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (4)STL算法之比较
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (solr系列:一)使用tomcat部署solr服务
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .net经典笔试题
  • .NET企业级应用架构设计系列之应用服务器
  • /proc/stat文件详解(翻译)
  • @staticmethod和@classmethod的作用与区别
  • [ 转载 ] SharePoint 资料
  • [C++] 统计程序耗时
  • [codevs 1515]跳 【解题报告】