路径规划模块(一) 概述

local_planner.launch包括节点localPlannerpathFollower,以及发布sensor ---> vehiclesensor ---> camera的tf变换

  • 避障: 由local_planner实现. 程序一启动就先预生成 Motion primitives. The motion primitives are modeled as Monte Carlo samples and organized in groups 现实中快遇到障碍物时,local planner可以在几毫秒内判断出哪些 motion primitives 会和障碍相撞,然后从motion primitives中选出最可能朝向目标的一组。

  • Sending waypoints, navigation boundary, and speed: 一收到waypoint, navigation boundary, and speed 的消息, the system will navigate the vehicle inside the navigation boundary to the waypoint. 发送的navigation boundary和速度是可设置的,默认速度2m/s. 可以参考waypoint_example如何发送这些消息

  • Waypoint: 话题way_pointgeometry_msgs::PointStamped类型的消息,在map坐标系。 发布者当然是rvizGAlocalPlanner

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    header: 
    seq: 6
    stamp:
    secs: 215
    nsecs: 380000000
    frame_id: "map"
    point:
    x: 9.90468215942
    y: 12.2474937439
    z: 0.839443683624
    ---
    header:
    seq: 7
    stamp:
    secs: 215
    nsecs: 380000000
    frame_id: "map"
    point:
    x: 9.90468215942
    y: 12.2474937439
    z: 0.839443683624
  • Navigation boundary (optional): 话题navigation_boundarygeometry_msgs::PolygonStamped的消息, 在map坐标系。 默认没有发布,订阅者是localPlanner

system_real_robot.launch中的部分:

1
2
3
4
5
<include file="$(find local_planner)/launch/local_planner.launch" >
<arg name="cameraOffsetZ" value="$(arg cameraOffsetZ)"/>
<arg name="goalX" value="$(arg vehicleX)"/>
<arg name="goalY" value="$(arg vehicleY)"/>
</include>

这个launch其实就是localPlannerpathFollower两个节点,再加两个tf转换

1
2
3
<node pkg="tf" type="static_transform_publisher" name="vehicleTransPublisher" args="-$(arg sensorOffsetX) -$(arg sensorOffsetY) 0 0 0 0 /sensor /vehicle 1000"/>

<node pkg="tf" type="static_transform_publisher" name="sensorTransPublisher" args="0 0 $(arg cameraOffsetZ) -1.5707963 0 -1.5707963 /sensor /camera 1000"/>

节点localPlanner一直在发布话题path,可以将源码中的宏PLOTPATHSET改为0,最好是做成ROS Param.

只有path follower会发布cmd_vel,在机器人前往目标点的过程中, local planner会不断的对比机器人当前位置和目标点位置的差距,根据这个差值去控制机器人的直线速度和转向速度,最终不断逼近目标点。

代码中常出现的laserCloudvehicleX都是在map坐标系下