Please ask about problems and questions regarding this tutorial on answers.ros.org. Don't forget to include in your question the link to this page, the versions of your OS & ROS, and also add appropriate tags. |
网络配置
Description: 配置好XBot-U与你电脑之间的网络连接Tutorial Level: BEGINNER
您的个人计算机通常可以通过“SSH连接”和“ROS主从机配置”两种方式控制XBot机器人,这两种方法各有用途。
“SSH连接”是linux系统的功能,其安装和使用就不一一详述。
“ROS主从机配置”即为ros计算机分布式主从通信,是需要安装ros环境之后才能配置。
两者在命令的层级上就不一样,ssh是linux的底层通信,ros主从机通信是ros主机和从机通过订阅话题和服务实现的,其使用的前提是主机的ros必须启动。
关于两者使用的区别,用户可以自己去尝试和查询资料。关于其他的ROS网络的配置教程,请参考ROS官方wiki社区
不管何种方式连接机器人,操作机器人的第一步就是开机。启动机器人后,机器人会启动随身WIFI。请在PC上链接WIFI热点:xbot-network-*,其中后面的*是机器人的网络唯一编号(编号在机器人底盘上二维码处可见),初始密码:xbot1234。
通过SSH远程连接到机器人
SSH是一种较为常用的远程登录方式,基础格式为:ssh <主机用户>@<主机IP地址>
想通过个人PC远程控制主机,那么我们需要在个人PC上打开一个终端,并输入:
$ ssh xbot@192.168.8.101
@符号之前是主机的用户名,@符号之后是主机的IP地址。按照机器人出厂设置,用户名默认为xbot,主机IP地址为192.168.8.101
接着,终端会提示输入密码:
xbot@192.168.8.101's password:
此时,需要输入xbot的主机密码即可。这里密码输入后不会有任何显示,输入完成直接按回车键即可。
ssh远程登录成功后,可以看到如上图所示的信息。尤其最为关键的是看最下面一行的绿色字体部分(表示“用户@机器名”),已经由个人PC电脑的用户名和机器名(xj@xj-Thinkpad-T470p)变成主机的用户名和机器名(xbot@xbot),这是最为重要的ssh登录成功的验证手段。
以上方式为最简单的ssh登录,每次新打开一个终端,都需要输入该命令和密码。为了简化操作,您还可以通过配置ssh的公钥私钥来设置免密码登录。有兴趣可自行了解。
此外,在连接机器人的过程中,我们有时会需要打开图形界面,此时我们可以通过-X(X大写)打开图形界面:
$ ssh -X xbot@192.168.8.101
个人PC通过ssh连接机器人主机成功之后,就可以像在主机上一样,键入任何命令来操作机器人了。
ROS主从环境配置
ROS的主从环境其实是一种分布式通信方式。这里我们讲述ROS主从环境的配置步骤:
IP与Hostname
启动机器人后,机器人会启动随身WIFI,在PC上链接机器人WIFI。
首先,使用下面的命令,分别在XBot与您PC上执行,获取xbot主机和您PC的IP地址:
$ ifconfig
XBot-U机器人主机的默认IP已在出厂时设定为192.168.8.101。
类似的,您的PC端也会显示出一个IP地址,应注意,在查看PC端IP时,请务必保证您的PC已经连接上了XBot机器人的wifi,同时,为避免以后每次都要重新查看ip,可先配置固定IP。
接下来。我们使用下面指令,分别来获取您PC与XBot的hostname。
$ hostname
nuc为xbot的hostname,您也可以直接查看终端标题栏“@”后面的内容来获得hostname。(说明:不同的机器人可能设置存在差异,请按照查询得到的hostname设置)
=== 修改host文件===
host文件位于etc文件夹下,修改hosts文件的目的是将两电脑的ip和主机名绑定,使两台电脑可以通过hostname就能很方便的找到对方。在您修改host文件之前,直接ping 对方主机名,是无法解析的。当然,即便不配置,您也可以直接ping 对方的IP地址。但为了方便后续的操作,我们还是建议将IP与hostname绑定起来。
由于电脑上的 hosts文件是只读文件,直接修改后是保存不了的。因此先用root方式对该文件属性进行修改。此时我们需要用到gksu软件,如果您的电脑还没有安装gksu,请先连接外网,并使用下面的命令安装gtsu:
$ sudo apt-get install gksu
安装时可能会提示输入密码以获取权限,请注意键入密码时终端上并不会显示。
安装完gksu后,我们使用如下命令打开gksu文件,并对其进行修改:
$ gksu gedit /etc/hosts
以PC端为例进行说明,打开的hosts文件如下:
可以看到,在hosts文件内开头两行,已经绑定了两个IP,因此我们从第三行开始,插入刚刚查到的两组的IP地址和hostname.
应注意,IP与hostname中间要用tab键隔开,而不能使用空格。
保存修改后,退出host文件,使用下方命令重启网络:
$ sudo /etc/init.d/networking restart
XBot端的设置过程与PC端相同,注意不要忘记重启网络。 == PC端与XBot-U端通信测试 ===
在开始配置主从关系之前,先测试一下两台机器之间是否能够正常通信。在这里可以使用ping指令,首先测试从XBot端到PC端的连通。在XBot的终端里输入:
$ ping wxy-TM1705
可以看到:
此处wxy-TM1705是演示用PC端的hostname,您可以换成您之前设置的PC端hostname。相似的,从PC端到XBot端测试时,在PC端输入。
$ ping nuc
如下图:
其中,nuc为Xbot机器人的hostname。
全部连通后,可以开始配置主从关系。
配置主从关系
在这里,我们设置Xbot为主机,PC端为从机。
首先在XBot的终端上输入:
$ gedit ~/.bashrc
该指令打开.bashrc文件,如果文件中存在之前的配置,我们先将其注释掉,然后加入:export ROS_MASTER_URI=http://nuc:11311 语句,保存退出,并在终端上输入:
$ source ~/.bashrc
XBot上配置完毕。
在PC端上,我们也使用同样命令打开.bashrc文件,如果存在之前的配置,则先将其注释掉。,再加入:export ROS_MASTER_URI=http://nuc:11311 语句。保存退出后,在终端输入:
$ source ~/.bashrc
PC端配置完毕。
此时,主从关系已经全部配置完毕。我们可在XBot端启动ROS节点,然后再PC端上使用rostopic list查看相关话题,如果能够看到终端返回相关话题,则说明配置成功。返回的topic(部分)见下图:
主从关系测试
在这里我们使用ROS自带的小乌龟来测试一下主从关系配置后情况。
首先。我们在XBot端(主机端)启动ROS Master与乌龟仿真节点,在终端输入:
$ rosrun turtlesim turtlesim_node
然后,我们在PC端(从机端)发布一个速度控制的指令:
$ rostopic pub -r 10 /turtle1/cmd_vel geometry_msgs/Twist "linear: x: 0.5 y: 0.0 z: 0.0 angular: x: 0.0 y: 0.0 z: 0.5"
上述指令在输入时,可以使用Tab键进行命令补全,尤其是"linear之后参数部分,在输入"之后,建议用Tab键补全,然 后移动光标修改相关参数。参数修改完成后回车即可执行命令。
此时我们可以看到主机上的海龟模拟器中的海龟在做圆周运动,说明主从关系配置成功,测试完毕。
需要注意的是,配置好主从关系后,是要共用主机端上的Master,因此首先主机上的master需要启动。在从机端可以查看到主机端上的节点与话题。除了以上网络配置,ros的主从机配置还需要配置从机的工作空间环境(catkin_ws),即您的个人计算机上下载和编译XBot的功能包,并配置工作空间。
多个ROS设备联机配置也可参考ROS多机联动配置教程。
在从机上部署xbot功能包
如上一节中所说,为了能够在从机上控制机器人,我们需要在您的个人计算机上部署与XBot机器人相同的工作空间。 在PC上打开终端,新建工作空间caktin_ws并对它初始化
$ mkdir -p catkin_ws/src # cd catkin_ws $ catkin_make
初始化完成后,下载解压或者克隆xbot功能包到catkin_ws/src下
$ cd ~/catkin_ws/src $ git clone https://github.com/DroidAITech/xbot.git
接着,我们要安装所有与功能包相关的依赖。
$ cd ~/catkin_ws $ rosdep install --from-paths src --ignore-src --rosdistro=kinetic -y
最后编译工作空间。
$ cd ~/catkin_ws $ catkin_make catkin_make有时候如果我们需要单独编译某个功能包,我们也可以使用指令: $ catkin_make --pkg package_name
其中,package_name是要单独编译的功能包的名字。当您直接使用catkin_make指令不能通过编译时,可以使用该指令来排查不能通过编译的功能包。 在xbot系列包中,当直接catkin_make出现问题的时候,请按照以下顺序编译:
$ catkin_make --pkg xbot_msgs $ catkin_make --pkg xbot_talker $ catkin_make --pkg xbot_face $ catkin_make --pkg xbot_navi $ catkin_make