libgazebo currently supports the following interfaces:
The camera interface allows clients to read images from a simulated camera. This interface gives the view of the world as the camera onboard a robotic platform would see it. This can be fed to image processing algorithms such as the CMVision blobfinder to recover blobs. Useful for testing visual-servoing type stuff.
// Camera interface
typedef struct _gz_camera_data_t
{
// Common data structure
gz_data_t head;
// Data timestamp
double time;
// Image dimensions
unsigned int width, height;
// Image depth (bits: 8, 16, 24 or 32)
int depth;
// Image pixel data
unsigned int image_size;
unsigned char image[GAZEBO_MAX_IMAGE_SIZE];
} gz_camera_data_t;
// The camera interface
typedef struct _gz_camera_t
{
// General interface info
gz_iface_t *iface;
// Pointer to interface data area
gz_camera_data_t *data;
} gz_camera_t;
// Create an interface
extern gz_camera_t *gz_camera_alloc();
// Destroy an interface
extern void gz_camera_free(gz_camera_t *self);
// Create the interface (used by Gazebo server)
extern int gz_camera_create(gz_camera_t *self, gz_server_t *server, const char *id);
// Destroy the interface (server)
extern int gz_camera_destroy(gz_camera_t *self);
// Open an existing interface (used by Gazebo clients)
extern int gz_camera_open(gz_camera_t *self, gz_client_t *client, const char *id);
// Close the interface (client)
extern int gz_camera_close(gz_camera_t *self);
// Lock the interface. Set blocking to 1 if the caller should block
// until the lock is acquired. Returns 0 if the lock is acquired.
extern int gz_camera_lock(gz_camera_t *self, int blocking);
// Unlock the interface
extern void gz_camera_unlock(gz_camera_t *self);
The factory interface allows clients to send XML strings to a factory in order to dynamically create models.
// Factory interface
typedef struct _gz_factory_data_t
{
// Common data structures
gz_data_t head;
// Data timestamp
double time;
// String describing the model to be instantiated
uint8_t string[4096];
} gz_factory_data_t;
// The position interface
typedef struct _gz_factory_t
{
// General interface info
gz_iface_t *iface;
// Pointer to interface data area
gz_factory_data_t *data;
} gz_factory_t;
// Create an interface
extern gz_factory_t *gz_factory_alloc();
// Destroy an interface
extern void gz_factory_free(gz_factory_t *self);
// Create the interface (used by Gazebo server)
extern int gz_factory_create(gz_factory_t *self, gz_server_t *server, const char *id);
// Destroy the interface (server)
extern int gz_factory_destroy(gz_factory_t *self);
// Open an existing interface (used by Gazebo clients)
extern int gz_factory_open(gz_factory_t *self, gz_client_t *client, const char *id);
// Close the interface (client)
extern int gz_factory_close(gz_factory_t *self);
// Lock the interface. Set blocking to 1 if the caller should block
// until the lock is acquired. Returns 0 if the lock is acquired.
extern int gz_factory_lock(gz_factory_t *self, int blocking);
// Unlock the interface
extern void gz_factory_unlock(gz_factory_t *self);
The fiducial interface allows clients to determine the identity, range, bearing and orientation (relative to some sensor) of objects in the world. For example, this interface is used by the SickLMS200 model to return data from simulated retro-reflective barcodes.
// Data for a single fiducial
typedef struct _gz_fiducial_fid_t
{
// Fiducial id
int id;
// Fiducial range, bearing and orientation
double pose[3];
} gz_fiducial_fid_t;
// Fiducial data
typedef struct _gz_fiducial_data_t
{
// Common data structures
gz_data_t head;
// Data timestamp
double time;
// Observed fiducials
int fid_count;
gz_fiducial_fid_t fids[GZ_FIDUCIAL_MAX_FIDS];
} gz_fiducial_data_t;
// The fiducial interface
typedef struct _gz_fiducial_t
{
// General interface info
gz_iface_t *iface;
// Pointer to interface data area
gz_fiducial_data_t *data;
} gz_fiducial_t;
// Create an interface
extern gz_fiducial_t *gz_fiducial_alloc();
// Destroy an interface
extern void gz_fiducial_free(gz_fiducial_t *self);
// Create the interface (used by Gazebo server)
extern int gz_fiducial_create(gz_fiducial_t *self, gz_server_t *server, const char *id);
// Destroy the interface (server)
extern int gz_fiducial_destroy(gz_fiducial_t *self);
// Open an existing interface (used by Gazebo clients)
extern int gz_fiducial_open(gz_fiducial_t *self, gz_client_t *client, const char *id);
// Close the interface (client)
extern int gz_fiducial_close(gz_fiducial_t *self);
// Lock the interface. Set blocking to 1 if the caller should block
// until the lock is acquired. Returns 0 if the lock is acquired.
extern int gz_fiducial_lock(gz_fiducial_t *self, int blocking);
// Unlock the interface
extern void gz_fiducial_unlock(gz_fiducial_t *self);
The gps interface allows the user to receive GPS (Latitude/Longitude/Altitude) information for the robot platform on which the GPS device is mounted.
// GPS interface
typedef struct _gz_gps_data_t
{
// Common data structure
gz_data_t head;
// Data timestamp
double time;
// Latitude and longitude, in degrees.
double latitude;
double longitude;
// Altitude, in meters.
double altitude;
// UTM coordinates (meters)
double utm_e, utm_n;
// Number of satellites in view.
int satellites;
// Fix quality
int quality;
// Horizontal dilution of position (HDOP)
double hdop;
// Errors
double err_horz, err_vert;
// ?
double origin_longitude, origin_latitude, origin_altitude;
} gz_gps_data_t;
// The GPS interface
typedef struct _gz_gps_t
{
// General interface info
gz_iface_t *iface;
// Pointer to interface data area
gz_gps_data_t *data;
} gz_gps_t;
// Create an interface
extern gz_gps_t *gz_gps_alloc();
// Destroy an interface
extern void gz_gps_free(gz_gps_t *self);
// Create the interface (used by Gazebo server)
extern int gz_gps_create(gz_gps_t *self, gz_server_t *server, const char *id);
// Destroy the interface (server)
extern int gz_gps_destroy(gz_gps_t *self);
// Open an existing interface (used by Gazebo clients)
extern int gz_gps_open(gz_gps_t *self, gz_client_t *client, const char *id);
// Close the interface (client)
extern int gz_gps_close(gz_gps_t *self);
// Lock the interface. Set blocking to 1 if the caller should block
// until the lock is acquired. Returns 0 if the lock is acquired.
extern int gz_gps_lock(gz_gps_t *self, int blocking);
// Unlock the interface
extern void gz_gps_unlock(gz_gps_t *self);
The laser interface allows clients to read data from a simulated laser range finder (such as the SICK LMS200). Some configuration of this device is also allowed.
// Laser data
typedef struct _gz_laser_data_t
{
// Common data structures
gz_data_t head;
// Data timestamp
double time;
// Range scan angles
double min_angle, max_angle;
// Angular resolution
double res_angle;
// Max range value
double max_range;
// Range readings
int range_count;
double ranges[GZ_LASER_MAX_RANGES];
int intensity[GZ_LASER_MAX_RANGES];
} gz_laser_data_t;
// The laser interface
typedef struct _gz_laser_t
{
// General interface info
gz_iface_t *iface;
// Pointer to interface data area
gz_laser_data_t *data;
} gz_laser_t;
// Create an interface
extern gz_laser_t *gz_laser_alloc();
// Destroy an interface
extern void gz_laser_free(gz_laser_t *self);
// Create the interface (used by Gazebo server)
extern int gz_laser_create(gz_laser_t *self, gz_server_t *server, const char *id);
// Destroy the interface (server)
extern int gz_laser_destroy(gz_laser_t *self);
// Open an existing interface (used by Gazebo clients)
extern int gz_laser_open(gz_laser_t *self, gz_client_t *client, const char *id);
// Close the interface (client)
extern int gz_laser_close(gz_laser_t *self);
// Lock the interface. Set blocking to 1 if the caller should block
// until the lock is acquired. Returns 0 if the lock is acquired.
extern int gz_laser_lock(gz_laser_t *self, int blocking);
// Unlock the interface
extern void gz_laser_unlock(gz_laser_t *self);
The position interface allows clients to send commands to and read odometric data from simulated mobile robot bases, such as the Pioneer2AT or ATRV Jr.
// Position interface
typedef struct _gz_position_data_t
{
// Common data structures
gz_data_t head;
// Data timestamp
double time;
// Pose (usually global cs); rotation is specified by euler angles
double pos[3];
double rot[3];
// Velocity; rotation is specified by euler angles
double vel_pos[3];
double vel_rot[3];
// Motor stall flag
int stall;
// Enable the motors
int cmd_enable_motors;
// Commanded robot velocities (robot cs); rotation is specified by euler angles
double cmd_vel_pos[3];
double cmd_vel_rot[3];
} gz_position_data_t;
// The position interface
typedef struct _gz_position_t
{
// General interface info
gz_iface_t *iface;
// Pointer to interface data area
gz_position_data_t *data;
} gz_position_t;
// Create an interface
extern gz_position_t *gz_position_alloc();
// Destroy an interface
extern void gz_position_free(gz_position_t *self);
// Create the interface (used by Gazebo server)
extern int gz_position_create(gz_position_t *self, gz_server_t *server, const char *id);
// Destroy the interface (server)
extern int gz_position_destroy(gz_position_t *self);
// Open an existing interface (used by Gazebo clients)
extern int gz_position_open(gz_position_t *self, gz_client_t *client, const char *id);
// Close the interface (client)
extern int gz_position_close(gz_position_t *self);
// Lock the interface. Set blocking to 1 if the caller should block
// until the lock is acquired. Returns 0 if the lock is acquired.
extern int gz_position_lock(gz_position_t *self, int blocking);
// Unlock the interface
extern void gz_position_unlock(gz_position_t *self);
The power interface allows clients to read battery levels from simulated robots.
// Power interface
typedef struct _gz_power_data_t
{
// Common data structures
gz_data_t head;
// Data timestamp
double time;
// Battery levels (volts)
double levels[10];
} gz_power_data_t;
// The power interface
typedef struct _gz_power_t
{
// General interface info
gz_iface_t *iface;
// Pointer to interface data area
gz_power_data_t *data;
} gz_power_t;
// Create an interface
extern gz_power_t *gz_power_alloc();
// Destroy an interface
extern void gz_power_free(gz_power_t *self);
// Create the interface (used by Gazebo server)
extern int gz_power_create(gz_power_t *self, gz_server_t *server, const char *id);
// Destroy the interface (server)
extern int gz_power_destroy(gz_power_t *self);
// Open an existing interface (used by Gazebo clients)
extern int gz_power_open(gz_power_t *self, gz_client_t *client, const char *id);
// Close the interface (client)
extern int gz_power_close(gz_power_t *self);
// Lock the interface. Set blocking to 1 if the caller should block
// until the lock is acquired. Returns 0 if the lock is acquired.
extern int gz_power_lock(gz_power_t *self, int blocking);
// Unlock the interface
extern void gz_power_unlock(gz_power_t *self);
The ptz interface allows clients to control the pan, tilt and zoom angles on a camera head such as the Sony VID30.
// Ptz interface
typedef struct _gz_ptz_data_t
{
// Common data structure
gz_data_t head;
// Data timestamp
double time;
// Measured orientation (radians)
double pan, tilt;
// Measured field of view (radians)
double zoom;
// Commanded orientation (radians)
double cmd_pan, cmd_tilt;
// Commanded field of view (radians)
double cmd_zoom;
} gz_ptz_data_t;
// The ptz interface
typedef struct _gz_ptz_t
{
// Common data structure
gz_data_t head;
// General interface info
gz_iface_t *iface;
// Pointer to interface data area
gz_ptz_data_t *data;
} gz_ptz_t;
// Create an interface
extern gz_ptz_t *gz_ptz_alloc();
// Destroy an interface
extern void gz_ptz_free(gz_ptz_t *self);
// Create the interface (used by Gazebo server)
extern int gz_ptz_create(gz_ptz_t *self, gz_server_t *server, const char *id);
// Destroy the interface (server)
extern int gz_ptz_destroy(gz_ptz_t *self);
// Open an existing interface (used by Gazebo clients)
extern int gz_ptz_open(gz_ptz_t *self, gz_client_t *client, const char *id);
// Close the interface (client)
extern int gz_ptz_close(gz_ptz_t *self);
// Lock the interface. Set blocking to 1 if the caller should block
// until the lock is acquired. Returns 0 if the lock is acquired.
extern int gz_ptz_lock(gz_ptz_t *self, int blocking);
// Unlock the interface
extern void gz_ptz_unlock(gz_ptz_t *self);
The truth interface is useful for getting and setting the ground-truth pose of objects in the world; currently, it is supported only by the TruthWidget model.
// Truth data
typedef struct _gz_truth_data_t
{
// Common data structures
gz_data_t head;
// Data timestamp
double time;
// True object position (x, y, x)
double pos[3];
// True object rotation (roll, pitch, yaw)
double rot[3];
// New command (0 or 1)?
int cmd_new;
// Commanded object position
double cmd_pos[3];
// Commanded object rotation
double cmd_rot[3];
} gz_truth_data_t;
// The truth interface
typedef struct _gz_truth_t
{
// General interface info
gz_iface_t *iface;
// Pointer to interface data area
gz_truth_data_t *data;
} gz_truth_t;
// Create an interface
extern gz_truth_t *gz_truth_alloc();
// Destroy an interface
extern void gz_truth_free(gz_truth_t *self);
// Create the interface (used by Gazebo server)
extern int gz_truth_create(gz_truth_t *self, gz_server_t *server, const char *id);
// Destroy the interface (server)
extern int gz_truth_destroy(gz_truth_t *self);
// Open an existing interface (used by Gazebo clients)
extern int gz_truth_open(gz_truth_t *self, gz_client_t *client, const char *id);
// Close the interface (client)
extern int gz_truth_close(gz_truth_t *self);
// Lock the interface. Set blocking to 1 if the caller should block
// until the lock is acquired. Returns 0 if the lock is acquired.
extern int gz_truth_lock(gz_truth_t *self, int blocking);
// Unlock the interface
extern void gz_truth_unlock(gz_truth_t *self);