ros中实现全局/局部避障算法的添加与rviz中规划路径的显示(上)

目录

前言

一、命令行

二、所用到的launch文件、yaml文件等

1.map1_mrobot_laser_nav_gazebo.launch

2.gmapping_demo.launch

3.gmapping.launch

4.move_base.launch

5.nav03_map_server.launch

6.mrobot_teleop.launch

三、rviz中添加path插件

总结


前言

最近在做ros相关的作业,故写下本文留做参考以便日后再次使用或理解,如有错漏之处敬请指出!

所用的全局避障(路径规划)算法为A*,局部避障(路径规划)算法为DWA。

本文主要介绍DWA算法的添加和应用(因为A*还没做…)


一、命令行

#先在gazebo中建立并保存地图,file-save world as 保存world文件
roslaunch mrobot_gazebo map1_mrobot_laser_nav_gazebo.launch #启动gazebo,加载已建立的地图
roslaunch mrobot_navigation gmapping_demo.launch #启动move_base、rviz,此处的launch文件中不要添加最后的<加载地图文件>代码
roslaunch mrobot_teleop mrobot_teleop.launch #可以使用键盘的【uiojklm,.】九个键进行对小机器人的控制,使小车雷达扫描完整个地图 
rosrun map_server map_saver -f ~/ws/src/robot_mrobot/mrobot_navigation/maps/图片名称 #保存地图yaml、pgm文件,路径根据情况进行更改即可
#更改好launch、yaml文件后
roslaunch mrobot_gazebo map1_mrobot_laser_nav_gazebo.launch #启动gazebo,加载已建立的地图
roslaunch mrobot_navigation gmapping_demo.launch #启动move_base、rviz
#在rviz中设置目标点,添加path插件选择topic来显示已规划出的全局/局部路径

二、所用到的launch文件、yaml文件等

1.map1_mrobot_laser_nav_gazebo.launch

<launch>

    <!-- 设置launch文件的参数 --> <!-- 此处world文件改为自己另存为的名字 -->
    <arg name="world_name" value="$(find mrobot_gazebo)/worlds/2-11map1.world"/>  
    <arg name="paused" default="false"/>
    <arg name="use_sim_time" default="true"/>
    <arg name="gui" default="true"/>
    <arg name="headless" default="false"/>
    <arg name="debug" default="false"/>

    <!-- 运行gazebo仿真环境 -->
    <include file="$(find gazebo_ros)/launch/empty_world.launch">
        <arg name="world_name" value="$(arg world_name)" />
        <arg name="debug" value="$(arg debug)" />
        <arg name="gui" value="$(arg gui)" />
        <arg name="paused" value="$(arg paused)"/>
        <arg name="use_sim_time" value="$(arg use_sim_time)"/>
        <arg name="headless" value="$(arg headless)"/>
    </include>

    <!-- 加载机器人模型描述参数 -->
    <param name="robot_description" command="$(find xacro)/xacro --inorder '$(find mrobot_gazebo)/urdf/mrobot_with_rplidar.urdf.xacro'" /> 

    <!-- 运行joint_state_publisher节点,发布机器人的关节状态  -->
    <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" ></node> 

    <!-- 运行robot_state_publisher节点,发布tf  -->
    <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher"  output="screen" >
        <param name="publish_frequency" type="double" value="50.0" 
### ROS路径规划算法的创新方法研究 #### 动态环境下的自适应路径规划 传统静态路径规划算法如A*在面对动态变化的环境中表现不佳。为了应对这一挑战,D*算法被设计用于处理未知或不断变化的地图数据[^1]。该算法允许机器人基于最新的传感器输入实时调整其路线,在遇到障碍物时能够迅速找到替代路径。 #### 局部感知优化策略 LPA*(Life-long Planning A*)进一步改进了这一点,通过仅重新计算受影响区域内的节点代价来减少不必要的全局更新操作,从而提高了效率并降低了计算资源消耗[^2]。这种方法特别适用于那些部分已知但仍存在不确定性的场景中。 #### 多目标函数融合技术 考虑到实际应用需求复杂多样,单一的成本度量可能无法满足所有情况的要求。因此引入了多准则决策机制,将时间、能量消耗等多个因素综合考虑进来作为评价标准之一。例如,在紧急救援任务里优先级最高的可能是速度;而在日常巡逻则更看重安全性及电量管理等方面的表现[^3]。 #### 集成先进启发式搜索框架 除了上述针对特定问题提出的解决方案外,还有不少工作致力于开发更加通用高效的寻路模型。比如粒子群优化(Particle Swarm Optimization, PSO)作为一种群体智能算法也被应用于此领域内探索新的可能性。它模仿鸟群飞行模式来进行空间搜索,并能有效解决高维连续变量最优化难题[^4]。 ```cpp // 示例C++代码片段展示如何初始化PSO参数设置 #include "pso.h" int main() { ParticleSwarmOptimizer pso; // 设置种群大小、迭代次数等基本属性 pso.setPopulationSize(50); pso.setMaxIterations(100); // 定义边界条件以及适应度函数指针 double lowerBound[] = {-10,-10}; double upperBound[] = { 10, 10}; FitnessFunction fitnessFuncPtr = &fitnessFunction; pso.setBounds(lowerBound,upperBound); pso.setFitnessFunction(fitnessFuncPtr); // 开始执行优化过程... } ```
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值