ZED ROS 2 Wrapper Custom Messages

All the custom messages used by the ZED ROS 2 Wrapper are defined in the zed-ros2-interfaces repository and are installed along with the zed-msgs package:

sudo apt install ros-<ros2-distro>-zed-msgs

Node Heartbeat #

The zed_interfaces/Heartbeat message, published on the ~/status/heartbeat topic, is defined as:

# Message to notify that the node is alive to other nodes

# idx of the message
uint64 beat_count

# namespace of the node
string node_ns
# name of the node
string node_name
# full node name
string full_name

# serial number of the input camera
uint32 camera_sn

# data from an svo?
bool svo_mode

# data from simulation?
bool simul_mode

Node Health Status #

The zed_interfaces/HealthStatusStamped message, published on the ~/status/health topic, is defined as:

# Message to provide information concerning the status of health of the ZED Camera

# Standard Header
std_msgs/Header header

# ZED Camera serial number
uint32 serial_number

# ZED Camera name
string camera_name

# Image quality is degraded
bool low_image_quality

# Environmental light conditions are not optimal
bool low_lighting

# Depth reliability is low
bool low_depth_reliability

# Motion sensors reliability is low
bool low_motion_sensors_reliability

SVO Status #

The zed_interfaces/SVOStatus message, published on the ~/status/svo topic, is defined as:

# Message to provide information concerning the status of the SVO playback

# SVO File name
string file_name

# SVO playback status
uint8 status

# SVO playback status constants
uint8 STATUS_PLAYING=0
uint8 STATUS_PAUSED=1
uint8 STATUS_END=2

# SVO frame timestamp
uint64 frame_ts

# SVO playback position
uint32 frame_id

# SVO total number of frames
uint32 total_frames

# SVO loop status
bool loop_active

# SVO loop count
uint32 loop_count

# SVO real-time mode status
bool real_time_mode

Plane Detection result #

The zed_interfaces/PlaneStamped message, published by the Plane Detection module, is defined as:

# Standard Header
std_msgs/Header header

# Mesh of the place
shape_msgs/Mesh mesh

# Representation of a plane, using the plane equation ax + by + cz + d = 0
shape_msgs/Plane coefficients

# Normal vector
geometry_msgs/Point32 normal

# Center point 
geometry_msgs/Point32 center

# Plane pose relative to the global reference frame
geometry_msgs/Transform pose

# Width and height of the bounding rectangle around the plane contours
float32[2] extents

# The polygon bounds of the plane
geometry_msgs/Polygon bounds

Depth information #

The zed_interfaces/DepthInfoStamped message is defined as:

# Standard Header
std_msgs/Header header

# Miminum measured depth
float32 min_depth

# Maximum measured depth
float32 max_depth

Positional Tracking status #

The zed_interfaces/PosTrackStatus message is defined as:

# Status constants
# SEARCHING - The camera is searching for a previously known position to locate itself
# OK - Positional tracking is working normally
# OFF - Positional tracking is not enabled.
# FPS_TOO_LOW - Effective FPS is too low to give proper results for motion tracking. Consider using PERFORMANCES parameters (DEPTH_MODE_PERFORMANCE, low camera resolution (VGA,HD720))
# SEARCHING_FLOOR_PLANE - The camera is searching for the floor plane to locate itself related to it, the REFERENCE_FRAME::WORLD will be set afterward.
uint8 SEARCHING=0 
uint8 OK = 1
uint8 OFF = 2
uint8 FPS_TOO_LOW = 3
uint8 SEARCHING_FLOOR_PLANE = 3

# Status
uint8 status

GNSS Fusion status #

The zed_interfaces/GNSSFusionStatus message, published on the ~/pose/filtered/status topic, is defined as:

