README

as2_gazebo_assets

Colletion of AS2 Gazebo assets and launching scripts.

Tested on Gazebo Fortress. Make sure to have it installed.

Gazebo naming has changed between ROS2 Galactic and ROS2 Humble releases (Gazeno new era). You should use as2_gazebo_assets package version corresponding to your ROS2 version.

INDEX


RESOURCES

There are distinguish three kinds of reources: drone, sensor and world models.

DRONE MODELS

Drone model list.

SDF Name

Status

Image

quadroto_base

FLYING

hexrotor_base

FLYING

crazyflie

UNSTABLE FLYING

SENSOR MODELS

Sensor model list.

SDF Name

Description

Plugin

imu

NOT SDF: Alreay included in drone models. IMU sensor reports vertical position, angular velocity and linear acceleration readings.

ignition::gazebo::systems::Imu

air_pressure

Air pressure sensor reports vertical position and velocity readings.

ignition::gazebo::systems::AirPressure

magnetometer

Magnetometer sensor reports the magnetic field in its current location.

ignition::gazebo::systems::Magnetometer

hd_camera

RGB Camera with 1280x960 resolution.

-

vga_camera

RGB Camera with 640x480 resolution.

-

semantic_camera

RGB Camera with 1280x960 resolution with semantic segmentation data.

-

rgbd_camera

RGBD Camera with 640x480 resolution and 10 meters of depth sensing.

-

point_lidar

Single point lidar with 40 meter range.

-

planar_lidar

Planar scanning two-dimension lidar with 30 meter range.

-

3d_lidar

Three-dimensional scan with 100 meter range.

-

gps

Navigation satellite sensor reports position and velocity in spherical coordinates (latitude / longitude).

ignition::gazebo::systems::NavSat

suction_gripper

Light weight suction gripper.

mbzirc::SuctionGripperPlugin

WORLD MODELS

World model list.

SDF Name

Description

Image

empty

Empty world with ground.

test_gripper

Empty world with two small objects to test the gripper.

empty_gps

Empty world with ground and gps enabled

HOW TO RUN: Basic usage

Previously setting AS2 environment, simply run:

ros2 launch as2_gazebo_assets launch_simulation.py config_file:=<config-file>

This will run for you ign gazebo server, spawn all models from your config file and open ign gazebo client (GUI).

OPTIONS

  • config_file: Launch config file (JSON or YAML format).

  • gui_config_file: GUI config file. (default: ‘’)

  • use_sim_time: Deactivates clock bridge and object publishes tf in sys clock time. Valid choices are: [‘true’, ‘false’] (default: ‘true’)

  • headless: Launch in headless mode (only ign server). Valid choices are: [‘true’, ‘false’] (default: ‘false’)

  • verbose: Launch in verbose mode. Valid choices are: [‘true’, ‘false’] (default: ‘false’)

  • run_on_start: Run simulation on start. Valid choices are: [‘true’, ‘false’] (default: ‘true’)

CONFIG FILE

Using a config file lets you to set the simulation environment. You can select a world (or none) and attach to it a number of desired drones with desired model, position and set of sensors (payload). Also, you can add objects with desired joints or brigdes to the world. Please pay atention to the format file, otherwise it may fail.

JSON file template:

{
    "world": "<world-name>",                // optional: deafult world if empty
    "drones": [                             // optional: no drones if empty
        {
            "model_type": "<model-name>",       // optional: default model if empty
            "model_name": "<namespace>",        // optional: default namespace if empty
            "xyz": [<x>, <y>, <z>],             // optional: [0, 0, 0] if empty
            "rpy": [<roll>, <pitch>, <yaw>],    // optional: [0, 0, 0] if empty
            "flight_time": <min>,               // optional: 0 or empty means not use battery
            "payload": [                        // optional: no sensors if none
                {
                    "model_type": "<sensor-type>",   // REQUIRED if sensor is used
                    "model_name": "<sensor-name>",   // REQUIRED if sensor is used
                    "xyz": [<x>, <y>, <z>],          // optional: [0, 0, 0] if empty
                    "rpy": [<roll>, <pitch>, <yaw>], // optional: [0, 0, 0] if empty
                },
                {
                    // Second sensor...
                }
            ]
        },
        {
            // Second drone...
        }
    ],
    "objects": [                            // optional: no objects if empty
        {
            "model_name": "<object-name>",      // REQUIRED if object used
            "model_type": "<object-type>",      // REQUIRED if object used
            "xyz": [<x>, <y>, <z>],             // optional: [0, 0, 0] if empty
            "rpy": [<roll>, <pitch>, <yaw>],    // optional: [0, 0, 0] if empty
            "joints": ["<joint>"],              // optional: [] if empty
            "object_bridges": ["<bridge>"],     // optional: [] if empty
            "tf_broadcaster": <true/false>,     // optional: true if empty
            "use_sim_time": <true/false>        // optional: true if empty
        },
        {
            // Second object...
        }
    ]
}

Notice that comments are not available in JSON format and fields between “<” and “>” should be replaced with each value or removed (along with the field) if is not wanted or required.

Example of a valid JSON config file:

{
    "world_name": "empty_gps",
    "drones": [
        {
            "model_type": "quadrotor_base",
            "model_name": "drone_sim_0",
            "xyz": [ 0.0, 0.0, 0.3 ],
            "payload": [
                {
                    "model_type": "gps",
                    "model_name": "gps"
                },
                {
                    "model_type": "hd_camera",
                    "model_name": "hd_camera"
                }
            ]
        }
    ],
    "objects": [
        {
            "model_type": "windmill",
            "model_name": "windmill_0",
            "xyz": [ 15.0, 0.0, 0.3 ],
            "rpy": [ 0, 0, -1.57 ],
            "joints": ["motor_link_joint", "blades_link_joint"],
            "object_bridges": ["pose"]
        }
    ]
}

EXAMPLES

Several examples can be found on test folder.