Ubuntu20.04仿真 |iris四旋翼添加云台相机详述
申明:
1、本人使用的是Ubuntu20.04+ros1+gazebo+xtdrone+px4的仿真组合
2、为了使传感器模型和飞机模型解耦合,实现不同平台对传感器可直接调用,本系列博文涉及的所有传感器均不直接添加在相应平台的sdf当中,而是通过编写xxx_joint.sdf的形式,将平台和传感器统一,可由launch文件直接拉起。
本博客会先给出创建步骤和注意事项,若希望能够直接获取文件并运行,可跳转至该博客(上述仿真组合的基础配置需已完成):(文件都写好了,这两天会整理完,hhhh,稍等)
一、建立云台模型文件
在自带的模型库中是没有单独的云台模型文件的,但是typhoon_h480中挂载了云台,所以可以从其中把单独的模型文件抽象出来。
https://blog.csdn.net/weixin_42037083/article/details/138291543
先按照上述链接改sdf,完成其中的“一、单独建立云台模型文件”,复制过程中检查link中的url,不要指向typhoon了,而是改为指向iris。
在此基础上
1、添加云台控制插件<plugin name='gimbal_controller' filename='libgazebo_gimbal_controller_plugin.so'>对应段落,使得cgo3在yaw、roll、pitch上添加的控制joint可以生效。
2、libgazebo_gimbal_controller_plugin.so插件中的这三个joint修改,把typhoon删掉
<joint_yaw>typhoon_h480::cgo3_vertical_arm_joint</joint_yaw><joint_roll>typhoon_h480::cgo3_horizontal_arm_joint</joint_roll><joint_pitch>typhoon_h480::cgo3_camera_joint</joint_pitch>
改为:
<joint_yaw>cgo3_vertical_arm_joint</joint_yaw><joint_roll>cgo3_horizontal_arm_joint</joint_roll><joint_pitch>cgo3_camera_joint</joint_pitch>
原本的typhoon_h480::是cgo3挂载在其下的声明。
3、<joint name='cgo3_mount_joint' type='revolute'>这个joint删掉,因为这个对应的link是新创建的cgo3.sdf文件的最高级link,所以在cgo3的sdf中不需要对他做joint,而是在挂载cgo3的飞机/平台的顶层sdf中对cgo3.sdf做引入并添加本joint。其余cgo3.sdf中的link应和joint成对出现。
在原h480文件中这个joint是写向base_link也就是挂载到typhoon飞机上的。
二、修改iris.sdf
为了正常使用cgo3云台相机,还需实现其各自由度旋转对应插件的添加。以下plugin是直接添加在typhoon_h480.sdf中的,作者也尝试将其直接添加在cgo3.sdf当中与iris.sdf共同使用,这样避免修改原有飞机配置文件,但是发现在launch拉起后会出现报错(我认为是拉起的sdf不能在两个地方都出现下述插件)。
因此,我尝试将其添加到iris.sdf中,经过测试拉起仿真环境不会报错。因此复制iris模型文件夹,并将其命名为iris_cgo3以做区分,文件夹结构如下:
图片是在windows下的截图,Ubuntu中结构相同。
1、将原iris.sdf命名为iris_cgo3.sdf以作区分,并将typhoon_h480.sdf中插件mavlink_interface_gimbal_only中的以下部分复制到iris.sdf原有的同名插件中
<channel name="gimbal_roll"><input_index>8</input_index><input_offset>0</input_offset><input_scaling>-3.1415</input_scaling><zero_position_disarmed>0</zero_position_disarmed><zero_position_armed>0</zero_position_armed><joint_control_type>position_gztopic</joint_control_type><gztopic>/cgo3/gimbal_roll_cmd</gztopic><joint_name>cgo3_horizontal_arm_joint</joint_name></channel><channel name="gimbal_pitch"><input_index>9</input_index><input_offset>0</input_offset><input_scaling>-3.1415</input_scaling><zero_position_disarmed>0</zero_position_disarmed><zero_position_armed>0</zero_position_armed><joint_control_type>position_gztopic</joint_control_type><gztopic>/cgo3/gimbal_pitch_cmd</gztopic><joint_name>cgo3_camera_joint</joint_name></channel><channel name="gimbal_yaw"><input_index>10</input_index><input_offset>0</input_offset><input_scaling>-3.1415</input_scaling><zero_position_disarmed>0</zero_position_disarmed><zero_position_armed>0</zero_position_armed><joint_control_type>position_gztopic</joint_control_type><gztopic>/cgo3/gimbal_yaw_cmd</gztopic><joint_name>cgo3_vertical_arm_joint</joint_name></channel>
注意,直接复制博客中提供的部分,或者在typhoon_h480.sdf中复制时每个channel的<input_index>要改。因为iris.sdf中原本就有旋翼舵机的通信通道,且和typhoon_h480数量不同,所以直接复制过来使用会造成冲突。
2、修改model.config
<sdf version='1.6'>iris_cgo3.sdf</sdf>
一定要把这边的文件名改成iris_cgo3.sdf,否则launch拉起时无法正确读取。
三、联合传感器与飞机
1、创建iris_cgo3_joint文件夹,在其中创建iris_cgo3_joint.sdf和model.config
2、在iris_cgo3_joint.sdf中复制以下内容,路径和文件名根据实际文件名修改。
<?xml version="1.0" ?>
<sdf version="1.5"><model name='iris_cgo3_model'><include><uri>model://iris_cgo3</uri></include><include><uri>model://cgo3</uri><pose>0.12 0 0 1.57 0 1.57</pose></include><joint name="cgo3_mount_joint" type="fixed"><!--对应上述cgo3的最高级link
在joint.sdf中引入--><child>cgo3::cgo3_mount_link</child><parent>iris_cgo3::base_link</parent><!--此处parent,child的写法要和模型文件中的model名、link名对应好--><axis><xyz>0 0 1</xyz><limit><upper>0</upper><lower>0</lower></limit></axis></joint></model>
</sdf>
model.config则同理注意sdf文件名修改正确即可