226 lines
6.3 KiB
XML
226 lines
6.3 KiB
XML
<?xml version="1.0" ?>
|
|
<!--
|
|
ArduPilot Iris Drone with Camera - GPS-Denied Simulation
|
|
|
|
This world includes:
|
|
- Iris quadcopter with downward camera
|
|
- ArduPilot plugin for SITL
|
|
- Landing pad for targeting
|
|
|
|
Usage:
|
|
gz sim -v4 -r iris_camera.sdf
|
|
sim_vehicle.py -v ArduCopter -f gazebo-iris --model JSON --console
|
|
-->
|
|
<sdf version="1.9">
|
|
<world name="iris_camera_world">
|
|
|
|
<!-- Physics optimized for real-time -->
|
|
<physics name="1ms" type="ode">
|
|
<max_step_size>0.001</max_step_size>
|
|
<real_time_factor>1.0</real_time_factor>
|
|
<real_time_update_rate>1000</real_time_update_rate>
|
|
</physics>
|
|
|
|
<!-- GPU rendering plugins -->
|
|
<plugin filename="gz-sim-physics-system" name="gz::sim::systems::Physics"/>
|
|
<plugin filename="gz-sim-sensors-system" name="gz::sim::systems::Sensors">
|
|
<render_engine>ogre2</render_engine>
|
|
</plugin>
|
|
<plugin filename="gz-sim-user-commands-system" name="gz::sim::systems::UserCommands"/>
|
|
<plugin filename="gz-sim-scene-broadcaster-system" name="gz::sim::systems::SceneBroadcaster"/>
|
|
|
|
<!-- Lighting -->
|
|
<light type="directional" name="sun">
|
|
<cast_shadows>true</cast_shadows>
|
|
<pose>0 0 10 0 0 0</pose>
|
|
<diffuse>0.8 0.8 0.8 1</diffuse>
|
|
<specular>0.2 0.2 0.2 1</specular>
|
|
<attenuation>
|
|
<range>1000</range>
|
|
<constant>0.9</constant>
|
|
<linear>0.01</linear>
|
|
<quadratic>0.001</quadratic>
|
|
</attenuation>
|
|
<direction>-0.5 0.1 -0.9</direction>
|
|
</light>
|
|
|
|
<!-- Sky -->
|
|
<scene>
|
|
<ambient>0.4 0.4 0.4 1</ambient>
|
|
<background>0.7 0.7 0.9 1</background>
|
|
<shadows>true</shadows>
|
|
</scene>
|
|
|
|
<!-- Ground plane with texture -->
|
|
<model name="ground_plane">
|
|
<static>true</static>
|
|
<link name="link">
|
|
<collision name="collision">
|
|
<geometry>
|
|
<plane>
|
|
<normal>0 0 1</normal>
|
|
<size>100 100</size>
|
|
</plane>
|
|
</geometry>
|
|
</collision>
|
|
<visual name="visual">
|
|
<geometry>
|
|
<plane>
|
|
<normal>0 0 1</normal>
|
|
<size>100 100</size>
|
|
</plane>
|
|
</geometry>
|
|
<material>
|
|
<ambient>0.3 0.3 0.3 1</ambient>
|
|
<diffuse>0.5 0.5 0.5 1</diffuse>
|
|
</material>
|
|
</visual>
|
|
</link>
|
|
</model>
|
|
|
|
<!-- Landing Pad (Green with H marker) -->
|
|
<model name="landing_pad">
|
|
<static>false</static>
|
|
<pose>0 0 0.02 0 0 0</pose>
|
|
<link name="pad_link">
|
|
<inertial>
|
|
<mass>50</mass>
|
|
</inertial>
|
|
<collision name="collision">
|
|
<geometry>
|
|
<box>
|
|
<size>1.5 1.5 0.04</size>
|
|
</box>
|
|
</geometry>
|
|
</collision>
|
|
<visual name="visual">
|
|
<geometry>
|
|
<box>
|
|
<size>1.5 1.5 0.04</size>
|
|
</box>
|
|
</geometry>
|
|
<material>
|
|
<ambient>0.1 0.6 0.1 1</ambient>
|
|
<diffuse>0.2 0.8 0.2 1</diffuse>
|
|
</material>
|
|
</visual>
|
|
<!-- H marker -->
|
|
<visual name="h_marker">
|
|
<pose>0 0 0.025 0 0 0</pose>
|
|
<geometry>
|
|
<box>
|
|
<size>0.1 0.6 0.01</size>
|
|
</box>
|
|
</geometry>
|
|
<material>
|
|
<ambient>1 1 1 1</ambient>
|
|
<diffuse>1 1 1 1</diffuse>
|
|
</material>
|
|
</visual>
|
|
<visual name="h_marker_cross">
|
|
<pose>0 0 0.025 0 0 1.5708</pose>
|
|
<geometry>
|
|
<box>
|
|
<size>0.1 0.3 0.01</size>
|
|
</box>
|
|
</geometry>
|
|
<material>
|
|
<ambient>1 1 1 1</ambient>
|
|
<diffuse>1 1 1 1</diffuse>
|
|
</material>
|
|
</visual>
|
|
</link>
|
|
|
|
<!-- Velocity control for moving pad -->
|
|
<plugin filename="gz-sim-velocity-control-system"
|
|
name="gz::sim::systems::VelocityControl">
|
|
<topic>/landing_pad/cmd_vel</topic>
|
|
</plugin>
|
|
</model>
|
|
|
|
<!-- Iris Drone with Camera -->
|
|
<include>
|
|
<uri>model://iris_with_ardupilot</uri>
|
|
<name>iris</name>
|
|
<pose>0 0 0.195 0 0 0</pose>
|
|
</include>
|
|
|
|
<!-- If iris model doesn't exist, create simple drone -->
|
|
<model name="camera_drone">
|
|
<pose>0 2 0.5 0 0 0</pose>
|
|
<link name="base_link">
|
|
<inertial>
|
|
<mass>1.5</mass>
|
|
<inertia>
|
|
<ixx>0.029</ixx>
|
|
<iyy>0.029</iyy>
|
|
<izz>0.055</izz>
|
|
</inertia>
|
|
</inertial>
|
|
|
|
<collision name="collision">
|
|
<geometry>
|
|
<box>
|
|
<size>0.4 0.4 0.1</size>
|
|
</box>
|
|
</geometry>
|
|
</collision>
|
|
|
|
<visual name="body">
|
|
<geometry>
|
|
<box>
|
|
<size>0.4 0.4 0.1</size>
|
|
</box>
|
|
</geometry>
|
|
<material>
|
|
<ambient>0.2 0.2 0.2 1</ambient>
|
|
<diffuse>0.3 0.3 0.3 1</diffuse>
|
|
</material>
|
|
</visual>
|
|
|
|
<!-- Downward 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>640</width>
|
|
<height>480</height>
|
|
<format>R8G8B8</format>
|
|
</image>
|
|
<clip>
|
|
<near>0.1</near>
|
|
<far>100</far>
|
|
</clip>
|
|
</camera>
|
|
<topic>/drone/camera</topic>
|
|
</sensor>
|
|
|
|
<!-- IMU -->
|
|
<sensor name="imu" type="imu">
|
|
<always_on>true</always_on>
|
|
<update_rate>250</update_rate>
|
|
<topic>/drone/imu</topic>
|
|
</sensor>
|
|
</link>
|
|
|
|
<!-- Velocity control -->
|
|
<plugin filename="gz-sim-velocity-control-system"
|
|
name="gz::sim::systems::VelocityControl">
|
|
<topic>/drone/cmd_vel</topic>
|
|
</plugin>
|
|
|
|
<!-- Odometry -->
|
|
<plugin filename="gz-sim-odometry-publisher-system"
|
|
name="gz::sim::systems::OdometryPublisher">
|
|
<odom_topic>/drone/odometry</odom_topic>
|
|
<odom_frame>world</odom_frame>
|
|
<robot_base_frame>camera_drone</robot_base_frame>
|
|
</plugin>
|
|
</model>
|
|
|
|
</world>
|
|
</sdf>
|