今天繼續介紹感測器插件的部分,比起模型插件還會用到 PID 控制演算法,感測器插件基本上就是一些感測能力的設置,應該會比模型插件稍微好理解一些。
和模型插件一樣,如果要為模型新增感測器功能,也是模型的 SDF 或 URDF 文件中定義要加入的感測器插件,感測器插件的定義通常包括感測器的類型、更新頻率、輸出資料格式等。
找到在 ardrone_gazebo
專案的 ardrone_gazebo.urdf
檔,文件已經很貼心地把感測器的部分用備註標示出來了,讓我們來看看作者的感測器插件都寫了什麼。
為了讓說明比較有條理一點,我稍微調整了文件內容的順序。
<sensor name='sensor_imu' type='imu'>
<!-- 匯入 so -->
<plugin name='ros_imu' filename='libplugin_ros_imu.so'>
</plugin>
<!-- 一般設置 -->
<always_on> 1 </always_on>
<update_rate> 100 </update_rate>
<pose> 0 0 0 0 0 0 </pose>
<!-- IMU 感測設置 -->
<imu>
<noise>
<type>gaussian</type>
<rate>
<mean> 0 </mean>
<stddev> 0 </stddev>
</rate>
<accel>
<mean> 0 </mean>
<stddev> 0.00 </stddev>
</accel>
</noise>
</imu>
</sensor>
Gazebo 、感測器標籤和插件標籤:
同養也是全部定義在 <gazebo>
標籤中。不過相較於模型插件將參數全部定義在 <plugin>
標籤裡,感測器則是只利用 <plugin>
標籤匯入共享物件檔,其餘設置則是在定義在 <sensor>
標籤裡面。
一般設置:
這邊設定一些感測器的常用的設定,包含啟用狀態與否、更新率和感測器與模型的相對位置。
IMU 感測設置:
這部份描述 IMU 感測器的功能,主要設定了數值的雜訊特性。
在 ardrone_gazebo
專案裡定義無人機有兩個鏡頭,一個前鏡頭(Front Camera)和一個向下鏡頭(Downward Camera),比如說以下這段是向下鏡頭:
<!-- downward looking camera -->
<sensor name="down_camera" type="camera">
<!-- 匯入 so -->
<plugin name='down_camera' filename='libplugin_ros_cam.so'>
<!--
I remvoed the /ardrone part here.
<imageTopicName>/ardrone/down_camera/image_raw</imageTopicName>
-->
<imageTopicName>/down_camera/image_raw</imageTopicName>
</plugin>
<!-- 一般設置 -->
<pose> 0.0 0.0 0.0 0 1.570796326794897 0 </pose> <!-- pitch 設定旋轉 90 度(朝正下方) -->
<always_on>1</always_on>
<update_rate>15</update_rate>
<visualize>true</visualize> <!-- 在 Gazebo 中顯示相機 -->
<!-- 相機感測設置 -->
<camera>
<horizontal_fov>1.047</horizontal_fov>
<image>
<width>640</width>
<height>360</height>
<format>R8G8B8</format>
</image>
<clip>
<near>0.1</near>
<far>100</far>
</clip>
<noise>
<type>gaussian</type>
<mean>0.0</mean>
<stddev>0.005</stddev>
</noise>
</camera>
</sensor>
相機感測設置:
這部份同樣是描述相機的功能,包含視野(Field of view)、影像解析度和格式、剪裁範圍(最近與最遠可以看到的範圍),以及視訊雜訊特性。