导航发送目标点

本章编写python程序,通过rosnavigation接口向move_base导航系统发送goal,让机器人导航到目标点。
我们让机器人导航到目标点,就需要先确定目标点,然后将目标点告诉机器人。

确定目标坐标点

首先我们需要学会一个技巧,通过rviz获取地图,我们通过仿真方式演示一下怎么获取目标点的坐标。

打开终端,输入下面命令,开启一个仿真节点

roslaunch handsfree_2dnav navigation.launch

正常情况下,会打开rviz可视化界面,并呈现出地图。下图中的红色包围的地方是机器人所在位置。
rviz-room-stage

  • 2D Pose Estimate可以手动标定机器人初始位姿,调整rviz中机器人的位置。
  • 2D Nav Goal可以设置一个点,让机器人导航过去。
  • Publish Point可以让我们在左下角查看到地图上的坐标点。用法,只需要鼠标点击Publish Point,然后在地图上移动鼠标就可以看到对应的点了。这个方括号有三个值[11.7,27.9,0.00768],前两个值对应坐标点的 x 和 y 。

代码说明

这里有三份代码,分别是set_goal.pyset_tow_goal.pyset_four_goals.py

  • set_goal.py设置一个点,让机器人导航到这个点
  • set_tow_goal.py设置两个点,让机器人导航到这两个点
  • set_four_goals.py设置四个点,让机器人导航到四个点

这里主要说一下发送goal的函数

self.move_base.send_goal(goal,self.donecb,self.activecb,self.feedbackcb)

第一个参数是要发送的目标点后面三个为回调函数,分别是:

  1. 当机器人到达的回调函数。
  2. 当机器人启动的回调函数。
  3. 当机器人以一定频率返回信息的回调函数

因为move_base它是以action来传递消息,所以才会用到如此多的回调函数。handsfree_tutorials/script/3_navigation目录下存放的是我们的代码。

测试自主巡逻脚本

本次我们以set_goal.py为例,我们可以先使用仿真来模拟一下,然后在使用机器人和之前通过雷达建好的地图来实际操作一下。

通过仿真方式测试脚本

  1. 关闭之前所有终端,打开一个新的终端,开启仿真节点

      roslaunch handsfree_2dnav navigation.launch
    

    正常情况下,会打开可视化界面,呈现出地图和机器人。
    rviz-0

  2. 打开第二个终端,通过gedit打开set_goal.py文件,我们需要改几个参数。

     gedit ~/handsfree/handsfree_ros_ws/src/handsfree/handsfree_tutorials/script/3_navigation/set_goal.py
    

    我们只需要改两个值就可以了,下图是没有修改的
    goal-before

    下图是修改后的,用的是确定坐标点rviz可视化图中左下角的坐标。
    goal-after

  3. 打开第三个终端,运行python文件

     rosrun handsfree_tutorials set_goal.py
    

    正常情况下,会显示:
    set_goals

    同时在可视化界面你会看到机器人在沿着一条红色的线在移动。
    rviz-move

  4. 你还可以运行launch文件,不过在此之前要对这个launch文件进行修改,在之前的第二个终端输入

     gedit ~/handsfree/handsfree_ros_ws/src/handsfree/handsfree_tutorials/script/3_navigation/launch/set_goal.launch
    

    对里面的 value 的值进行修改:
    launch-after

    value 的值和当前机器人的位置坐标不要一样,不然机器人不会移动。

  5. 在之前的第三个终端运行改后的set_goal.launch 文件

     roslaunch handsfree_tutorials set_goal.launch
    

    和运行python的结果很像。
    launch-set-goals

机器人实物测试脚本

按照初级教程的自主导航实验,运行相关节点。

  1. 打开终端,开启机器人导航节点

     roslaunch handsfree_2dnav navigation.launch sim:=false map_name:=my_map
    
  2. 运行python文件,导航到目标点

    运行脚本之前,请参考本节的选取目标点的技巧,修改脚本中的目标点的坐标:

     rosrun handsfree_tutorials set_goal.py
    

    如果一切正常的话,机器人将规划出一条路径,并自主移动到所指定的目标点。

测试多点巡逻脚本

其他的两个python文件以及对应的launch文件,分别是两点巡逻和四点巡逻的测试程序,使用方式和以上的单点导航一样。修改python文件或者launch文件中对应的目标点坐标即可。

tips:要善用Tab来将命令补全哦!

results matching ""

    No results matching ""