Prometheus
)
引言:任务是从单独的启动一个工作空间功能 包 实现prometheus的功能
首先我们从她推荐的代码开始
也就是这一段代码:
roslaunch prometheus_gazebo sitl.launch
众所周知 prometheus_gazebo 是她的功能包 是 她的执行launch文件
这段代码是一段ROS的launch文件,它在启动时创建了两个节点:一个PX4的SITL(Software-in-the-loop)模拟节点,一个Gazebo模拟节点。
首先,在PX4 SITL模拟节点启动前,它设置了三个环境变量,分别用于指定仿真模型、估计器参数和仿真速度因子。然后启动PX4 SITL节点,这个节点通过指定的PX4配置文件和ROMFS目录来初始化PX4的SITL功能。
然后是Gazebo模拟节点,在启动Gazebo模拟前,它首先定义了一些参数,包括是否启用图形界面、是否调试、是否暂停等,然后启动Gazebo模拟,指定世界文件。
最后,这段代码还包括了在Gazebo中添加一个飞行器模型的语句,指定了飞行器模型的初始位置和姿态。
总的来说,这段代码实现了PX4飞控仿真和飞行器仿真的同时启动,它是一个加载多个模拟节点的脚本。
这里我们复习一下launch文件标准流程 :
(复习标准launch文件很有必要 ,这是为了看懂她的结构)!!
抛开参数不谈 继续深入 可以看到 prometheus调动了三个文件
- px4_pos_estimator
- ground_station
- ground_station_msg
<node pkg="prometheus_station" type="ground_station_msg" name="ground_station_msg" output="screen" launch-prefix="gnome-terminal --tab --">
这里我们要注意到 node pkg 跟的是 node的名 ,是可以自己编写的 ,
而她type 后面跟的源代码文件 才是她所用的得!
于是我们找到这三个文件 ,看她分明表达了什么意思!
我们找到了 px4_pos_estimator .cpp 好家伙 ,又是 slam 又是
T256的 vicon ,先跳主函数看看:
居然默认定位用的是 vicon! 我还一直以为用的是 gps:不过我们在仿真文件中改成了2 用的是 gazebo 真实世界值!
// 定位数据输入源 0 for vicon, 1 for 激光SLAM, 2 for gazebo ground truth, 3 for T265 , 9 for outdoor
nh.param<int>("input_source", input_source, 0);
在这个代码中订阅了很多东西 让我联想到了主函数外面发布了很多东西:
但是这东西很多都是为了复合多个工程而写在那里的
外面就要自动屏蔽这些没有消息的源头,最好重新自己写一遍
nh.param<int>("input_source", input_source, 0);
这段代码是在ROS(Robot Operating System)中使用的,它是一种通过命名空间"nh"读取ROS参数服务器中的参数的方法。
其中:
nh.param是一个ROS定义的函数,用于从参数服务器中读取参数。
"input_source"是要读取的参数的名称。
input_source是一个int类型的变量,用于存储读取的参数的值。
0是读取参数的默认值。如果在参数服务器中找不到"input_source"参数,则将使用该默认值。
这段代码的目的是从ROS参数服务器中读取名为"input_source"的参数,并将该参数的值存储在input_source变量中。