註明:最終在rivz中沒有看到點雲,原因未知。
- ROS中消息重映射需要在發佈該話題的節點下進行,否則不成功。如果是針對mavros的消息進行重映射,則需要找到mavrso包下launch文件,px4.launch。然後由於px4.launch(如下圖所示)中調用的是node.launch,故需要再次找到node.launch文件進行修改。
<launch>
<!-- vim: set ft=xml noet : -->
<!-- example launch script for PX4 based FCU's -->
<arg name="fcu_url" default="/dev/ttyACM0:57600" />
<arg name="gcs_url" default="" />
<arg name="tgt_system" default="1" />
<arg name="tgt_component" default="1" />
<arg name="log_output" default="screen" />
<arg name="fcu_protocol" default="v2.0" />
<arg name="respawn_mavros" default="false" />
<include file="$(find mavros)/launch/node.launch">
<arg name="pluginlists_yaml" value="$(find mavros)/launch/px4_pluginlists.yaml" />
<arg name="config_yaml" value="$(find mavros)/launch/px4_config.yaml" />
<arg name="fcu_url" value="$(arg fcu_url)" />
<arg name="gcs_url" value="$(arg gcs_url)" />
<arg name="tgt_system" value="$(arg tgt_system)" />
<arg name="tgt_component" value="$(arg tgt_component)" />
<arg name="log_output" value="$(arg log_output)" />
<arg name="fcu_protocol" value="$(arg fcu_protocol)" />
<arg name="respawn_mavros" default="$(arg respawn_mavros)" />
</include>
</launch>
node.launch文件如下圖所示:
<launch>
<!-- vim: set ft=xml noet : -->
<!-- base node launch file-->
<arg name="fcu_url" />
<arg name="gcs_url" />
<arg name="tgt_system" />
<arg name="tgt_component" />
<arg name="pluginlists_yaml" />
<arg name="config_yaml" />
<arg name="log_output" default="screen" />
<arg name="fcu_protocol" default="v2.0" />
<arg name="respawn_mavros" default="false" />
<node pkg="mavros" type="mavros_node" name="mavros" required="$(eval not respawn_mavros)" clear_params="true" output="$(arg log_output)" respawn="$(arg respawn_mavros)">
<remap from="mavros/imu/data" to="/imu/data" />
<param name="fcu_url" value="$(arg fcu_url)" />
<param name="gcs_url" value="$(arg gcs_url)" />
<param name="target_system_id" value="$(arg tgt_system)" />
<param name="target_component_id" value="$(arg tgt_component)" />
<param name="fcu_protocol" value="$(arg fcu_protocol)" />
<!-- load blacklist, config -->
<rosparam command="load" file="$(arg pluginlists_yaml)" />
<rosparam command="load" file="$(arg config_yaml)" />
</node>
</launch>
其中,<remap … 表示重映射。
-
rosbag play -l hdl_400.bag
表示循環播放bag文件,其中 -l 表示 loop。 -
rostopic info /topic
可以查看該話題的所屬的消息。如下圖所示,顯示了話題所屬的類型,訂閱者,以及發佈者。
-
參考Loam的編譯安裝運行及可能遇到的問題,完成了PCL庫的安裝。其中遇到如下的錯誤
解決方法是:出現multiscanregistration錯誤,在loam_velodyne / CMakeLists.txt,下面刪除第35行, add_definitions(-march = native),重新編譯,即可正常運行,不需要重裝pcl -
SLAM參考LOAM進行點雲地圖創建,不同之處我是新建了一個ROS工程,然後將代碼拷貝到src目錄下,進行編譯。如下圖所示,這樣的好處是單獨管理。
-
ROS節點發布消息/mavros/vision_pose/pose,作爲fuse進入EKF2中,首先在QGC中進行修改,如下圖,將EKF2_AID_MASK 修改如下,
若要融合高度信息,修改EKF2_HGT_MODE如下。
-
ROS中/mavros/vision_pose/pose需要加入時間戳信息:
vision_pose.header.stamp = ros::Time::now();
同時,發佈給定座標點讓飛機起飛。
- 注意:飛機需要一個GPS信息作爲絕對位置信息,這樣飛機給定座標點在OFFBOARD模式下起飛,而視覺信息是作爲融合數據進入到反饋環路中的。