ROS Navigation的move_base类实现方法

本文主要探讨了ROS Navigation中的关键组件move_base,详细介绍了global_planner和MoveBaseActionServer的工作原理。move_base在系统中起着核心作用,负责全局和局部规划。global_planner在循环中进行规划,确保在安全状态下执行。MoveBaseActionServer维护状态机,处理目标点,并启动规划线程。当达到特定条件时,系统会进行相应的状态切换,如检查目标到达、处理震荡问题等。

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

move_base

navigation的系统组成如下,move_base的地位很重要。

MoveBase的构造函数中,使用了不同的NodeHandle,如上图看到订阅的是move_base_simaple/goal是使用simaple_nh之后分辨节点名称之下的topic。订阅和发布的消息:

ros::NodeHandle nh;
vel_pub_ = nh.advertise<geometry_msgs::Twist>("cmd_vel", 1);
current_goal_pub_ = private_nh.advertise<geometry_msgs::PoseStamped>("current_goal", 0 );
ros::NodeHandle action_nh("move_base");
action_goal_pub_ = action_nh.advertise<move_base_msgs::MoveBaseActionGoal>("goal", 1);
ros::NodeHandle simple_nh("move_base_simple");
goal_sub_ = simple_nh.subscribe<geometry_msgs::PoseStamped>("goal", 1, boost::bind(&MoveBase::goalCB, this, _1));

系统状态根据两个变量表示:{state_, recovery_trigger_}

enum MoveBaseState{PLANNING, CONTROLLING, CLEARING};
enum RecoveryTrigger{PLANNING_R, CONTROLLING_R,OSCILLATION_R};

初始化了用来存储全局规划的路径序列,最终会把全局规划得到的最新路径latest_plan_赋值给controller_plan_传递给局部规划器。

//set up plan triple buffer
planner_p
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值