JetRacer ROS AI Kit 教程四、配置多机通讯

来自Waveshare Wiki
跳转至: 导航搜索

JetRacer ROS AI Kit 初级教程目录

前言

  • 在配置多机通讯前需要理解下面三个系统:
    • PC主机:一般为我们常用的电脑,系统一般为Windows系统,主要用来SSH远程登录Jetson Nano启动机器人控制节点。
    • Ubuntu虚拟机:在我们的PC主机上采用VMware软件安装的Ubuntu系统虚拟机,主要实现ROS图形化显示,远程控制机器人,更加直观方便。
    • Jetson Nano机器人:这个就是我们的小车,采用Jetson Nano主控,也为Ubuntu系统,主要为实现机器人摄像头,激光雷达,底盘控制等各种节点。
  • Jetson Nano机器人安装ROS机器人系统,设置为主机。Ubuntu虚拟机也安装ROS机器人系统内,设置为从机。
  • 【注意:我们需要确保上面三个系统连接同一个局域网,IP地址为同一网段,否则不能正常通讯】
  • 【注意:之后的教程中默认虚拟机指的为Ubuntu虚拟机,机器人指Jetson Nano机器人】

步骤1、设置变量实现多机通讯

  • 在之前的教程中,我们已经支持机器人和虚拟机的IP地址和主机名称,如果不清楚可以运行如下命令查看
ifconfig        #获取虚拟机ip地址
hostname        #获取虚拟机主机名
  • 使用我们的镜像则机器人主机名为nano-4gb-jp451,虚拟机主机名为ubuntu
  • 我们需要分别给机器人和虚拟机添加环境变量,将机器人设置为主机。虚拟机设置为从机。
  • 注意:使用我们配置好的镜像已经添加了环境变量,不需要再添加;该步骤是您在自行配置镜像时需要添加的。
    • ROS_MASTER_URI 变为指向ROS主机,独立运行roscore主节点。
    • ROS_HOSTNAME 变量为当前ROS主机名称
  • 【 编辑器可用nano ,也可以使用vim,根据个人习惯选择文本编辑器】
sudo apt install nano     #安装nano编辑器   

机器人

  • 机器人端,在~/.bashrc 文件末尾添加如下文本,如果实际hostname为其他名称则替换nano-4gb-jp451
sudo nano ~/.bashrc
在末尾添加:
export ROS_MASTER_URI=http://nano-4gb-jp451:11311    #将机器人设置为主机
export ROS_HOSTNAME=nano-4gb-jp451
添加完成后运行如下指令生效:
source ~/.bashrc

虚拟机

  • 虚拟机端,在~/.bashrc 文件末尾添加如下文本,ROS_MASTER_URI 设置指向机器人作为主机,ROS_HOSTNAME设置为虚拟机hostname
sudo nano ~/.bashrc
在末尾添加:
export ROS_MASTER_URI=http://nano-4gb-jp451:11311   #指向机器人主机
export ROS_HOSTNAME=ubuntu
添加完成后运行如下指令生效:
source ~/.bashrc

步骤2、配置hosts文件,指明IP地址

  • 正常情况下,添加环境变量后ROS应该是可以正常联机通讯的了,如果局域网内有多个设备名称一样的,有可能出现不能正常连接或者可以正常查看话题但是不能接收话题信息等问题。此时需要添加hosts指定地址。
  • 我们需要分别给机器人和虚拟机添加hosts文件设置,以下设置请根据自己的实际IP地址和主机名填写。

机器人

  • 在机器人上打开终端输入以下命令,将Ubuntu虚拟机的ip地址和主机名添加到Jetson Nano的 /etc/hosts 文件中,密码是:jetson
sudo nano /etc/hosts    
  • 如下图所示,将127.0.1.1 nano-4gb-jp451.localdimain nano-4gb-jp451下面的那行修改为Ubuntu虚拟机的IP地址和hostname【如果这行被注释掉了需要取消注释】
    JetRacer ROS 13.png
  • 修改后,按Ctrl+x,退出y, 回车,保存变更并退出

虚拟机

  • 在虚拟机上打开终端输入以下命令,打开/etc/hosts 文件中添加机器人IP地址
sudo nano /etc/hosts    
  • 如下图所示,将 127.0.1.1 ubuntu下面那行要改为Jetson Nano的实际的IP地址和hostname,如果这行被注释掉了需要取消注释。
JetRacer ROS 19.png
  • 修改后,按Ctrl+x,退出y, 回车,保存变更并退出

步骤3、检验ROS多机通讯

  • SSH连接机器人打开终端,输入以下命令启动机器人主节点
roscore      #启动机器人主节点  
JetRacer ROS-roscore.jpg

【下述 roslaunch 命令也会自动启动主节点,但这里单独启动主节点是为了一直都保持与虚拟机连接,否则关闭底盘节点时会自动关闭主节点,从而导致虚拟机失联】

  • 打开Ubuntu虚拟机终端,在终端输入以下命令
rostopic list   
  • 如下正常显示这两个节点大概率是可以正常联机通讯了。
JetRacer ROS 15.png
  • 机器人端保存主节点启动状态不要关闭,新开一个终端运行示例接收节点
rosrun rospy_tutorials listener
  • 虚拟机端运行如下命令启动示例发送节点
rosrun rospy_tutorials talker
JetRacer ROS 17.png
  • 虚拟机发送程序后。机器人这边将接收到发送的数据。


JetRacer ROS-listen.jpg
至此,多机通讯正常,您也可以交换机器人和虚拟机的命令测试从机器人端发送话题给虚拟机。