ROS中MPC局部路径规划器使用方法及源码流程解读

   本文主要介绍ROS中Navigation导航框架中MPC局部路径规划器mpc_local_planner的使用方法,并对源码进行解读,梳理其规划流程等,具体包含MPC模型预测控制算法简介、mpc_local_planner使用方法、mpc_local_planner源码解读与规划流程梳理三部分内容。


   注:本文首发于古月居,原文链接如下:

   https://www.guyuehome.com/45097

   本篇文章我首发在古月居,因版权原因,在CSDN不能放全文,只能放一小部分,欢迎大家前往古月居查看完整文章!!!,链接如上↑↑↑

在这里插入图片描述


   一、MPC模型预测控制算法简介


   MPC(Model Predictive Control)是一种先进的控制策略,其核心思想是使用系统数学模型来预测系统在某一未来时间段内的表现来进行优化控制,并通过求解优化问题来计算最优的控制输入,多用于数位控制,所以分析时常采用离散型的状态空间表达形式 X k + 1 = A X k + B U k X_{k+1}=AX_{k}+BU_{k} Xk+1=AXk+BUk

   MPC的设计和实施包含三个步骤,在k时刻第一步要做的是,估计/测量出系统当前状态。

   第二步是基于 u k u_{k} uk u k + 1 u_{k+1} uk+1 u k + 2 u_{k+2} uk+2 u k + 3 u_{k+3} uk+3 u k + n u_{k+n} uk+n来做最优化控制,即在k时刻施加一个输入 u k u_{k} uk,根据我们的模型来预测系统k ~ k+1时间段内的表现,然后基于预测的k+1时刻的表现,再施加一个输入 u k + 1 u_{k+1} uk+1、再根据我们的模型来预测系统k+1 ~ k+2时间段内的表现,以此类推,直至预测完我们设定的预测区间,比如k~k+3时间段。则输入 u k u_{k} uk u k + 1 u_{k+1} uk+1 u k + 2 u_{k+2} uk+2称为控制区间,在这个控制区间, u k u_{k} uk u k + 1 u_{k+1} uk+1 u k + 2 u_{k+2} uk+2的选择就是一个最优化的问题。来使得设定的目标函数最小。

   第三步是非常重要的一步,也是MPC当中非常有技巧性的一步,通过上面的计算。我们其实得到了 u k u_{k} uk u k + 1 u_{k+1} uk+1 u k + 2 u_{k+2} uk+2这三个输入,但是在实施的时候,并不是把这三个数值输入都实施下去,而是在K时刻只实施 u k u_{k} uk这一个在k时刻计算出来的最优化结果。

   在实施的时候只取 u k u_{k} uk这一个输入非常重要,这是因为我们预测的模型很难完美的描述现实的系统,而且,在现实的系统当中可能会有扰动,就是说我们预测出来的实施 u k u_{k} uk后,它的输出 Y k Y_{k} Yk与现实当中真正执行完 u k u_{k} uk后的 Y k Y_{k} Yk是有偏差的,这就要求当我们实施 u k u_{k} uk之后,在k+1时刻要把上面的三步重新执行一遍,即把整个的预测区间(control horizon)和控制区间(predictive horizon)向右移动一个时刻。这个过程就称为滚动优化控制(receiving horizon control)。

   MPC的优点包括处理多变量、多约束系统,适应动态环境和提供优化性能。然而,它的计算复杂度较高,适用于需要高精度控制的应用。

   MPC模型预测控制算法的详细介绍可见 :《MPC模型预测控制器学习笔记》


   二、mpc_local_planner使用方法


   ROS现有开源MPC模型预测控制算法的局部路径规划器插件中,最受欢迎的是mpc_local_planner功能包,它与我们比较熟悉的teb_local_planner出自同一研究所(多特蒙德大学-控制理论与系统工程研究所),所以在流程及上有很多相似之处,mpc_local_planner使用步骤如下:

   1、下载并将mpc_local_planner功能包放到ROS工作空间的src文件夹下

   2、环境配置,在终端执行以下指令安装所需依赖和环境

