先跑了一个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用于存储获取值的变量。
Fast-Planner中launch文件解析
885

被折叠的 条评论
为什么被折叠?



