[基于ROS构建移动机器人]第二篇:设置ROS主从网络和远程开发环境

1. ROS主从网络设置

为了调试的方便,我们把ROS主节点运行在PC端,执行建图、定位、导航的节点运行在导航计算机上。这时候 PC机和导航计算机组成了一个主、从网络。PC机是主机,导航计算机是从机。

(1) 首先PC机和导航计算机要连接到同一个wifi网络上,并分别设置固定IP。

以我的设置为例:

PC端的系统用户名:lili计算机名:remotePC1 计算机IP:192.168.1.254导航计算机(树莓派3B plus)端的系统用户名:lilibot 计算机名:robot001, 树莓派ip:192.168.1.101(2)树莓派系统与pc机系统的时间同步将设置好树莓派系统和PC机系统 分别安装chrony $ sudo apt-get install chrony 分别安装ntpdate $ sudo apt-get install ntpdate 分别同步时间 $ sudo ntpdate ntp.ubuntu.com 检测时间是否同步 $ date

(3)配置PC机和树莓派的ROS网络

目的是将树莓派作为从机,PC机设置为主机;使用ifconfig命令,查看树莓派和PC机的IP,记为:IP_Robot 和 IP_PC;使用hostname命令,分别查看系统名称,分别记为:Name_Robot 和 Name_PC。设置树莓派: 编辑 ~/.bashrc文件,增加以下两行,将PC机IP设置为主机 export ROS_MASTER_URI=:11311 export ROS_HOSTNAME=IP_Robot

编辑/etc/hosts文件,增加以下两行

IP_RobotName_Robot IP_PC NamC_PC

以上ip和hostname之间不是空格,要用Tab键输入。

设置PC:编辑 ~/.bashrc文件,增加以下两行,仍然是将PC机IP设置为主机export ROS_MASTER_URI=:11311 export ROS_HOSTNAME=IP_PC

编辑/etc/hosts文件,增加以下两行

IP_RobotName_Robot IP_PC NamC_PC

重启PC机和树莓派系统后,ROS网络设置生效。这时候运行在树莓派上的节点,也可以在PC端通过 rostopic 命令来查看。

2. ssh免密登录树莓派

ssh是Secure Shell的缩写,是可靠安全的,用于远程登录会话的协议。

在PC机的终端输入以下命令可以登录树莓派,我预先设置的树莓派ip是192.168.1.101,用户名是lilibot:

ssh [email protected]

提示输入密码,即可登入系统。接下来设置免密登录。

* 配置SSH公钥——在PC端运行

ssh-keygen

* 一直回车选择默认选项,会在~/.ssh 目录下生成id_rsa 和 id_rsa.pub 两个文件。将id_rsa.pub文件远程拷贝到树莓派系统中。

scp ~/.ssh/id_rsa.pub [email protected]:/home/lilibot

* 配置导航计算机——远程登录树莓派系统

ssh [email protected] cat id_rsa.pub >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys

将 id_rsa.pub 的文件内容追加写入到树莓派系统的~/.ssh/authorized_keys 文件,并修改文件权限。这样配置完成后,远程ssh登录树莓派系统,无需密码。

3. ROS组网、ssh免密登录测试ssh免密登录情况如下图所示:

ROS组网测试:

首先在PC机终端运行ros主节点,即roscore

而后在树莓派终端查看rostopic,可以看到:

在树莓派上发布了cmd_vel消息,10hz,x方向线速度和z方向角速度为1;

在pc端也可以看得到cmd_vel消息的内容,说明我们之前的ROS主从网络设置是正确的。

4. 设置roboware软件,实现远程代码部署和调试

* 修改树莓派系统/etc/profile

ssh远程登录以后,执行下面操作

sudo su echo "source /opt/ros/kinetic/setup.bash" >> /etc/profile

将ros环境变量信息写入/etc/profile文件

* 远程参数配置

首先在树莓派系统中建立工作空间,用于从PC上远程部署树莓派系统的ros代码

mkdir -p~/catkin_ws/src cd ~/catkin_ws wstool init src

启动 RoboWare Studio 后,点击“远程参数配置”按钮,依次配置远程计算机 IP 地址、

远程计算机用户名、本地计算机密钥文件、远程计算机部署路径参数。 这部分的配置,源自roboware studio 使用手册中的远程调试部分。

5. 测试远程代码部署

我们在PC机上安装了ubuntu、ros,但是还没有建立ROS工作空间。接下来我们先以杉川delta2b激光雷达的ros驱动为例子。将其从PC端,远程部署到树莓派端。

* 在PC机建立工作空间catkin_ws

mkdir -p ~/catkin_ws/src cd ~/catkin_ws/ catkin_make

将雷达厂商提供的ROS驱动拷贝到我们工作空间下的src目录:

我们打开roboware软件,通过他将代码部署到树莓派上。从那个绿色的小锤子旁边的下拉菜单选择 remote deploy,点击锤子执行。 看到右下角输出栏里的结果“Deploy Finished"。即完成代码部署。

同样,从那个绿色的小锤子旁边的下拉菜单选择 remote debug,点击锤子执行。 等待执行结束,即完成了树莓派系统上的ROS编译。

接下来,在树莓派终端,编辑~/.bashrc文件,增加以下内容, 激活当前的工作空间:

source /home/lilibot/catkin_ws/devel/setup.bash

接下来,我们可以在树莓派端,测试激光雷达了。 将delta2b雷达通过usb线接入树莓派。可以看到雷达转动起来。而后在树莓派终端运行以下命令,这个launch文件是官方提供的ros包里自带的。树莓派终端显示重复的“Receive Lidar count 608!”表明雷达启动,并且工作正常。

打开PC机终端,运行rviz软件。添加激光雷达数据。可以看到激光雷达扫描到的环境轮廓。

在PC机上看到的激光雷达数据

好了,到此为止,我们已经建立好了树莓派、PC机的软件开发环境,远程调试环境。

雷达传感器也正常工作了。

下一次,我们将构建若干ROS节点,驱动小车运动,计算里程信息。