rosdep install mpc_local_planner

   若rosdep不能正常使用,可以参考我之前写的博客,链接如下:

   《ROS Noetic版本 rosdep找不到命令 不能使用的解决方法》

   3、使用catkin_make对mpc_local_planner功能包进行编译

   4、可根据需要执行以下语句中的一个或多个(同一时间执行一个即可),来使用功能包自带的示例,对功能包是否能够正常工作,并可对其性能进行测试

   可以执行以下语句进行阿克曼模型小车的demo的测试

roslaunch mpc_local_planner_examples carlike_minimum_time.launch

   效果演示如下:

在这里插入图片描述
在这里插入图片描述

   可以执行以下三条语句中任意一条进行差速模型小车的demo的测试

roslaunch mpc_local_planner_examples diff_drive_minimum_time.launch
roslaunch mpc_local_planner_examples diff_drive_quadratic_form.launch
roslaunch mpc_local_planner_examples diff_drive_minimum_time_costmap_conversion.launch

   效果演示如下:

在这里插入图片描述

   执行任意上述launch文件对功能包是否能够正常工作进行测试后,若能正常进行局部路径规划,则可以进一步将该功能包运用在我们自己的机器人上,继续进行以下操作

   5、在启动move_base的launch文件中,配置局部路径规划器插件为mpc_local_planner/MpcLocalPlannerROS,并根据机器人的实际情况,设定参数clearing_rotation_allowed的值来设定在规划时是否允许机器人旋转,比如对于阿克曼结构的类车型机器人,不具备原地旋转能力,该参数设为flase,如下所示

 <param name="base_local_planner" value="mpc_local_planner/MpcLocalPlannerROS" />
 <param name="controller_frequency" value="5" />
 <param name="controller_patiente" value="15.0"/>
 <param name="clearing_rotation_allowed" value="false" /> <!-- carlike robot is not able to rotate in place -->

   6、在上述move_base节点配置中调用mpc_local_planner的参数配置文件mpc_local_planner_params.yaml,如下图所示,需要注意的是文件路径可能要根据实际情况进行修改。

在这里插入图片描述

   7、进行效果测试,并根据测试效果对参数进行调节

在这里插入图片描述


   三、mpc_local_planner源码解读与规划流程梳理

   本文的第三部分是本文核心部分,详细的对mpc_local_planner源码进行了解读,并对mpc_local_planner规划流程进行了梳理,本部分约1.5w字,预览图如下:

在这里插入图片描述

   欢迎对以上内容感兴趣的小伙伴前往古月居,查看全文,链接如下:

   https://www.guyuehome.com/45097

   本篇文章我首发在古月居,因版权原因,在CSDN不能放全文,只能放一小部分,欢迎大家前往古月居查看完整文章!!!,链接如上↑↑↑


  • 8
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 17
    评论
