本篇内容:介绍Sunray中关于外部定位的节点
外部定位主要文件:
Sunray/General_Module/sunray_uav_control/src/externalFusion.cpp
Sunray/General_Module/sunray_uav_control/include/externalFusion.h
Sunray/General_Module/sunray_uav_control/include/ExternalPosition.h
外部定位模块的主要功能是给PX4无人机提供一个外部定位,使无人机能够在没有GPS等环境中也能够进行定点、定高飞行
外部定位节点预定义了一下几个定位源:
0:nav_msgs::Odometry 消息格式数据源,需要将ros话题传递给position_topic参数
1: geometry_msgs::PoseStamped 消息格式数据源,需要将ros话题传递给position_topic参数
2: 用于仿真中的定位,来源于gazebo真值
3: 来源与动作捕捉(VRPN)的数据此外该节点还会显示无人机的当前转态,并检测外部定位是否可用并将该状态发布至控制节点或其他节点
启动launch
当enable_rviz为true时会发布无人机的mesh和轨迹,同时打开rviz显示
roslaunch sunray_uav_control external_fusion.launch
<launch>
<!-- ODOM = 0, POSE = 1, GAZEBO = 2, MOCAP = 3, VIOBOT = 4, GPS = 5, RTK = 6, VINS = 7 -->
<arg name="uav_id" default="1" />
<arg name="external_source" default="0" />
<arg name="uav_name" default="uav" />
<arg name="position_topic" default="/Odometry" />
<arg name="enable_rviz" default="false" />
<arg name="enable_range_sensor" default="false" />
<arg name="server" default="192.168.25.11"/>
<!-- 启动 external_fusion_node-->
<node name="external_fusion" pkg="sunray_uav_control" type="external_fusion_node" output="screen">
<param name="uav_id" value="$(arg uav_id)" />
<param name="external_source" value="$(arg external_source)" />
<param name="uav_name" value="$(arg uav_name)" />
<param name="position_topic" value="$(arg position_topic)" />
<param name="enable_range_sensor" value="$(arg enable_range_sensor)" />
</node>
<!-- 启动 vrpn_client_ros -->
<include file="$(find sunray_uav_control)/launch/sunray_vrpn.launch" if="$(eval external_source == 3)">
<arg name="server" value="$(arg server)"/>
<arg name="uav_id" value="$(arg uav_id)"/>
</include>
<arg name="rivz_config" default="$(find sunray_uav_control)/rviz/uav.rviz"/>
<!-- 启动Rviz-->
<group if="$(arg enable_rviz)">
<node type="rviz" name="rviz_external_fusion" pkg="rviz" args="-d $(arg rivz_config)"/>
</group>
</launch>