401 lines
13 KiB
XML
401 lines
13 KiB
XML
<?xml version="1.0" ?>
|
|
<!--
|
|
Simple Quadrotor Drone Model for Competition
|
|
|
|
Features:
|
|
- Box body with 4 rotors
|
|
- IMU sensor
|
|
- MulticopterMotorModel plugin for flight dynamics
|
|
- Pose publisher for telemetry
|
|
-->
|
|
<sdf version="1.8">
|
|
<model name="competition_drone">
|
|
<pose>0 0 5 0 0 0</pose>
|
|
|
|
<!-- Main body -->
|
|
<link name="base_link">
|
|
<inertial>
|
|
<mass>1.0</mass>
|
|
<inertia>
|
|
<ixx>0.029125</ixx>
|
|
<ixy>0</ixy>
|
|
<ixz>0</ixz>
|
|
<iyy>0.029125</iyy>
|
|
<iyz>0</iyz>
|
|
<izz>0.055225</izz>
|
|
</inertia>
|
|
</inertial>
|
|
|
|
<collision name="body_collision">
|
|
<geometry>
|
|
<box>
|
|
<size>0.3 0.3 0.1</size>
|
|
</box>
|
|
</geometry>
|
|
</collision>
|
|
|
|
<visual name="body_visual">
|
|
<geometry>
|
|
<box>
|
|
<size>0.3 0.3 0.1</size>
|
|
</box>
|
|
</geometry>
|
|
<material>
|
|
<ambient>0.6 0.1 0.1 1</ambient>
|
|
<diffuse>0.8 0.2 0.2 1</diffuse>
|
|
<specular>0.2 0.2 0.2 1</specular>
|
|
</material>
|
|
</visual>
|
|
|
|
<!-- Front-left arm -->
|
|
<visual name="arm_fl">
|
|
<pose>0.12 0.12 0 0 0 0.785</pose>
|
|
<geometry>
|
|
<box>
|
|
<size>0.2 0.02 0.02</size>
|
|
</box>
|
|
</geometry>
|
|
<material>
|
|
<ambient>0.2 0.2 0.2 1</ambient>
|
|
<diffuse>0.3 0.3 0.3 1</diffuse>
|
|
</material>
|
|
</visual>
|
|
|
|
<!-- Front-right arm -->
|
|
<visual name="arm_fr">
|
|
<pose>0.12 -0.12 0 0 0 -0.785</pose>
|
|
<geometry>
|
|
<box>
|
|
<size>0.2 0.02 0.02</size>
|
|
</box>
|
|
</geometry>
|
|
<material>
|
|
<ambient>0.2 0.2 0.2 1</ambient>
|
|
<diffuse>0.3 0.3 0.3 1</diffuse>
|
|
</material>
|
|
</visual>
|
|
|
|
<!-- Back-left arm -->
|
|
<visual name="arm_bl">
|
|
<pose>-0.12 0.12 0 0 0 -0.785</pose>
|
|
<geometry>
|
|
<box>
|
|
<size>0.2 0.02 0.02</size>
|
|
</box>
|
|
</geometry>
|
|
<material>
|
|
<ambient>0.2 0.2 0.2 1</ambient>
|
|
<diffuse>0.3 0.3 0.3 1</diffuse>
|
|
</material>
|
|
</visual>
|
|
|
|
<!-- Back-right arm -->
|
|
<visual name="arm_br">
|
|
<pose>-0.12 -0.12 0 0 0 0.785</pose>
|
|
<geometry>
|
|
<box>
|
|
<size>0.2 0.02 0.02</size>
|
|
</box>
|
|
</geometry>
|
|
<material>
|
|
<ambient>0.2 0.2 0.2 1</ambient>
|
|
<diffuse>0.3 0.3 0.3 1</diffuse>
|
|
</material>
|
|
</visual>
|
|
|
|
<!-- IMU Sensor -->
|
|
<sensor name="imu_sensor" type="imu">
|
|
<always_on>true</always_on>
|
|
<update_rate>100</update_rate>
|
|
<imu>
|
|
<angular_velocity>
|
|
<x><noise type="gaussian"><mean>0</mean><stddev>0.01</stddev></noise></x>
|
|
<y><noise type="gaussian"><mean>0</mean><stddev>0.01</stddev></noise></y>
|
|
<z><noise type="gaussian"><mean>0</mean><stddev>0.01</stddev></noise></z>
|
|
</angular_velocity>
|
|
<linear_acceleration>
|
|
<x><noise type="gaussian"><mean>0</mean><stddev>0.1</stddev></noise></x>
|
|
<y><noise type="gaussian"><mean>0</mean><stddev>0.1</stddev></noise></y>
|
|
<z><noise type="gaussian"><mean>0</mean><stddev>0.1</stddev></noise></z>
|
|
</linear_acceleration>
|
|
</imu>
|
|
</sensor>
|
|
|
|
<!-- Downward-facing Camera -->
|
|
<sensor name="camera" type="camera">
|
|
<pose>0 0 -0.05 0 1.5708 0</pose>
|
|
<always_on>true</always_on>
|
|
<update_rate>30</update_rate>
|
|
<camera>
|
|
<horizontal_fov>1.047</horizontal_fov>
|
|
<image>
|
|
<width>320</width>
|
|
<height>240</height>
|
|
<format>R8G8B8</format>
|
|
</image>
|
|
<clip>
|
|
<near>0.1</near>
|
|
<far>20</far>
|
|
</clip>
|
|
</camera>
|
|
<topic>/drone/camera</topic>
|
|
</sensor>
|
|
</link>
|
|
|
|
<!-- Rotor 1 (Front-Left, CCW) -->
|
|
<link name="rotor_fl">
|
|
<pose>0.17 0.17 0.05 0 0 0</pose>
|
|
<inertial>
|
|
<mass>0.01</mass>
|
|
<inertia>
|
|
<ixx>0.00001</ixx><ixy>0</ixy><ixz>0</ixz>
|
|
<iyy>0.00001</iyy><iyz>0</iyz>
|
|
<izz>0.00002</izz>
|
|
</inertia>
|
|
</inertial>
|
|
<visual name="rotor_visual">
|
|
<geometry>
|
|
<cylinder>
|
|
<radius>0.08</radius>
|
|
<length>0.01</length>
|
|
</cylinder>
|
|
</geometry>
|
|
<material>
|
|
<ambient>0.1 0.1 0.1 1</ambient>
|
|
<diffuse>0.2 0.2 0.2 1</diffuse>
|
|
</material>
|
|
</visual>
|
|
</link>
|
|
<joint name="rotor_fl_joint" type="revolute">
|
|
<parent>base_link</parent>
|
|
<child>rotor_fl</child>
|
|
<axis>
|
|
<xyz>0 0 1</xyz>
|
|
<limit><lower>-1e16</lower><upper>1e16</upper></limit>
|
|
</axis>
|
|
</joint>
|
|
|
|
<!-- Rotor 2 (Front-Right, CW) -->
|
|
<link name="rotor_fr">
|
|
<pose>0.17 -0.17 0.05 0 0 0</pose>
|
|
<inertial>
|
|
<mass>0.01</mass>
|
|
<inertia>
|
|
<ixx>0.00001</ixx><ixy>0</ixy><ixz>0</ixz>
|
|
<iyy>0.00001</iyy><iyz>0</iyz>
|
|
<izz>0.00002</izz>
|
|
</inertia>
|
|
</inertial>
|
|
<visual name="rotor_visual">
|
|
<geometry>
|
|
<cylinder>
|
|
<radius>0.08</radius>
|
|
<length>0.01</length>
|
|
</cylinder>
|
|
</geometry>
|
|
<material>
|
|
<ambient>0.1 0.1 0.1 1</ambient>
|
|
<diffuse>0.2 0.2 0.2 1</diffuse>
|
|
</material>
|
|
</visual>
|
|
</link>
|
|
<joint name="rotor_fr_joint" type="revolute">
|
|
<parent>base_link</parent>
|
|
<child>rotor_fr</child>
|
|
<axis>
|
|
<xyz>0 0 1</xyz>
|
|
<limit><lower>-1e16</lower><upper>1e16</upper></limit>
|
|
</axis>
|
|
</joint>
|
|
|
|
<!-- Rotor 3 (Back-Left, CW) -->
|
|
<link name="rotor_bl">
|
|
<pose>-0.17 0.17 0.05 0 0 0</pose>
|
|
<inertial>
|
|
<mass>0.01</mass>
|
|
<inertia>
|
|
<ixx>0.00001</ixx><ixy>0</ixy><ixz>0</ixz>
|
|
<iyy>0.00001</iyy><iyz>0</iyz>
|
|
<izz>0.00002</izz>
|
|
</inertia>
|
|
</inertial>
|
|
<visual name="rotor_visual">
|
|
<geometry>
|
|
<cylinder>
|
|
<radius>0.08</radius>
|
|
<length>0.01</length>
|
|
</cylinder>
|
|
</geometry>
|
|
<material>
|
|
<ambient>0.1 0.1 0.1 1</ambient>
|
|
<diffuse>0.2 0.2 0.2 1</diffuse>
|
|
</material>
|
|
</visual>
|
|
</link>
|
|
<joint name="rotor_bl_joint" type="revolute">
|
|
<parent>base_link</parent>
|
|
<child>rotor_bl</child>
|
|
<axis>
|
|
<xyz>0 0 1</xyz>
|
|
<limit><lower>-1e16</lower><upper>1e16</upper></limit>
|
|
</axis>
|
|
</joint>
|
|
|
|
<!-- Rotor 4 (Back-Right, CCW) -->
|
|
<link name="rotor_br">
|
|
<pose>-0.17 -0.17 0.05 0 0 0</pose>
|
|
<inertial>
|
|
<mass>0.01</mass>
|
|
<inertia>
|
|
<ixx>0.00001</ixx><ixy>0</ixy><ixz>0</ixz>
|
|
<iyy>0.00001</iyy><iyz>0</iyz>
|
|
<izz>0.00002</izz>
|
|
</inertia>
|
|
</inertial>
|
|
<visual name="rotor_visual">
|
|
<geometry>
|
|
<cylinder>
|
|
<radius>0.08</radius>
|
|
<length>0.01</length>
|
|
</cylinder>
|
|
</geometry>
|
|
<material>
|
|
<ambient>0.1 0.1 0.1 1</ambient>
|
|
<diffuse>0.2 0.2 0.2 1</diffuse>
|
|
</material>
|
|
</visual>
|
|
</link>
|
|
<joint name="rotor_br_joint" type="revolute">
|
|
<parent>base_link</parent>
|
|
<child>rotor_br</child>
|
|
<axis>
|
|
<xyz>0 0 1</xyz>
|
|
<limit><lower>-1e16</lower><upper>1e16</upper></limit>
|
|
</axis>
|
|
</joint>
|
|
|
|
<!-- MulticopterMotorModel Plugin for each rotor -->
|
|
<plugin filename="gz-sim-multicopter-motor-model-system" name="gz::sim::systems::MulticopterMotorModel">
|
|
<robotNamespace>drone</robotNamespace>
|
|
<jointName>rotor_fl_joint</jointName>
|
|
<linkName>rotor_fl</linkName>
|
|
<turningDirection>ccw</turningDirection>
|
|
<timeConstantUp>0.0125</timeConstantUp>
|
|
<timeConstantDown>0.025</timeConstantDown>
|
|
<maxRotVelocity>1000</maxRotVelocity>
|
|
<motorConstant>8.54858e-06</motorConstant>
|
|
<momentConstant>0.016</momentConstant>
|
|
<commandSubTopic>command/motor_speed</commandSubTopic>
|
|
<motorNumber>0</motorNumber>
|
|
<rotorDragCoefficient>0.000806428</rotorDragCoefficient>
|
|
<rollingMomentCoefficient>1e-06</rollingMomentCoefficient>
|
|
<rotorVelocitySlowdownSim>10</rotorVelocitySlowdownSim>
|
|
</plugin>
|
|
|
|
<plugin filename="gz-sim-multicopter-motor-model-system" name="gz::sim::systems::MulticopterMotorModel">
|
|
<robotNamespace>drone</robotNamespace>
|
|
<jointName>rotor_fr_joint</jointName>
|
|
<linkName>rotor_fr</linkName>
|
|
<turningDirection>cw</turningDirection>
|
|
<timeConstantUp>0.0125</timeConstantUp>
|
|
<timeConstantDown>0.025</timeConstantDown>
|
|
<maxRotVelocity>1000</maxRotVelocity>
|
|
<motorConstant>8.54858e-06</motorConstant>
|
|
<momentConstant>0.016</momentConstant>
|
|
<commandSubTopic>command/motor_speed</commandSubTopic>
|
|
<motorNumber>1</motorNumber>
|
|
<rotorDragCoefficient>0.000806428</rotorDragCoefficient>
|
|
<rollingMomentCoefficient>1e-06</rollingMomentCoefficient>
|
|
<rotorVelocitySlowdownSim>10</rotorVelocitySlowdownSim>
|
|
</plugin>
|
|
|
|
<plugin filename="gz-sim-multicopter-motor-model-system" name="gz::sim::systems::MulticopterMotorModel">
|
|
<robotNamespace>drone</robotNamespace>
|
|
<jointName>rotor_bl_joint</jointName>
|
|
<linkName>rotor_bl</linkName>
|
|
<turningDirection>cw</turningDirection>
|
|
<timeConstantUp>0.0125</timeConstantUp>
|
|
<timeConstantDown>0.025</timeConstantDown>
|
|
<maxRotVelocity>1000</maxRotVelocity>
|
|
<motorConstant>8.54858e-06</motorConstant>
|
|
<momentConstant>0.016</momentConstant>
|
|
<commandSubTopic>command/motor_speed</commandSubTopic>
|
|
<motorNumber>2</motorNumber>
|
|
<rotorDragCoefficient>0.000806428</rotorDragCoefficient>
|
|
<rollingMomentCoefficient>1e-06</rollingMomentCoefficient>
|
|
<rotorVelocitySlowdownSim>10</rotorVelocitySlowdownSim>
|
|
</plugin>
|
|
|
|
<plugin filename="gz-sim-multicopter-motor-model-system" name="gz::sim::systems::MulticopterMotorModel">
|
|
<robotNamespace>drone</robotNamespace>
|
|
<jointName>rotor_br_joint</jointName>
|
|
<linkName>rotor_br</linkName>
|
|
<turningDirection>ccw</turningDirection>
|
|
<timeConstantUp>0.0125</timeConstantUp>
|
|
<timeConstantDown>0.025</timeConstantDown>
|
|
<maxRotVelocity>1000</maxRotVelocity>
|
|
<motorConstant>8.54858e-06</motorConstant>
|
|
<momentConstant>0.016</momentConstant>
|
|
<commandSubTopic>command/motor_speed</commandSubTopic>
|
|
<motorNumber>3</motorNumber>
|
|
<rotorDragCoefficient>0.000806428</rotorDragCoefficient>
|
|
<rollingMomentCoefficient>1e-06</rollingMomentCoefficient>
|
|
<rotorVelocitySlowdownSim>10</rotorVelocitySlowdownSim>
|
|
</plugin>
|
|
|
|
<!-- Multicopter Velocity Controller -->
|
|
<plugin filename="gz-sim-multicopter-control-system" name="gz::sim::systems::MulticopterVelocityControl">
|
|
<robotNamespace>drone</robotNamespace>
|
|
<commandSubTopic>cmd_vel</commandSubTopic>
|
|
<enableSubTopic>enable</enableSubTopic>
|
|
<comLinkName>base_link</comLinkName>
|
|
<velocityGain>2.7 2.7 2.7</velocityGain>
|
|
<attitudeGain>2 3 0.15</attitudeGain>
|
|
<angularRateGain>0.4 0.52 0.18</angularRateGain>
|
|
<maximumLinearAcceleration>2 2 2</maximumLinearAcceleration>
|
|
|
|
<rotorConfiguration>
|
|
<rotor>
|
|
<jointName>rotor_fl_joint</jointName>
|
|
<forceConstant>8.54858e-06</forceConstant>
|
|
<momentConstant>0.016</momentConstant>
|
|
<direction>1</direction>
|
|
</rotor>
|
|
<rotor>
|
|
<jointName>rotor_fr_joint</jointName>
|
|
<forceConstant>8.54858e-06</forceConstant>
|
|
<momentConstant>0.016</momentConstant>
|
|
<direction>-1</direction>
|
|
</rotor>
|
|
<rotor>
|
|
<jointName>rotor_bl_joint</jointName>
|
|
<forceConstant>8.54858e-06</forceConstant>
|
|
<momentConstant>0.016</momentConstant>
|
|
<direction>-1</direction>
|
|
</rotor>
|
|
<rotor>
|
|
<jointName>rotor_br_joint</jointName>
|
|
<forceConstant>8.54858e-06</forceConstant>
|
|
<momentConstant>0.016</momentConstant>
|
|
<direction>1</direction>
|
|
</rotor>
|
|
</rotorConfiguration>
|
|
</plugin>
|
|
|
|
<!-- Odometry Publisher -->
|
|
<plugin filename="gz-sim-odometry-publisher-system" name="gz::sim::systems::OdometryPublisher">
|
|
<odom_frame>odom</odom_frame>
|
|
<robot_base_frame>base_link</robot_base_frame>
|
|
<odom_publish_frequency>50</odom_publish_frequency>
|
|
</plugin>
|
|
|
|
<!-- Pose Publisher for telemetry -->
|
|
<plugin filename="gz-sim-pose-publisher-system" name="gz::sim::systems::PosePublisher">
|
|
<publish_link_pose>true</publish_link_pose>
|
|
<publish_nested_model_pose>true</publish_nested_model_pose>
|
|
<update_frequency>50</update_frequency>
|
|
</plugin>
|
|
|
|
</model>
|
|
</sdf>
|