ROS_SLAM調試小結

註明:最終在rivz中沒有看到點雲,原因未知。

  1. 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 … 表示重映射。

  1. rosbag play -l hdl_400.bag表示循環播放bag文件,其中 -l 表示 loop。

  2. rostopic info /topic 可以查看該話題的所屬的消息。如下圖所示,顯示了話題所屬的類型,訂閱者,以及發佈者。
    在這裏插入圖片描述

  3. 參考Loam的編譯安裝運行及可能遇到的問題,完成了PCL庫的安裝。其中遇到如下的錯誤
    在這裏插入圖片描述
    解決方法是:出現multiscanregistration錯誤,在loam_velodyne / CMakeLists.txt,下面刪除第35行, add_definitions(-march = native),重新編譯,即可正常運行,不需要重裝pcl

  4. SLAM參考LOAM進行點雲地圖創建,不同之處我是新建了一個ROS工程,然後將代碼拷貝到src目錄下,進行編譯。如下圖所示,這樣的好處是單獨管理。
    在這裏插入圖片描述

  5. ROS節點發布消息/mavros/vision_pose/pose,作爲fuse進入EKF2中,首先在QGC中進行修改,如下圖,將EKF2_AID_MASK 修改如下,
    在這裏插入圖片描述
    若要融合高度信息,修改EKF2_HGT_MODE如下。
    在這裏插入圖片描述

  6. ROS中/mavros/vision_pose/pose需要加入時間戳信息:

vision_pose.header.stamp = ros::Time::now();

同時,發佈給定座標點讓飛機起飛。

  1. 注意:飛機需要一個GPS信息作爲絕對位置信息,這樣飛機給定座標點在OFFBOARD模式下起飛,而視覺信息是作爲融合數據進入到反饋環路中的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章