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

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

JetBot ROS AI Kit 初级教程目录

前言

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

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

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

【注意:添加文本后需要运行source ~/.bashrc 或者新开终端环境变量才能生效】

机器人

  • 机器人端,在~/.bashrc 文件末尾添加如下文本,如果实际hostname为其他名称则替换nano-4gb-jp45
export ROS_MASTER_URI=http://nano-4gb-jp45:11311    #将机器人设置为主机
export ROS_HOSTNAME=nano-4gb-jp45

虚拟机

  • 虚拟机端,在~/.bashrc 文件末尾添加如下文本,ROS_MASTER_URI 设置指向机器人作为主机,ROS_HOSTNAME设置为虚拟机hostname
export ROS_MASTER_URI=http://nano-4gb-jp45:11311   #指向机器人主机
export ROS_HOSTNAME=ubuntu

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

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

机器人

  • 在机器人上打开终端输入以下命令,将Ubuntu虚拟机的ip地址和主机名添加到jetson nano的 /etc/hosts 文件中,密码是:jetbot
  • 【 编辑器可用nano ,也可以使用vim,根据个人习惯选择文本编辑器】
sudo nano /etc/hosts    
  • 如下图所示,将127.0.1.1 nano-4gb-jp45.localdimain nano-4gb-jp45下面的那行修改为ubuntu虚拟机的ip和hostname【如果这行被注释掉了需要取消注释】
Jetbot Image05.png
Jetbot image06.png
  • 如果 nano 命令无法执行,请输入以下命令安装nano编辑器 ,安装完之后可以再次执行命令:sudo nano /etc/hosts
sudo apt install nano     #安装nano编辑器   
  • 修改后,按Ctrl+x,退出y, 回车,保存变更并退出

虚拟机

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

步骤5、检验ROS多机通讯

  • SSH连接机器人打开终端,输入以下命令启动机器人主节点
roscore      #启动机器人主节点  
Jetbot image09.png

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

  • 打开Ubuntu虚拟机终端,在终端输入以下命令
rostopic list   
  • 如下正常显示这两个节点大概率是可以正常联机通讯了。
Jetbot image001.png