### 回答1: mpc_local_planner是一种基于模型预测控制的本地路径规划,主要用于自主驾驶车辆的路径规划。以下是mpc_local_planner的使用教程: 1. 安装ROS和mpc_local_planner 首先需要安装ROS和mpc_local_planner。可以通过以下命令安装: ``` sudo apt-get install ros-kinetic-mpc-local-planner ``` 2. 配置参数 在使用mpc_local_planner之前,需要对其进行参数配置。可以通过修改launch文件的参数来进行配置。主要需要配置的参数包括: - robot_radius:机人半径 - max_vel_x:机人最大线速度 - min_vel_x:机人最小线速度 - max_vel_theta:机人最大角速度 - min_vel_theta:机人最小角速度 - acc_lim_x:机人线加速度限制 - acc_lim_theta:机人角加速度限制 - sim_time:模拟时间 - sim_granularity:模拟粒度 - angular_sim_granularity:角度模拟粒度 3. 启动mpc_local_planner 启动mpc_local_planner需要使用roslaunch命令。可以通过以下命令启动: ``` roslaunch mpc_local_planner mpc_local_planner.launch ``` 启动后,mpc_local_planner会订阅机人的位姿信息和全局路径信息,并发布机人的速度控制信息。 4. 可视化 可以使用rviz来可视化mpc_local_planner的运行情况。可以通过以下命令启动rviz: ``` rosrun rviz rviz ``` 在rviz,需要添加以下显示: - RobotModel:机人模型 - Path:全局路径 - Local Plan:局部路径 通过以上步骤,就可以使用mpc_local_planner进行路径规划了。 ### 回答2: mpc_local_planner是一种基于模型预测控制的局部路径规划,可以在ROS系统上运行。它适用于机人或自动驾驶车辆在未知环境或障碍物密集区域进行路径规划,并能考虑车辆动力学、环境条件等因素,使得路径更加稳定和安全。 使用mpc_local_planner需要先进行安装,具体操作可以参考ROS官方网站的安装指南。安装成功后,在ROS工作空间创建一个新的包,并在package.xml文件添加依赖,安装所需的依赖库。 首先,需要在代码引入mpc_local_planner相关的头文件,并定义一个全局变量planner,类型为MPCPlannerROS(注意,此处需要使用MPCPlannerROS而不是MPCPlanner,因为它将ROS系统与MPC控制结合在一起): #include <mpc_local_planner/mpc_planner_ros.h> MPCPlannerROS planner; 接下来,需要在ROS节点初始化planner: ros::NodeHandle private_nh("~"); planner.initialize(private_nh); 然后,需要在主循环调用planner的updatePlan方法,实时更新路径规划结果: while (ros::ok()) { // 获取机人的位姿信息和局部地图信息,传递给planner.updatePlan()进行路径规划 planner.updatePlan(current_pose, local_costmap, local_map); } 最后,需要在ROS节点添加一个订阅者,用于接收机人的位姿信息、传感数据等信息,以便更新路径规划ros::Subscriber pose_sub = nh.subscribe("/amcl_pose", 10, poseCallback); 其poseCallback为回调函数,用于获取机人的位姿信息,并调用planner的setPlan方法,将目标路径传递给planner: void poseCallback(const geometry_msgs::PoseStamped& pose) { // 获取机人当前的位姿信息,并调用planner的setPlan()方法传递目标路径 tf::Pose robot_pose; tf::poseMsgToTF(pose.pose, robot_pose); planner.setPlan(robot_pose); } mpc_local_planner的配置参数非常丰富,可以通过在ROS参数服务设置参数来调整路径规划的结果。例如,可以设置MPC控制的时间步长、预测时间、约束条件等参数,或者调整局部地图的分辨率、占用阈值等参数,以达到更好的效果。 总之,mpc_local_planner是一种非常高效、灵活的路径规划,能够适应各种环境和条件,并能根据实时传感数据进行实时更新。虽然使用起来有一定的复杂度,但是掌握一定的使用方法和技巧,仍然可以在实际应用发挥出很大的作用。 ### 回答3: MPC_local_planner是一种移动底盘路径规划,通过模型预测控制的方法计算出机人在未来一定时间内前进方向以及速度,从而达到对路径实时控制的目的,在ROS常被用来作为机人底层行走模块的路径规划。 MPC_local_planner的使用教程如下: 1、安装MPC_local_planner 可以通过ROS论坛或者github下载源码进行安装,同时还需要安装和设置相关依赖包。 2、配置MPC_local_planner参数 MPC_local_planner的机人行动学模型等参数都可在代码源文件进行设置,主要包括机人速度,角度等相关参数。 3、设置起始位置和目标点 在进行路径规划前,需要设置机人的起始位置和目标点。 4、调用MPC_local_planner的API 在设置好相关参数和起始位置/目标点之后,可以调用MPC_local_planner提供的API进行路径规划,同时可以通过回调函数对路径进行相关调整和修改。 5、执行路径规划并进行路径跟踪 在完成路径规划之后,就可以根据生成的路径进行移动底层控制,实现机人的路径跟踪。 总之,使用MPC_local_planner进行路径规划时要注意对参数的设置和路径的调整等,需要对ROS等相关操作系统有一定的掌握和理解,同时还要有一定的机运动学基础,才能够更好地完成路径规划的操作。
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慕羽★

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值