Robotics StackExchange | Archived questions

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'?> model://iriswithstandoffs

<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

Comments

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