ROS 学习篇(八)机器人的导航功能--navigation

ROS 学习篇(八)机器人的导航功能--navigation

1. 概述

ROS的二维导航功能包,简单来说,就是根据输入的里程计等传感器的信息流和机器人的全局位置,通过导航算法,计算得出安全可靠的机器人速度控制指令。但是,如何在特定的机器人上实现导航功能包的功能,却是一件较为复杂的工程。作为导航功能包使用的必要先决条件,机器人必须运行ROS,发布tf变换树,并发布使用ROS消息类型的传感器数据。同时,为了让机器人更好的完成导航任务,开发者还要根据机器人的外形尺寸和性能,配置导航功能包的一些参数。

  • 在ROS中,进行导航需要使用到的三个包是:

    (1) move_base:根据参照的消息进行路径规划,使移动机器人到达指定的位置;
    (2) gmapping:根据激光数据(或者深度数据模拟的激光数据)建立地图;
    (3) amcl:根据已经有的地图进行定位。
    源码解析:https://blog.youkuaiyun.com/qq_27753669/article/details/80011156
    在这里插入图片描述

  • 在总体框架图中可以看到,move_base提供了ROS导航的配置、运行、交互接口,它主要包括两个部分:

    (1) 全局路径规划(global planner):根据给定的目标位置进行总体路径的规划.

  • 在ROS的导航中,首先会通过全局路径规划,计算出机器人到目标位置的全局路线。这一功能是navfn这个包实现的。

  • navfn通过Dijkstra或A*最优路径的算法,计算costmap上的最小花费路径,作为机器人的全局路线。

    (2) 本地实时规划(local planner):根据附近的障碍物进行躲避路线规划。

  • 本地的实时规划是利用base_local_planner包实现的。该包使用Trajectory Rollout 和Dynamic Window approaches算法计算机器人每个周期内应该行驶的速度和角度(dx,dy,dtheta velocities)。

  • base_local_planner这个包通过地图数据,通过算法搜索到达目标的多条路经,利用一些评价标准(是否会撞击障碍物,所需要的时间等等)选取最优的路径,并且计算所需要的实时速度和角度。

  • 其中,Trajectory Rollout 和Dynamic Window approaches算法的主要思路如下:
    (1) 采样机器人当前的状态(dx,dy,dtheta);
    (2) 针对每个采样的速度,计算机器人以该速度行驶一段时间后的状态,得出一条行驶的路线。
    (3) 利用一些评价标准为多条路线打分。
    (4) 根据打分,选择最优路径。
    (5) 重复上面过程。

2. 硬件要求

尽管导航功能包设计得尽可能通用,但是仍然对机器人的硬件有以下三个要求:
(1)导航功能包仅对差分等轮式机器人有效,并且假设机器人可直接使用速度指令进行控制,速度指令的格式为:x方向速度、y方向速度、速度向量角度。
(2)导航功能包要求机器人必须安装有激光雷达等二维平面测距设备。
(3)导航功能包以正方型的机器人为模型进行开发,所以对于正方形或者圆形外形的机器人支持度较好,而对于其他外形的机器人来讲,虽然仍然可以正常使用,但是表现则很有可能不佳。

3. 机器人配置

3.1、ROS
首先,请确保你的机器人安装了ROS框架。

3.2、tf变换(sensortransforms)
导航功能包要求机器人以tf树的形式发布各个相关参考系的变换关系。

  • base_linkbase_laser 间的tf转换 核心代码:
    tf::TransformBroadcaster broadcaster;
    
    broadcaster.sendTransform(tf::StampedTransform(
            tf::Transform(tf::Quaternion(0,0,0,1),tf::Vector3(0.1,0.0,0.2)),
            ros::Time::now(),"base_link","base_laser"));
    
         /*通过TransformBroadcaster来发送转换关系,需要附带5个参数。
     1.旋转变换
     2.平移变换
     3、时间戳
     4、parent节点名字
     5、child节点名字
     */ 
    

查看tf关系:

  • 使用rqt_tf_tree
    rosrun rqt_tf_tree rqt_tf_tree
  • 使用tf_echo
    rosrun tf tf_echo [parent_frame_id] [child_frame_id]

3.3、传感器信息(sensor sources)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值