admin管理员组

文章数量:1632066

这个主要涉及.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,就要关闭两机通信,可注释调上面这两个设置。

本文结束

本文标签: 小车机电机器人主机通信