Fast-Planner之topo_replan.launch解读

Fast-Planner中launch文件解析

先跑了一个launch文件,这个地图是拓扑地图。

(base) pc@pc-Default-string:~/fast-planner$ source devel/setup.bash
(base) pc@pc-Default-string:~/fast-planner$ roslaunch plan_manage topo_replan.launch 

下面来详细解读这个topo_replan.launch文件

该文件位于fast-planner->plan_manage->topo_replan.launch。

0.launch文件结构预览

<launch>
  <!-- global parameters 全局参数引用-->

  <!-- main algorithm params 主算法参数-->

  <!-- trajectory server 轨迹服务器节点和全局/路径点生成器节点-->

  <!-- use simulator 仿真器-->

</launch>

1.全局参数定义

定义了这个launch会用到的参数

2.主算法参数(对topo_algorithm.xml进行参数的传递

<include file="$(find plan_manage)/launch/topo_algorithm.xml">
  ...
</include>

这里关于传感器输入,深度相机和雷达点云,只能选一个,然后作为输入(输入1:相机在世界系的位姿和深度图,输入2:雷达点云)

<!-- 1: use 2D Nav Goal to select goal  -->
    <!-- 2: use global waypoints below  -->
    <!-- 3: use global waypoints below to set reference path --> 
    <arg name="flight_type" value="3" />

其中内部有参数flight_type,这里可以自己设置1,2,3,运行luanch后会有不同飞行的效果

3.轨迹服务器节点和全局/局部路径点生成器节点

这里主要涉及一个话题重映射。话题重映射就是让节点内部用的话题名,和你指定的实际话题名临时对应起来,实现灵活连接和兼容。

假设有两个节点:

  • 节点A 发布位置信息到 /pos

  • 节点B 订阅位置信息,默认订阅的是 /position_cmd

这样两个节点直接通信就对不上(A发到/pos,B听/position_cmd)。

话题重映射如何用?启动节点B时,重映射它的订阅话题 /position_cmd 到 /pos,这样B实际就能收到A发布的信息了

<node pkg="xxx" type="yyy" name="nodeB">
  <remap from="/position_cmd" to="/pos"/>
</node>
  • from:节点内部用的话题名
  • to:实际被替换成的新话题名

效果:节点B原来订阅/position_cmd,现在订阅的是/pos,与A对上了!把节点B的/position_cmd重命名为了/pos。

4.启动仿真

对simulator.xml进行参数传递。产生模拟环境和障碍物信息,用于算法测试与验证



补充launch的用法知识点

<arg><param> 在ROS launch文件中有根本性的区别,它们的作用范围、用途和生命周期完全不同

<arg name="map_size_x" value="40.0"/>
  • 作用范围:仅在当前launch文件内有效

  • 用途:launch文件内部的变量,用于参数化配置

  • 访问方式:只能在launch文件中通过 $(arg map_size_x) 引用

  • 生命周期:launch文件执行期间存在

<param> - ROS参数服务器参数

<param name="/shared/map_size_x" value="$(arg map_size_x)"/>
  • 生命周期:持续存在直到被删除或roscore关闭

  • 作用范围:整个ROS网络

  • 用途:存储在ROS参数服务器中,所有节点都可以访问

  • 访问:在节点中访问参数服务器参数

#include <ros/ros.h>

int main(int argc, char** argv) {
    ros::init(argc, argv, "my_node");
    ros::NodeHandle nh;
    
    double map_size_x;

    
    // 访问全局参数
    ros::param::get("/shared/map_size_x", map_size_x);
    
    // 或者使用NodeHandle
    nh.getParam("/shared/map_size_x", map_size_x);

    //后面加的方法
    //nh.param("参数名", 存储变量, 默认值);如果参数不存在时的默认值
    nh.param("planning/start_x", _start_pt(0), 0.0);
    
    
    ROS_INFO("Map size X: %f", map_size_x);
    return 0;
}

向ROS Master请求名为/shared/map_size_x的参数,自动将参数值转换为map_size_x变量的类型。map_size_x用于存储获取值的变量。

总结:

只在launch文件内部使用,用 <arg>

需要节点访问的参数, 用 <param>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值