ROS-使用命令发布导航目标点(publish point)

  • Post author:
  • Post category:其他




手动发布rviz中的publish point

我在利用move—base跑仿真时,是使用的rviz中的publish point按钮,在加载的地图上点一系列的目标点,让仿真车辆按照我点的轨迹去跑;在实车的情况下,如果每一次都靠手动去在rviz中创建目标点的话,我感觉实车的运行轨迹不够精确,所以想创建文件或者是在终端使用命令去发送这些点来代替手动在rviz中的创建的点。



思路方法

方法一:

因为实车搭载了Gps,首先想到的就是先使用遥控让车辆跑一下路线,记录下gps的信息,让实车回到开始位置,将gps信号转为map上的点发送给move—base。

方法二:

方法一的简化,还是利用rviz中的publish point按钮直接在地图点击一系列的点,但是要记录下点的信息,然后让实车回到初始位置去发布这些点。



实现

按照由易到难的原则,先把方法二的功能实现出来,再进一步进行优化!!



publish point的发布的话题“/clicked_point”

rostopic info /clicked_point

Type: geometry_msgs/PointStamped
Publishers: 
 * /rviz (http://zero:37475/)
Subscribers: 
 * /car/move_base (http://zero:37663/)

发现了个有趣的现象,在rviz中手动点击publish point的时,当加载的两个publish point之间距离比较小时,move_base会发布“/move_base/goal”话题,那么问题就简单了,我只需要在终端向“/cliceke_point”话题发布两个 publish point,且这两点的位置相近即可,随后move_base包会自动发布“/move_base/goal”话题,模型开始移动!!



发布“/clicked_point”内容

rostopic pub /clicked_point geometry_msgs/PointStamped \ '{header: {frame_id: "map"},point: {x: 7.79252910614,y: -0.434817790985,z: 0.00178050994873}}'

rostopic pub /clicked_point geometry_msgs/PointStamped \ '{header: {frame_id: "map"},point: {x: 8.09252910614,y: -0.434817790985,z: 0.00178050994873}}'

ok!!成功的让它跑起来了!!

在这里插入图片描述



使用脚本发布一系列的点

#!/bin/sh
rostopic pub -1 /clicked_point geometry_msgs/PointStamped "header:
  seq: 0
  stamp:
    secs: 0
    nsecs: 0
  frame_id: 'map'
point:
  x: -5.0
  y: 0.0 
  z: 0.0" 
rostopic pub -1 /clicked_point geometry_msgs/PointStamped "header:
  seq: 0 
  stamp:
    secs: 0
    nsecs: 0
  frame_id: 'map'
point:
  x: -4.0
  y: 0.0
  z: 0.0" 
rostopic pub -1 /clicked_point geometry_msgs/PointStamped "header:
  seq: 0
  stamp:
    secs: 0
    nsecs: 0
  frame_id: 'map'
point:
  x: -3.0
  y: 0.0
  z: 0.0" 
rostopic pub -1 /clicked_point geometry_msgs/PointStamped "header:
  seq: 0
  stamp:
    secs: 0
    nsecs: 0
  frame_id: 'map'
point:
  x: -2.7
  y: 0.0
  z: 0.0" 



疑惑

为何发布的publish point 两点的距离大些时,move_base不会发布“/move_base/goal”话题,即模型不会动起来??距离小的时候就可以??

解答:

因为我的全局规划路径使用的waypoint,在全局规划路径的配置中,设置了这个距离参数,可以调整的!!



补充

对于评论讲的发布

/clicked_point

话题之后模型并没有动起来,解释如下:

我们要让move_base订阅clicked_point话题,怎么实现呢?这里可以使用开源的全局算法waypoint-global-planner(https://github.com/gkouros/waypoint-global-planner);

在move_base调用就可以了!!

示例:


move_base.launch

:

<launch>

<node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen" clear_params="true">
<rosparam file="$(find my_navigation)/config/costmap_common_params.yaml" command="load" ns="global_costmap" />
<rosparam file="$(find my_navigation)/config/costmap_common_params.yaml" command="load" ns="local_costmap" />
<rosparam file="$(find my_navigation)/config/local_costmap_params.yaml" command="load" />
<rosparam file="$(find my_navigation)/config/global_costmap_params.yaml" command="load" />

<!--global_planner-->
<rosparam file="$(find my_navigation)/config/base_global_planner_params.yaml" command="load" />

</node>

  
</launch>


base_global_planner_params.yaml

:

base_global_planner: "waypoint_global_planner/WaypointGlobalPlanner"
#planner_frequency: 0.0 #此为move_base参数
#planner_patience: 1.0 #此为move_base参数,在move_base_params.yaml中也进行了设定

WaypointGlobalPlanner:
  # epsilon: 1e-1  # distance threshold for final waypoint
  epsilon: 0.5  # distance threshold for final waypoint  
  waypoints_per_meter: 10  # number of waypoints per meter for the interpolation of the path



版权声明:本文为qq_45281711原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。