# GNSS_FUSION_STATUS
# Represents the current state of GNSS fusion for global localization.
# OK - The GNSS fusion module is calibrated and working successfully.
# OFF - The GNSS fusion module is not enabled.
# CALIBRATION_IN_PROGRESS - Calibration of the GNSS/VIO fusion module is in progress.
# RECALIBRATION_IN_PROGRESS- Re-alignment of GNSS/VIO data is in progress, leading to potentially inaccurate global position.
uint8 OK = 0
uint8 OFF = 1
uint8 CALIBRATION_IN_PROGRESS = 2
uint8 RECALIBRATION_IN_PROGRESS = 3

uint8 gnss_fusion_status

Object Detection and Body Tracking results #

The Object Detection and the Body Tracking modules publish data on the detected objects and body topics by using the same custom message.

The zed_interfaces/ObjectsStamped message is defined as:

# Standard Header
std_msgs/Header header

# Array of `object_stamped` topics
zed_interfaces/Object[] objects

where zed_interfaces/Object is defined as:

# Object label
string label

# Object label ID
int16 label_id

# Object sub-class label (Only for the `MULTI_CLASS_BOX` model)
string sublabel

# Object confidence level (1-99)
float32 confidence

# Object 3D centroid position
float32[3] position

# Position covariance
float32[6] position_covariance

# Object 3D velocity
float32[3] velocity

# Is Object tracking available?
bool tracking_available

# Tracking available
# Tracking state
# 0 -> OFF (object not valid)
# 1 -> OK
# 2 -> SEARCHING (occlusion occurred, trajectory is estimated)
# 3 -> TERMINATE (This is the last searching state of the track. The track will be deleted in the next frame).
int8 tracking_state

# Action state
# 0 -> IDLE
# 2 -> MOVING
int8 action_state

# 2D Bounding box projected to the Camera image
zed_msgs/BoundingBox2Di bounding_box_2d

# 3D Bounding box in world frame
zed_msgs/BoundingBox3D bounding_box_3d

# 3D dimensions (width, height, lenght)
float32[3] dimensions_3d

# =======================================
#  Person Head Detection specific fields
# =======================================

# 2D Bounding box projected to Camera image of the person head
zed_msgs/BoundingBox2Df head_bounding_box_2d

# 3D Bounding box in world frame of the person head
zed_msgs/BoundingBox3D head_bounding_box_3d

# 3D position of the centroid of the person head
float32[3] head_position

# ===============================
#  Body Tracking specific fields
# ===============================
# Is skeleton available?
bool skeleton_available

# Skeleton format
# 0 -> POSE_18
# 1 -> POSE_34
# 2 -> POSE_38
# 3 -> POSE_70
int8 body_format

# 2D Person skeleton projected to Camera image
zed_msgs/Skeleton2D skeleton_2d

# 3D Person skeleton in world frame
zed_msgs/Skeleton3D skeleton_3d

And all the submessages are defined as following:

zed_interfaces/BoundingBox2Df:

#      0 ------- 1
#      |         |
#      |         |
#      |         |
#      3 ------- 2
zed_interfaces/Keypoint2Df[4] corners

zed_interfaces/BoundingBox2Di:

#      0 ------- 1
#      |         |
#      |         |
#      |         |
#      3 ------- 2
zed_interfaces/Keypoint2Di[4] corners

zed_interfaces/BoundingBox3D:

#      1 ------- 2
#     /.        /|
#    0 ------- 3 |
#    | .       | |
#    | 5.......| 6
#    |.        |/
#    4 ------- 7
zed_interfaces/Keypoint3D[8] corners

zed_interfaces/Keypoint2Df:

float32[2] kp

zed_interfaces/Keypoint2Di:

uint32[2] kp

zed_interfaces/Keypoint3D:

float32[3] kp

zed_interfaces/Skeleton2D:

# Skeleton joints
zed_interfaces/Keypoint2Df[70] keypoints

zed_interfaces/Skeleton3D:

# Skeleton joints
zed_interfaces/Keypoint3D[70] keypoints