1. 远程遥控机器人

什么是远程,为什么需要远程?

远程指的是用远程的计算机来控制机器人,在HandsFree Stone_v2版本和之前的机器人都没有搭载显示屏,不方面交互,这时候可以使用远程PC来和机器人上的PC共同控制机器人。 HandsFree Stone_v3和之后版本的机器人已经搭载了显示屏,相对方面很多,不过远程功能在很多时候依旧方便开发,所以,学好远程功能的使用十分必要。

上一个教程中,我们利用机器人端的工控机实现了对机器人的控制。这一节我们将通过远程计算机对机器人进行控制,我们还可以验证远程计算机配置的ROS环境和HandsFree的环境是否配置正确,机器人端工控机和远程计算机通讯是否正常等问题。

1.1. 远程计算机环境配置

远程计算机的系统版本和ROS版本必须和机器人上的工控机一致,否则会出现版本不统一的通信问题。

Stone V2和之前的机器人默认安装Ubuntu 14.04, Stone V3和之后的版本默认安装16.04, 然后按照环境配置教程配置HandsFree运行需要的环境,如果是在虚拟机中安装则设置网络为桥接模式

1.2. 工控机与远程计算机通信

打开机器人身上的工控机和用户手上远程计算机 步骤如下:

  • 1 使工控机和笔记本电脑必须处于同一局域网下(手机热点也行)
  • 2 然后获取工控机的IP,获取IP方法请参照常见问题及解答
  • 3 在远程计算机终端中登录工控机,@后面是工控机的IP地址
ssh -X handsfree@192.186.x.x

输入密码并登录成功后会显示大致如下结果:

Welcome to Ubuntu 14.04.5 LTS (GNU/Linux 4.4.0-31-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

Last login: Tue Jan 30 21:36:25 2018 from 10.13.61.17
  • 4 在工控机端,使用同样的方法,登录到远程计算机
ssh -X user_name@192.186.y.y

如果也没有错误产生,说明二者可以正常通信,可以进行下一步

1.3. 远程设置

上一步中,我们已经可以通过局域网互相访问,那么只需要进行下面的设置,ROS程序就可以在工控机和远程计算机上分别运行。遥控机器人就是通过机器人抽象节点在机器人端的工控机上运行,遥控节点在远程计算机上运行来实现的。

Tips : IP_OF_ROBOT_PC 是工控机的IP,IP_OF_REMOTE_PC是远程计算机的IP。

  • 在远程计算机中添加下面两行到~/.bashrc文件
export ROS_MASTER_URI=http://IP_OF_ROBOT_PC:11311   
export ROS_HOSTNAME=IP_OF_REMOTE_PC
  • 在机器人端工控机上添加下面两行到~/.bashrc文件,如图中最后两行所示
export ROS_MASTER_URI=http://IP_OF_ROBOT_PC:11311   
export ROS_HOSTNAME=IP_OF_ROBOT_PC

1.4. 远程遥控机器人

  • 1 启动机器人

将工控机的USB口和机器人的航空插座通过USB转航空插头的线将两者相连,然后给机器人上电。
此时可以听到主控的一声蜂鸣器鸣叫声。确保工控机与机器人连接正常,然后开始下一步操作。

  • 2 启动机器人抽象节点
    在机器人端工控机上打开一个终端,并运行:
roslaunch handsfree_hw handsfree_hw.launch

正常情况下,会显示:

auto-starting new master
process[master]: started with pid [9562]
ROS_MASTER_URI=http://Robot:11311

setting /run_id to ffa41cce-05bd-11e8-8df0-001e64f02337
process[rosout-1]: started with pid [9575]
started core service [/rosout]
process[handsfree_hw_node-2]: started with pid [9585]
process[mobile_base/controller_spawner-3]: started with pid [9589]
process[robot_state_publisher-4]: started with pid [9591]
[ERROR] [1517317423.863958024]: hf link initialized failed, please check the hardware
[INFO] [WallTime: 1517317424.295263] Controller Spawner: Waiting for service controller_manager/load_controller
[INFO] [WallTime: 1517317424.298319] Controller Spawner: Waiting for service controller_manager/switch_controller
[INFO] [WallTime: 1517317424.301498] Controller Spawner: Waiting for service controller_manager/unload_controller
[INFO] [WallTime: 1517317424.304670] Loading controller: joint_state_controller
[INFO] [WallTime: 1517317424.351596] Loading controller: servo1_position_controller
[INFO] [WallTime: 1517317424.399306] Loading controller: servo2_position_controller
[INFO] [WallTime: 1517317424.419282] Loading controller: mobile_base_controller
[INFO] [WallTime: 1517317424.469234] Controller Spawner: Loaded controllers: joint_state_controller, servo1_position_controller, servo2_position_controller, mobile_base_controller
[INFO] [WallTime: 1517317424.479183] Started controllers: joint_state_controller, servo1_position_controller, servo2_position_controller, mobile_base_controller

该条命令打开了机器人抽象节点,该节点的作用是完成PC与机器人底层的通讯和相关指令与数据传输。运行结果如上图,若出现timeout的问题,则说明该节点运行不成功。失败请参考常见问题及解答

  • 3 打开遥控节点
    在远程计算机打开一个终端,并运行:
roslaunch handsfree_hw keyboard_teleop.launch

正常情况下,会显示:

ROS_MASTER_URI=http://Robot:11311

core service [/rosout] found
process[turtlebot_teleop_keyboard-1]: started with pid [9903]

Control Your Turtlebot!
---------------------------
Moving around:
   u    i    o
   j    k    l
   m    ,    .

q/z : increase/decrease max speeds by 10%
w/x : increase/decrease only linear speed by 10%
e/c : increase/decrease only angular speed by 10%
space key, k : force stop
anything else : stop smoothly

CTRL-C to quit

currently:    speed 0.2    turn 1

该条命令打开键盘控制节点,按照终端中的提示,我们就可以利用键盘控制机器人运动。如果一切正常的话,就表示我们就可以在远程计算机上共享机器人端工控机上ROS的信息了。
到此,完成ROS控制机器人功能的实现,如果一切正常的话,说明远程计算机设置没有问题,与机器人的通信也没有问题,接下来就可以进行更高级功能的测试了。

1.5. 远程的其它介绍

如果只是为了遥控,只用ssh就够了,ROS的远程是把两台PC的通信连接起来,所有topic可以在两台PC同时操作,更常用的是,我们可以把rviz,rqt等ros工具运行在远程计算机上,把算法运行在工控机上。

Copyright © 深圳朝闻道智能信息科技有限公司 2018 all right reserved,powered by Gitbook该文件修订时间: 2019-01-30 19:27:27

results matching ""

    No results matching ""