ROS navigation分析:move_base分析

move_base是ROS navigation stack的核心组件,负责根据目标点生成控制指令,通过全局和局部路径规划避障。它订阅/move_base_simple/goal,发布/cmd_vel等话题,并提供/make_plan和/clear_costmaps服务。主要函数包括goalCB、executeCb和planThread,其中executeCb触发规划,executeCycle执行控制,planThread负责路径规划。理解这几个函数的工作原理能掌握move_base的运行流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    move_base package可以说是整个navigation stack里最重要的部分了。它的功能是给定一个目标点,尝试产生一系列能让机器人到达这个目标点的控制指令。简单来说,就是输入是一个goal(geometry_msgs/PoseStamped),输出是一系列command(geometry_msgs/Twist)。详细一点来说,就是在已知环境地图和机器人在地图中位置的情况下,利用地图和传感器数据处理得到的 global costmap 和 local costmap,调用全局路径规划器得到一条全局路径,调用局部路径规划器使机器人在移动过程中能在大致沿着路径前进并动态规避障碍物,整个行进过程中还要handle一部分异常情况即recovery_behaviors。架构描述如下图。



    接下来,分析一下源码(move_base.cpp)

    先看构造函数

    sub topic:move_base只sub了一个topic,即"/move_base_simple/goal,类型是"geometry_msgs/PoseStamped"。在rviz中"2D Nav Goal"点击下,可以产生一条这种消息。

    goal_sub_ = simple_nh.subscribe<geometry_msgs::PoseStamped>("goal", 1, boost::bind(&MoveBase::goalCB, this, _1));

    pub topic:pub了三个消息,/cmd_vel是路径规划出来的控制机器人运动的速度指令;/current_goal是一个中间变量;/goal是actionlib相关的topic。

    vel_pub_ = nh.advertise<geometry_msgs::Twist>("cmd_vel", 1);
    current_goal_pub_ = private_nh.advertise<geometry_msgs::PoseStamped>("current_goal", 0 );
    actio
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值