-
Notifications
You must be signed in to change notification settings - Fork 7
Home
WLwind edited this page Dec 29, 2019
·
7 revisions
这是一个简单实用的机器人巡线运动的小工具,用move_base的全局路径规划插件实现了将rviz发布的目标位置连接成线段组成全局路径,并可让机器人用常规的局部路径规划插件尽量贴近线段运动。
- 直接到工作空间源码目录下下载,例如:
cd ~/catkin_ws/src && git clone https://github.com/WLwind/segment_global_planner.git
- 到工作空间根目录进行编译,例如:
cd ~/catkin_ws && catkin_make
有两种方法加载全局路径规划插件:
- 在roslaunch时提前发布rosparam,move_base启动后直接根据参数加载插件。
需要修改启动move_base的launch文件或(xml文件)中<node pkg="move_base "type="move_base"/>
标签中的base_global_planner的值改成segment_global_planner/SegmentGlobalPlanner:<param name="base_global_planner" value="segment_global_planner/SegmentGlobalPlanner"/>
,或者用<rosparam>
加载yaml文件,在yaml文件中设置参数,两种方式的配置文件在功能包的param文件夹里有示例。 - 在move_base启动后,动态调整base_global_planner参数。
- 启动rqt_reconfigure:
rosrun rqt_reconfigure rqt_reconfigure
- 选中左侧的move_base节点,右侧可以看到全局路径规划参数base_global_planner,将它的键值改为segment_global_planner/SegmentGlobalPlanner,回车即可生效。
在此顺便注意一下planner_frequency参数,此参数为全局路径规划的更新频率,最好让这个频率保持在2到5赫兹,因为segment_global_planner每次被触发时会更新规划器中机器人位姿、判断机器人位于哪一线段上、是否需要切换跟随的线段,如果频率过低则move_base可能会误把某线段的终点当做全局路径的终点而结束导航。
- 需要找到全局路径规划(不是局部路径规划器中的全局路径)的显示项,在下拉选项中选中/move_base/SegmentGlobalPlanner/plan,之后就会操作时就会显示线段全局规划线路了。
- rviz工具栏点击加号(Add a new tool),选择PublishPoint,点击OK,然后在菜单栏打开Panels,选择ToolProperties,弹出的小窗口中找到Publish Point对应的属性,去掉Single click的勾选,关闭小窗口即可,这样就可以连续点击发布目标了。
在功能包的rviz文件夹下有配置好的针对Turtlebot3的rviz文件。
有三种方式发布目标位置:
- 用最常规的rviz目标发布方式,点击工具栏的2D Nav Goal,然后用鼠标拖拽地图中的位置以确定目标的位姿。
- 用rviz工具栏的Publish Point,点击,然后可以在地图上点击(不是拖拽)发布目标,此方式可以连续发布目标点。此方式也是对于用户最方便容易的方式。
- 用ROS的actionlib接口调用move_base的action,可以用C++或者Python来实现,可以参考ROS官方api来实现,这个功能包也可作为参考。
本插件提供一个ROS服务用于清理已规划出的路径,当线段路径由于操作失误或者机器人位置漂移而陷入障碍物或者很狭窄的位置造成机器人无法通过时,可用命令行或者rqt来请求服务clear_trajectory进行原路径的清除,命令行如下:
rosservice call /move_base/SegmentGlobalPlanner/clear_trajectory "{}"
segment_global_planner的目标容限值(child_goal_threshold)需要比局部路径规划器的目标容限值大,同时配合一定的全局规划更新频率,才能保证衔接更流畅。此参数可以在roslaunch时提前读取yaml文件发布(在本功能包的param目录下有示例),也可以通过动态调参rqt_reconfigure来修改。
启动动态调参:rosrun rqt_reconfigure rqt_reconfigure
在左侧可以看到move_base节点,在其子目录中,选中SegmentGlobalPlanner,右侧会显示本插件的几个参数:
- threshold_point_on_line 脱线阈值,机器人与线段距离(米)超过此值则被视为脱线
- point_interval 插入点间隔,轨迹中的两个位姿之间的间隔距离(米)
- child_goal_threshold 子目标点的容差,与线段目标点的距离(米)小于此值则被视为到达目标点,规划器会切换到下一线段,此值应大于局部路径规划的XY方向终点容差