API key for connecting to Adamo cloud. Fetches the router endpoint and org slug from the API at startup. Required unless zenoh.router is set directly.
robot_name
string
auto-generated
Robot identifier shown in the web interface. Used in Zenoh topic paths: adamo/{org}/{robot_name}/video/{track}. If omitted, a random name is generated at startup (e.g., robot-a7k9m).
Controls how the robot connects to the Zenoh network.
zenoh:
mode: "client"
protocol: "quic"
Field
Type
Default
Description
router
string
—
Direct Zenoh router endpoint (e.g., quic/zenoh.adamohq.com:443). Bypasses the API lookup if set. Useful for self-hosted routers or testing.
mode
string
"peer"
"client" routes all traffic through the cloud router. "peer" enables direct P2P connections between robots on the same LAN or VPN; the cloud router is still used for discovery and as a fallback when direct paths are unavailable.
listen
string[]
[]
Local endpoints this robot listens on in peer mode, allowing other peers to connect to it directly. Example: ["udp/0.0.0.0:7447", "tcp/0.0.0.0:7447"]. Has no effect in "client" mode.
protocol
string
"quic"
Transport protocol for the cloud router connection: "quic", "tcp", or "udp". QUIC is recommended — it multiplexes streams over a single UDP socket and handles NAT traversal well.
Controls the Zenoh-to-ROS control relay. When enabled, control messages published to the Zenoh prefix are forwarded to ROS.
control:
enabled: true
zenoh_prefix: "adamo/my-robot/control"
Field
Type
Default
Description
enabled
bool
true
Enable the Zenoh-to-ROS control relay.
zenoh_prefix
string
"adamo/{robot}/control"
Zenoh key prefix to subscribe to for incoming control messages. Defaults to adamo/{robot_name}/control using the resolved robot name. Override this if you need a custom topic path.
Capture resolution as [width, height]. Must match a resolution the camera supports.
ros_topic
ros_*
string
ROS topic name to subscribe to (e.g., "/camera/image_raw").
gstreamer_pipeline
gstreamer
string
GStreamer launch string. The pipeline should produce raw video frames. Note: shorthand capsfilter syntax does not work — use capsfilter caps=<caps> explicitly.
source_format
v4l2, gstreamer
string
Pixel format hint passed to the encoder pipeline (e.g., "bgra" for ZED cameras, "BGRA").
lidar_pcd_dir
lidar_pcd
string
Directory containing .pcd files for playback.
lidar_width
lidar_pcd
int
Range image width in pixels. Default: 2048.
lidar_height
lidar_pcd
int
Range image height in pixels. Default: 64.
lidar_fps
lidar_pcd
int
Playback framerate. Default: 10.
lidar_range_scale
lidar_pcd
float
Meters per unit in the 24-bit range image encoding. Default: 0.001.
lidar_range_bias
lidar_pcd
float
Range bias offset in meters. Default: 0.0.
lidar_azimuth_min
lidar_pcd
float
Minimum azimuth angle in radians. Default: -π.
lidar_azimuth_max
lidar_pcd
float
Maximum azimuth angle in radians. Default: π.
lidar_elevation_min
lidar_pcd
float
Minimum elevation angle in radians. Default: -0.2618 (~-15°).
lidar_elevation_max
lidar_pcd
float
Maximum elevation angle in radians. Default: 0.2618 (~15°).
Seconds between periodic keyframes. -1.0 disables periodic keyframes entirely — keyframes are only sent on-demand in response to PLI or FIR requests from the receiver. Set to a positive value (e.g., 2.0) if the stream must be joinable mid-stream without a request.
passthrough
bool
false
Skip H.264 encoding and forward the compressed stream directly. Use when the GStreamer pipeline already produces H.264 output (e.g., filesrc ! h264parse).
stereo
bool
false
Mark this track as a top/bottom stereo stream for VR viewing. Use with ZED cameras or other stereo sources that pack both eyes into a single frame.
fec
bool
false
Enable Forward Error Correction. Adds parity packets so receivers can reconstruct lost packets without retransmission. Increases bandwidth by fec_parity_shards / fec_data_shards (50% with defaults).
fec_data_shards
int
4
Number of data packets per FEC group.
fec_parity_shards
int
2
Number of parity packets per FEC group. With 4 data + 2 parity, the stream survives any 2 lost packets per group.
nack
bool
false
Enable NACK-based retransmission. The receiver requests re-send of lost packets. Adds latency proportional to RTT. Useful on reliable but occasionally lossy links.
Nested under a video track. When enabled, the encoder bitrate adjusts dynamically based on measured network capacity using Google Congestion Control.
video_tracks:
- name: "front"
source_type: "jetson_argus"
encoder: "nvv4l2h264enc"
bitrate: 4000
adaptive_bitrate:
enabled: true
min_bitrate: 500
max_bitrate: 8000
priority: 1.5
Field
Type
Default
Description
enabled
bool
false
Enable adaptive bitrate control for this track.
min_bitrate
int
—
Minimum bitrate in kbps. The encoder will not go below this value even under severe congestion.
max_bitrate
int
—
Maximum bitrate in kbps. The encoder will not exceed this value even when bandwidth is available.
priority
float
1.0
Bandwidth allocation weight relative to other tracks. A track with priority: 2.0 gets roughly twice the bandwidth of a priority: 1.0 track when both are contending for capacity. Higher-priority tracks are also protected first when the network degrades.
Robots on the same LAN communicate directly. The cloud router handles discovery and browser connections, but robot-to-robot traffic never leaves the local network: