两个或者多个ros之间的信息通信
- 【必做】
时间同步sudo apt-get install chrony
1、【问题:】
E: 无法获得锁 /var/lib/apt/lists/lock - open (11: 资源暂时不可用)
E: 无法对目录 /var/lib/apt/lists/ 加锁
解决:
sudo rm /var/lib/apt/lists/lock
2、【知识】
ROS分布式多机通信
ROS是一种分布式软件框架,节点之间通过松耦合的方式进行组合,在很多应用场景下,节点可以运行在不同的计算平台上,通过Topic、Service进行通信。但是“一山不容二虎”,ROS只允许存在一个Master,在多机系统中Master只能运行在一个机器上,其他机器需要通过 ssh 的方式和Master取得联系。所以在多级ROS系统中需要一些配置。
我们以两台虚拟计算机为例,介绍分布式多机通信的配置步骤,其中计算机wlzxzq作为主机运行Master,计算机bei作为从机运行节点。
- 通过ifconfig查看计算机ip
Master计算机wlzxzq:192.168.161.132
从机计算机bei:192.168.161.132
- 修改~/.bashrc文件
Master计算机wlzxzq:192.168.161.132
# Set ROS Kinetic【以下是3个工作空间】
source /opt/ros/kinetic/setup.bash
source ~/catkin_ws/devel/setup.bash
source ~/ros_tutorials/devel/setup.bash
# Set ROS alias command
alias cw='cd ~/catkin_ws'
alias cs='cd ~/catkin_ws/src'
alias cm='cd ~/catkin_ws && catkin_make'
# Set ROS Network
export ROS_HOSTNAME=192.168.161.132
#ros主机IP 如机器人
# export ROS_MASTER_URI=http://192.168.161.132:11311 可以放开注释
#PC IP
从机计算机bei:192.168.161.132
# Set ROS Network
export ROS_HOSTNAME=192.168.161.133
export ROS_MASTER_URI=http://192.168.161.132:11311
# Set ROS alias command
alias cw='cd ~/catkin_ws'
alias cs='cd ~/catkin_ws/src'
alias cm='cd ~/catkin_ws && catkin_make'
source /opt/ros/kinetic/setup.bash
source ~/catkin_ws/devel/setup.bash
- 测试通信
A:Master计算机wlzxzq:192.168.161.132
B:从机计算机bei:192.168.161.132
重新打开terminor
A: ping 192.168.161.132
B: ping 192.168.161.133
正常通信。
①在A中打开我们的roscore
②在A中使用例程ros_tutorials下面的talk
rosrun roscpp_tutorial talk
③在B中使用例程listen
rosrun roscpp_tutorial listen
- ssh通信
①Master: sudo apt-get install openssh-server
②从机: sudo apt-get install openssh-client
③开启服务: sudo service ssh start
修改配置:sudo gedit /etc/ssh/sshd_config
把配置文件中的"PermitRootLogin without-password"加一个"#"号注释掉,再增加一句"PermitRootLogin yes",保存文件,是为了允许root用户登录。
④ ssh bei@192.168.194.133
⑤ sudo gedit /etc/hosts