本文目的为了能够实现多设备之间ROS通信功能,辅助以ROS为基础的小车、机器人等的开发,有bug地方还请指正,共同学习
配置流程
所有的ros主控都处于同一个网络下;如果是多个设备过程也相似,选一个作为主机,其他全都是从机;下面以两台设备为例,一台是虚拟机(ubuntu),一台是机器人小车Transbot (jetson nano)。
在两台设备上进行ssh服务器的安装;装上chrony包,用于实现同步:
sudo apt-get install chrony openssh-server
查看两台设备的ip信息和主机名:
命令 : ifconfig 和 hostname
修改/etc文件夹下的hosts文件 主机 从机都得一样:
sudo chmod a+w /etc/hosts
sudo vim /etc/hosts
将两台设备的IP和主机名分别添加到两台设备的hosts文件下,绑定用户;前面的IP,后面的是名字,尽量对齐 ;
修改完以后,在两台设备上都输入下列命令重启以下网络,实现两台设备间通信:
sudo /etc/init.d/networking restart
安装完以后,确认服务器是否已经启动:
ps -e|grep ssh
最好分别 ping一下,看看通信是否正常
ping 设备的主机名
修改~/.bashrc文件
sudo vim ~/.bashrc
把这段加到主机中的 ~/.bashrc 文件中
export ROS_HOSTNAME=本机用户名
export ROS_MASTER_URI=http://主机用户名:11311
同理在从机上这个文件中加上这段:
export ROS_HOSTNAME=本机用户名
export ROS_MASTER_URI=http://主机用户名:11311
假如以jetson nano为主机。 #注释的打开
设置好IP后,最好刷新一下,就可以通信了。
source ~/.bashrc
效果演示
主机 Transbot(jetson nano)
Roscore
从机 Ubuntu(虚拟机):
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key
问题与解决方案
1,多机通讯 Ping 不通
解决办法: 虚拟机需要采用桥接模式
2,使用前检查jetson nano IP 地址,如果变化了,需要修改的地方
- VNC
- 主从机器的
sudo gedit /etc/hosts 修改成新ip
sudo /etc/init.d/networking restart 重启通信
sudo gedit ~/.bashrc 修改成新ip
source ~/.bashrc
3,虚拟机网络未托管
Ubuntu18.04连不网 报"有线连接未托管" - 不明白就去明白 - 博客园https://www.cnblogs.com/Rainingday/p/12392097.html