mpc_local_planner源码中被注释掉的dynamic reconfigure

mpc_local_planner动态调参

一、如何打开动态调参注释的具体步骤

       在此链接:

Add dynamic reconfigure by kosmastsk · Pull Request #18 · rst-tu-dortmund/mpc_local_planner · GitHubAdd support for dynamic reconfigure of several parameters, as mentioned in #16Specifically, these parameters are:xy_goal_tolerance, yaw_goal_tolerance, global_plan_overwrite_orientation, global_plan_prune_distance, max_global_plan_lookahead_dist, global_plan_viapoint_sep, is_footprint_dynamic, include_costmap_obstacles, costmap_obstacles_behind_robot_dist, collision_check_min_resolution_angular and collision_check_no_poses.The implementation is based on the similar one from teb local planner.Feedback is always welcome!icon-default.png?t=N7T8https://github.com/rst-tu-dortmund/mpc_local_planner/pull/18/commits/ae89b1966b76261cc6fe11b0e96bca6d50504aa5

        通过上面的修改发现后编译时,出现错误:

        然后我就注释掉了这行就可以了(我太菜了,不知道原因是什么。可能是melotic和noetic版本区别?有知道的,评论区交流一下呗~):

        编译成功了,并且打开rosrun rqt_reconfigure rqt_reconfigure是能动态调参的。

        然而,只能添加部分参数。目前github是有人解决了这个问题,下面的链接是它们的讨论:

https://github.com/rst-tu-dortmund/mpc_local_planner/pull/18

有会的教教我呀!!!!!!!!!我会了也会更新的。

------------------------------------------------------------------------------------------------

二、解决添加其他参数的动态调参

        怎么说,已经初步实现了,但是跨文件传变量的时候用的是全局变量,有点low就是了。

跨文件传变量还有挺多方式,比如不另外占内存的函数引用,但我C++还不太行啊,目前就只能分享全局变量的方法了,请往下看~~

(看到这里,我已经默认你是照着上面开头链接里的操作执行过了哈)

第一步,在.cfg文件中添加其他变量

        这里我们就只添加max_vel_x当做示例(其实会一个就是会很多个,模板的话可以照着Teb的写)

第二步,在mpc_local_planner_ros.cpp文件中的 reconfigureCB 回调函数添加一些东西

        (先别着急抄进去,跟着思路一步步来)。

        由于我们在.cfg文件中添加了 max_vel_x (添加完记得编译),因此上面reconfigureCB 回调函数中的 config 会多一个 max_vel_x 。(试试config.就会有一排参数,就是.cfg文件添加的参数,我们找找有没有max_vel_x ,没有的话说明.cfg还没弄好)

        config中有max_vel_x则说明我们成功把参数传进mpc_local_planner_ros.cpp文件中,可是max_vel_x的应用是在controller.cpp中。因此,我使用的方法是全局变量跨文件传参的方法。

第三步,全局变量跨文件传参

        1. 先将config赋值给_param( 就是上图红框的第一句 _param = config; )

        2. 这是当然就提示_param未定义对吧,那我们就去定义_param。在mpc_local_planner_ros.cpp文件中添加如下语句:(我放的位置有点难看哈哈哈,但注意的是,我没记错的话,这个定义不要放进namespace mpc_local_planner )

        3. 既然是跨文件全局变量,那么我们需要在mpc_local_planner_ros.h文件中添加如下语句:

        4. 此时,_param就传到mpc_local_planner_ros.cpp外面了,那controller.cpp怎么接收呢,只需要在controller.cpp中包含mpc_local_planner_ros.h

        5. 好了,参数传进controller.cpp文件中了,接下来我们使用一下。我的车型是“unicycle”,大家找到自己对应的车型,然后进行下面图片红框的修改。

至此,完结撒花~~~~~~

emmmmmmmmmmmmmm......

桥豆麻袋!!!!

“还有一件事!”        ——老爹

        还有什么事呢,其实也没啥事,我们接下来往下看叭~

        由于我们上面图片红框所示的语句 double max_vel_x = _param.max_vel_x;// double max_vel_x = 0.4; 它只被调用一次,分析原因后发现是因为这条语句所属函数configureOcp函数只被调用一次,而configureOcp函数又被configure函数所调用,也就是说configure函数只被调用一次。

        只调用一次怎么办,那我们就调用两次呗,三次呗,......,n次呗。那我们具体调用几次呢,答案很简单呀,我们动态调参几次就调用几次就好了呀。

        emm...动态调参几次就调用几次吗,let me think think...

        其实也没think,只需要在上述提到的mpc_local_planner_ros.cpp文件中的 reconfigureCB 回调函数添加下面东西即可:

最后,运行自己的小车车

        打开rosrun rqt_reconfigure rqt_reconfigure,进行max_vel_x调参,并打rostopic echo /cmd_vel或者用rosrun rqt_plot rqt_plot 看也行,观察到小车最大速度时是有所变化的。

        好咯,这下真的完结撒花咯~各位拜拜~

        另外,本人C++代码能力有限,有些地方可以优化改进,也许还有后续,也许我们还会再见面,也许~

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答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等相关操作系统有一定的掌握和理解,同时还要有一定的机器人运动学基础,才能够更好地完成路径规划的操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值