Implementing gimbal control on IRIS model
Hello, I'm trying to implement gimbal control with the "iris" drone. I can implement fly the drone using sitl and QGC, but when i try to add a control for tilt joint I cant get a mavlink connction..
This is the code (the control i added is channel 5 )
<?xml version='1.0'?>
<include>
<uri>model://gimbal_small_2d</uri>
<pose>0 -0.01 0.070 1.57 0 1.57</pose>
</include>
!-->
<joint name="iris_gimbal_mount" type="revolute">
<parent>iris::base_link</parent>
<child>gimbal_small_2d::base_link</child>
<axis>
<xyz>0 0 1</xyz>
<limit>
<upper>0</upper>
<lower>0</lower>
</limit>
<use_parent_model_frame>true</use_parent_model_frame>
</axis>
</joint>
<!-- visual markers for debugging
<link name="rotor_0_blade_1_cp">
<gravity>0</gravity>
<pose>0.13 -0.22 0.216 0 -0 0</pose>
<visual name='rotor_0_visual_root'>
<pose>0 0 0 0 -0 0</pose>
<geometry>
<sphere>
<radius>0.01</radius>
</sphere>
</geometry>
</visual>
<visual name='rotor_0_visual_tip'>
<pose>0.12 0 0 0 -0 0</pose>
<geometry>
<sphere>
<radius>0.01</radius>
</sphere>
</geometry>
</visual>
<visual name='rotor_0_visual_cp'>
<pose>0.084 0 0 0 -0 0</pose>
<geometry>
<sphere>
<radius>0.003</radius>
</sphere>
</geometry>
</visual>
<visual name='rotor_0_visual_cp_forward'>
<pose>0.084 0.02 0 0 -0 0</pose>
<geometry>
<sphere>
<radius>0.003</radius>
</sphere>
</geometry>
</visual>
<visual name='rotor_0_visual_cp_upward'>
<pose>0.084 0 0.02 0 -0 0</pose>
<geometry>
<sphere>
<radius>0.003</radius>
</sphere>
</geometry>
</visual>
</link>
<link name="rotor_0_blade_2_cp">
<gravity>0</gravity>
<pose>0.13 -0.22 0.216 0 -0 0</pose>
<visual name='rotor_0_visual_root'>
<pose>0 0 0 0 -0 0</pose>
<geometry>
<sphere>
<radius>0.01</radius>
</sphere>
</geometry>
</visual>
<visual name='rotor_0_visual_tip'>
<pose>-0.12 0 0 0 -0 0</pose>
<geometry>
<sphere>
<radius>0.01</radius>
</sphere>
</geometry>
</visual>
<visual name='rotor_0_visual_cp'>
<pose>-0.084 0 0 0 -0 0</pose>
<geometry>
<sphere>
<radius>0.003</radius>
</sphere>
</geometry>
</visual>
<visual name='rotor_0_visual_cp_forward'>
<pose>-0.084 -0.02 0 0 -0 0</pose>
<geometry>
<sphere>
<radius>0.003</radius>
</sphere>
</geometry>
</visual>
<visual name='rotor_0_visual_cp_upward'>
<pose>-0.084 0 0.02 0 -0 0</pose>
<geometry>
<sphere>
<radius>0.003</radius>
</sphere>
</geometry>
</visual>
</link>
<link name="rotor_1_blade_1_cp">
<gravity>0</gravity>
<pose>-0.13 0.2 0.216 0 -0 0</pose>
<visual name='rotor_1_visual_root'>
<pose>0 0 0 0 -0 0</pose>
<geometry>
<sphere>
<radius>0.01</radius>
</sphere>
</geometry>
</visual>
<visual name='rotor_1_visual_tip'>
<pose>0.12 0 0 0 -0 0</pose>
<geometry>
<sphere>
<radius>0.01</radius>
</sphere>
</geometry>
</visual>
<visual name='rotor_1_visual_cp'>
<pose>0.084 0 0 0 -0 0</pose>
<geometry>
<sphere>
<radius>0.003</radius>
</sphere>
</geometry>
</visual>
<visual name='rotor_1_visual_cp_forward'>
<pose>0.084 0.02 0 0 -0 0</pose>
<geometry>
<sphere>
<radius>0.003</radius>
</sphere>
</geometry>
</visual>
<visual name='rotor_1_visual_cp_upward'>
<pose>0.084 0 0.02 0 -0 0</pose>
<geometry>
<sphere>
<radius>0.003</radius>
</sphere>
</geometry>
</visual>
</link>
<link name="rotor_1_blade_2_cp">
<gravity>0</gravity>
<pose>-0.13 0.2 0.216 0 -0 0</pose>
<visual name='rotor_1_visual_root'>
<pose>0 0 0 0 -0 0</pose>
<geometry>
<sphere>
<radius>0.01</radius>
</sphere>
</geometry>
</visual>
<visual name='rotor_1_visual_tip'>
<pose>-0.12 0 0 0 -0 0</pose>
<geometry>
<sphere>
<radius>0.01</radius>
</sphere>
</geometry>
</visual>
<visual name='rotor_1_visual_cp'>
<pose>-0.084 0 0 0 -0 0</pose>
<geometry>
<sphere>
<radius>0.003</radius>
</sphere>
</geometry>
</visual>
<visual name='rotor_1_visual_cp_forward'>
<pose>-0.084 -0.02 0 0 -0 0</pose>
<geometry>
<sphere>
<radius>0.003</radius>
</sphere>
</geometry>
</visual>
<visual name='rotor_1_visual_cp_upward'>
<pose>-0.084 0 0.02 0 -0 0</pose>
<geometry>
<sphere>
<radius>0.003</radius>
</sphere>
</geometry>
</visual>
</link>
<link name="rotor_2_blade_1_cp">
<gravity>0</gravity>
<pose>0.13 0.22 0.216 0 -0 0</pose>
<visual name='rotor_2_visual_root'>
<pose>0 0 0 0 -0 0</pose>
<geometry>
<sphere>
<radius>0.01</radius>
</sphere>
</geometry>
</visual>
<visual name='rotor_2_visual_tip'>
<pose>0.12 0 0 0 -0 0</pose>
<geometry>
<sphere>
<radius>0.01</radius>
</sphere>
</geometry>
</visual>
<visual name='rotor_2_visual_cp'>
<pose>0.084 0 0 0 -0 0</pose>
<geometry>
<sphere>
<radius>0.003</radius>
</sphere>
</geometry>
</visual>
<visual name='rotor_2_visual_cp_forward'>
<pose>0.084 -0.02 0 0 -0 0</pose>
<geometry>
<sphere>
<radius>0.003</radius>
</sphere>
</geometry>
</visual>
<visual name='rotor_2_visual_cp_upward'>
<pose>0.084 0 0.02 0 -0 0</pose>
<geometry>
<sphere>
<radius>0.003</radius>
</sphere>
</geometry>
</visual>
</link>
<link name="rotor_2_blade_2_cp">
<gravity>0</gravity>
<pose>0.13 0.22 0.216 0 -0 0</pose>
<visual name='rotor_2_visual_root'>
<pose>0 0 0 0 -0 0</pose>
<geometry>
<sphere>
<radius>0.01</radius>
</sphere>
</geometry>
</visual>
<visual name='rotor_2_visual_tip'>
<pose>-0.12 0 0 0 -0 0</pose>
<geometry>
<sphere>
<radius>0.01</radius>
</sphere>
</geometry>
</visual>
<visual name='rotor_2_visual_cp'>
<pose>-0.084 0 0 0 -0 0</pose>
<geometry>
<sphere>
<radius>0.003</radius>
</sphere>
</geometry>
</visual>
<visual name='rotor_2_visual_cp_forward'>
<pose>-0.084 0.02 0 0 -0 0</pose>
<geometry>
<sphere>
<radius>0.003</radius>
</sphere>
</geometry>
</visual>
<visual name='rotor_2_visual_cp_upward'>
<pose>-0.084 0 0.02 0 -0 0</pose>
<geometry>
<sphere>
<radius>0.003</radius>
</sphere>
</geometry>
</visual>
</link>
<link name="rotor_3_blade_1_cp">
<gravity>0</gravity>
<pose>-0.13 -0.2 0.216 0 -0 0</pose>
<visual name='rotor_3_visual_root'>
<pose>0 0 0 0 -0 0</pose>
<geometry>
<sphere>
<radius>0.01</radius>
</sphere>
</geometry>
</visual>
<visual name='rotor_3_visual_tip'>
<pose>0.12 0 0 0 -0 0</pose>
<geometry>
<sphere>
<radius>0.01</radius>
</sphere>
</geometry>
</visual>
<visual name='rotor_3_visual_cp'>
<pose>0.084 0 0 0 -0 0</pose>
<geometry>
<sphere>
<radius>0.003</radius>
</sphere>
</geometry>
</visual>
<visual name='rotor_3_visual_cp_forward'>
<pose>0.084 -0.02 0 0 -0 0</pose>
<geometry>
<sphere>
<radius>0.003</radius>
</sphere>
</geometry>
</visual>
<visual name='rotor_3_visual_cp_upward'>
<pose>0.084 0 0.02 0 -0 0</pose>
<geometry>
<sphere>
<radius>0.003</radius>
</sphere>
</geometry>
</visual>
</link>
<link name="rotor_3_blade_2_cp">
<gravity>0</gravity>
<pose>-0.13 -0.2 0.216 0 -0 0</pose>
<visual name='rotor_3_visual_root'>
<pose>0 0 0 0 -0 0</pose>
<geometry>
<sphere>
<radius>0.01</radius>
</sphere>
</geometry>
</visual>
<visual name='rotor_3_visual_tip'>
<pose>-0.12 0 0 0 -0 0</pose>
<geometry>
<sphere>
<radius>0.01</radius>
</sphere>
</geometry>
</visual>
<visual name='rotor_3_visual_cp'>
<pose>-0.084 0 0 0 -0 0</pose>
<geometry>
<sphere>
<radius>0.003</radius>
</sphere>
</geometry>
</visual>
<visual name='rotor_3_visual_cp_forward'>
<pose>-0.084 0.02 0 0 -0 0</pose>
<geometry>
<sphere>
<radius>0.003</radius>
</sphere>
</geometry>
</visual>
<visual name='rotor_3_visual_cp_upward'>
<pose>-0.084 0 0.02 0 -0 0</pose>
<geometry>
<sphere>
<radius>0.003</radius>
</sphere>
</geometry>
</visual>
</link>
-->
<!-- plugins -->
<plugin name="rotor_0_blade_1" filename="libLiftDragPlugin.so">
<a0>0.3</a0>
<alpha_stall>1.4</alpha_stall>
<cla>4.2500</cla>
<cda>0.10</cda>
<cma>0.00</cma>
<cla_stall>-0.025</cla_stall>
<cda_stall>0.0</cda_stall>
<cma_stall>0.0</cma_stall>
<area>0.002</area>
<air_density>1.2041</air_density>
<cp>0.084 0 0</cp>
<forward>0 1 0</forward>
<upward>0 0 1</upward>
<link_name>iris::rotor_0</link_name>
</plugin>
<plugin name="rotor_0_blade_2" filename="libLiftDragPlugin.so">
<a0>0.3</a0>
<alpha_stall>1.4</alpha_stall>
<cla>4.2500</cla>
<cda>0.10</cda>
<cma>0.00</cma>
<cla_stall>-0.025</cla_stall>
<cda_stall>0.0</cda_stall>
<cma_stall>0.0</cma_stall>
<area>0.002</area>
<air_density>1.2041</air_density>
<cp>-0.084 0 0</cp>
<forward>0 -1 0</forward>
<upward>0 0 1</upward>
<link_name>iris::rotor_0</link_name>
</plugin>
<plugin name="rotor_1_blade_1" filename="libLiftDragPlugin.so">
<a0>0.3</a0>
<alpha_stall>1.4</alpha_stall>
<cla>4.2500</cla>
<cda>0.10</cda>
<cma>0.00</cma>
<cla_stall>-0.025</cla_stall>
<cda_stall>0.0</cda_stall>
<cma_stall>0.0</cma_stall>
<area>0.002</area>
<air_density>1.2041</air_density>
<cp>0.084 0 0</cp>
<forward>0 1 0</forward>
<upward>0 0 1</upward>
<link_name>iris::rotor_1</link_name>
</plugin>
<plugin name="rotor_1_blade_2" filename="libLiftDragPlugin.so">
<a0>0.3</a0>
<alpha_stall>1.4</alpha_stall>
<cla>4.2500</cla>
<cda>0.10</cda>
<cma>0.00</cma>
<cla_stall>-0.025</cla_stall>
<cda_stall>0.0</cda_stall>
<cma_stall>0.0</cma_stall>
<area>0.002</area>
<air_density>1.2041</air_density>
<cp>-0.084 0 0</cp>
<forward>0 -1 0</forward>
<upward>0 0 1</upward>
<link_name>iris::rotor_1</link_name>
</plugin>
<plugin name="rotor_2_blade_1" filename="libLiftDragPlugin.so">
<a0>0.3</a0>
<alpha_stall>1.4</alpha_stall>
<cla>4.2500</cla>
<cda>0.10</cda>
<cma>0.00</cma>
<cla_stall>-0.025</cla_stall>
<cda_stall>0.0</cda_stall>
<cma_stall>0.0</cma_stall>
<area>0.002</area>
<air_density>1.2041</air_density>
<cp>0.084 0 0</cp>
<forward>0 -1 0</forward>
<upward>0 0 1</upward>
<link_name>iris::rotor_2</link_name>
</plugin>
<plugin name="rotor_2_blade_2" filename="libLiftDragPlugin.so">
<a0>0.3</a0>
<alpha_stall>1.4</alpha_stall>
<cla>4.2500</cla>
<cda>0.10</cda>
<cma>0.00</cma>
<cla_stall>-0.025</cla_stall>
<cda_stall>0.0</cda_stall>
<cma_stall>0.0</cma_stall>
<area>0.002</area>
<air_density>1.2041</air_density>
<cp>-0.084 0 0</cp>
<forward>0 1 0</forward>
<upward>0 0 1</upward>
<link_name>iris::rotor_2</link_name>
</plugin>
<plugin name="rotor_3_blade_1" filename="libLiftDragPlugin.so">
<a0>0.3</a0>
<alpha_stall>1.4</alpha_stall>
<cla>4.2500</cla>
<cda>0.10</cda>
<cma>0.00</cma>
<cla_stall>-0.025</cla_stall>
<cda_stall>0.0</cda_stall>
<cma_stall>0.0</cma_stall>
<area>0.002</area>
<air_density>1.2041</air_density>
<cp>0.084 0 0</cp>
<forward>0 -1 0</forward>
<upward>0 0 1</upward>
<link_name>iris::rotor_3</link_name>
</plugin>
<plugin name="rotor_3_blade_2" filename="libLiftDragPlugin.so">
<a0>0.3</a0>
<alpha_stall>1.4</alpha_stall>
<cla>4.2500</cla>
<cda>0.10</cda>
<cma>0.00</cma>
<cla_stall>-0.025</cla_stall>
<cda_stall>0.0</cda_stall>
<cma_stall>0.0</cma_stall>
<area>0.002</area>
<air_density>1.2041</air_density>
<cp>-0.084 0 0</cp>
<forward>0 1 0</forward>
<upward>0 0 1</upward>
<link_name>iris::rotor_3</link_name>
</plugin>
<plugin name="arducopter_plugin" filename="libArduPilotPlugin.so">
<fdm_addr>127.0.0.1</fdm_addr>
<fdm_port_in>9002</fdm_port_in>
<fdm_port_out>9003</fdm_port_out>
<!--
Require by APM :
Only change model and gazebo from XYZ to XY-Z coordinates
-->
<modelXYZToAirplaneXForwardZDown>0 0 0 3.141593 0 0</modelXYZToAirplaneXForwardZDown>
<gazeboXYZToNED>0 0 0 3.141593 0 0</gazeboXYZToNED>
<imuName>iris_demo::iris::iris/imu_link::imu_sensor</imuName>
<connectionTimeoutMaxCount>5</connectionTimeoutMaxCount>
<control channel="0">
<!--
incoming control command [0, 1]
so offset it by 0 to get [0, 1]
and divide max target by 1.
offset = 0
multiplier = 838 max rpm / 1 = 838
-->
<type>VELOCITY</type>
<offset>0</offset>
<p_gain>0.20</p_gain>
<i_gain>0</i_gain>
<d_gain>0</d_gain>
<i_max>0</i_max>
<i_min>0</i_min>
<cmd_max>2.5</cmd_max>
<cmd_min>-2.5</cmd_min>
<jointName>iris::rotor_0_joint</jointName>
<multiplier>838</multiplier>
<controlVelocitySlowdownSim>1</controlVelocitySlowdownSim>
</control>
<control channel="1">
<type>VELOCITY</type>
<offset>0</offset>
<p_gain>0.20</p_gain>
<i_gain>0</i_gain>
<d_gain>0</d_gain>
<i_max>0</i_max>
<i_min>0</i_min>
<cmd_max>2.5</cmd_max>
<cmd_min>-2.5</cmd_min>
<jointName>iris::rotor_1_joint</jointName>
<multiplier>838</multiplier>
<controlVelocitySlowdownSim>1</controlVelocitySlowdownSim>
</control>
<control channel="2">
<type>VELOCITY</type>
<offset>0</offset>
<p_gain>0.20</p_gain>
<i_gain>0</i_gain>
<d_gain>0</d_gain>
<i_max>0</i_max>
<i_min>0</i_min>
<cmd_max>2.5</cmd_max>
<cmd_min>-2.5</cmd_min>
<jointName>iris::rotor_2_joint</jointName>
<multiplier>-838</multiplier>
<controlVelocitySlowdownSim>1</controlVelocitySlowdownSim>
</control>
<control channel="3">
<type>VELOCITY</type>
<offset>0</offset>
<p_gain>0.20</p_gain>
<i_gain>0</i_gain>
<d_gain>0</d_gain>
<i_max>0</i_max>
<i_min>0</i_min>
<cmd_max>2.5</cmd_max>
<cmd_min>-2.5</cmd_min>
<jointName>iris::rotor_3_joint</jointName>
<multiplier>-838</multiplier>
<controlVelocitySlowdownSim>1</controlVelocitySlowdownSim>
</control>
<control channel="5">
<type>VELOCITY</type>
<offset>0</offset>
<p_gain>0.20</p_gain>
<i_gain>0</i_gain>
<d_gain>0</d_gain>
<i_max>0</i_max>
<i_min>0</i_min>
<cmd_max>2.5</cmd_max>
<cmd_min>-2.5</cmd_min>
<jointName>iris::gimbal_small_2d::tilt_joint</jointName>
<multiplier>-838</multiplier>
<controlVelocitySlowdownSim>1</controlVelocitySlowdownSim>
</control>
</plugin>
thank you
Asked by gimbaliris on 2020-08-11 07:48:27 UTC
Answers
If you are running PX4, you can try using the typhoon_h480
model which has gimbal controls already running: https://github.com/PX4/sitl_gazebo/tree/master/models/typhoon_h480
Asked by Jaeyoung-Lim on 2020-08-19 06:36:38 UTC
Comments