VisionMax - Technical documentation
Reference for integrators/developers: interfaces, SDK, and settings.
Ports (reference)
| Service | Port |
|---|---|
| Web (static) | 8080 |
| ROSBridge (WS) | 5010 |
| HTTP video (MJPEG/H26x) | 8081+ |
| RTSP | 5004+ |
Exact values depend on systemConfig/local/* (e.g. camera0_RtspServer.json).
MerioProtocol
MERIO communication chain: transport (serial/UDP) → frames (CRC/byte-stuffing) → payload → encode/decode based on a protocol definition file.
Transport
MerioTransportLayer: serial/UDP abstraction + framing + CRC16 + byte-stuffing.- Implementation:
src/core_network_tourelle/include/merio_transport_layer.h
Decoding / application mapping
AppMerioProtocol: parses definitions (JSON) + encodes/decodes blocks.- Implementation:
src/core_device_linker/src/app_merio_protocol.* - Protocol file (example):
config/TemisXL8V2.json
Structure of protocol_file (JSON)
Files config/*.json define classes, categories (e.g. Commands, Status) and blocks identified by an id (often hex).
{
"protocol": {
"classes": {
"VisionMax": {
"classCode": 25,
"Commands": {
"FollowMe": { "id": "0x00", "item": [ { "name": "CamId", "type": "UInt8" } ] }
},
"Status": {
"Telemetry": { "id": "0x80", "item": [ { "name": "MODE", "type": "Uint8" } ] }
}
}
}
}
}Frame format (MERIO transport)
Details from src/core_network_tourelle/src/merio_transport_layer.cpp.
START: 0xAA
STUFF: 0x5A (0xAA → 0x5A 0x00, 0x5A → 0x5A 0x5A)
Frame (unstuffed):
LEN (uint8) = payload_len + 1
CMD (uint8) = 0x00
PAYLOAD (LEN-1 bytes)
CRC16 (little-endian) over [LEN, CMD] + PAYLOAD, poly 0x1021, init 0Topics (typical chaining)
Example from settings (see systemConfig/global/CommunicationInterface.json).
RX: network/receive_payload
TX: network/send_payload
Events: device_linker/data_changed, device_linker/data_changed_list
Command: device_linker/set_valueROS 2 components (reference)
NetworkLayer (merio_communication)
Encapsulates/transports the MERIO payload over serial or UDP.
- Parameters:
transport_mode,address,port - Topics:
input_topic→ send,output_topic→ receive
Example: systemConfig/local/gimbal_NetworkLayer.json (serial) and systemConfig/local/controlStation_NetworkLayer.json (UDP).
CommunicationInterface (device_linker)
Decodes/encodes the application payload via a protocol_file and publishes values (DeviceMessage).
- Key parameters:
protocol_file,send_period_ms - RX/TX:
topic_rx/topic_tx(UInt8MultiArray)
Protocol examples: config/MilvusV2.json, config/VisionUnitV2.json.
ProxyGroundToGimbal (filter_proxy)
Multi-connection proxy with packet filtering (useful to relay only some IDs).
- Parameters:
proxy_connections(src→dst),filter_values - Format: a message can contain multiple packets
[size][payload...]
Example: systemConfig/global/ProxyGroundToGimbal.json.
MAVLink
VisionMax includes a MAVLink v2 gimbal-oriented bridge via merio_gimbal_mavlink. Goal: exchange MAVLink commands/states with the VisionMax ecosystem.
Transport (UDP)
udp.bind_port: local listen portudp.target_addr: target IP/hostname
IDs & heartbeat
ids.system_id_mode:follow_autopilot(adopts detected SYSID)ids.system_id,ids.component_id
ROS interfaces
dvmsg_topic_in: default/gimbal/device_linker/data_changed(DeviceMessage)dvmsg_topic_out: default/gimbal/device_linker/set_value(DeviceMessage)
Capabilities
caps.has_roll_axiscaps.supports_infinite_yaw
ros2 run merio_gimbal_mavlink merio_gimbal_mavlink --ros-args \
-p udp.bind_port:=<BIND_PORT> \
-p udp.target_addr:="<TARGET_ADDR>" \
-p udp.target_port:=<TARGET_PORT> \
-p ids.system_id_mode:=follow_autopilotMAVLink dialect reference: config/minimal.xml. Dependency: libmavlink-dev.
Reach out if something blocks your integration.
Our technical team is here to help you integrate VisionMax into your systems.