cmvr-es/protos/cmvr/api/agv_command.proto

906 lines
34 KiB
Protocol Buffer
Raw Normal View History

2026-06-23 16:44:03 +08:00
/**
* @file agv_command.proto
* @brief AGV Protobuf
* SeerSRC API
*
* @note gRPC AgvService
*/
2026-06-17 14:50:37 +08:00
syntax = "proto3";
import "cmvr/api/common.proto";
package cmvr.api;
2026-06-23 16:44:03 +08:00
// ============================================================================
// 1. 基本信息查询(命令码 1000, 0x03E8
// ============================================================================
/**
* @brief AGV
* @note API 10000x03E8
*/
2026-06-17 14:50:37 +08:00
message AgvStatusInfo {
2026-06-23 16:44:03 +08:00
optional string id = 1; ///< AGV 设备唯一 ID
optional string vehicle_id = 2; ///< 车辆编号(如 "agv_001"
optional string version = 3; ///< 软件版本号
optional string model = 4; ///< 车型型号(如 "SRC-1100"
optional string dsp_version = 5; ///< DSP 固件版本
optional string current_ip = 6; ///< 当前 IP 地址
optional string mac = 7; ///< MAC 地址
optional int32 rssi = 8; ///< Wi-Fi 信号强度0~100
optional int32 ret_code = 9; ///< 返回码0 表示成功
optional string err_msg = 10; ///< 错误信息(失败时填充)
}
/**
* @brief AGV /
* @note IDheader.device_id AgvStatusInfo
*/
2026-06-17 14:50:37 +08:00
message GetAgvStatusInfoCommand {
message Request {
2026-06-23 16:44:03 +08:00
CommandHeader.Request header = 1; ///< 公共请求头,包含 device_id
2026-06-17 14:50:37 +08:00
}
message Feedback {
2026-06-23 16:44:03 +08:00
CommandHeader.Feedback header = 1; ///< 公共响应头success/error_message/timestamp
AgvStatusInfo status = 2; ///< AGV 状态信息
2026-06-17 14:50:37 +08:00
}
}
2026-06-23 16:44:03 +08:00
// ============================================================================
// 2. 电池状态查询(命令码 1007, 0x03EF
// ============================================================================
2026-06-17 14:50:37 +08:00
2026-06-23 16:44:03 +08:00
/**
* @brief
* @note API 10070x03EF/
*/
message AgvBatteryStatus {
optional double battery_level = 1; ///< 电池电量0~1对应 0%~100%
optional double battery_temp = 2; ///< 电池温度(摄氏度)
optional bool charging = 3; ///< 是否正在充电
optional double voltage = 4; ///< 当前电压V
optional double current = 5; ///< 当前电流A
optional double max_charge_voltage = 6; ///< 最大充电电压(-1 表示不支持)
optional double max_charge_current = 7; ///< 最大充电电流(-1 表示不支持)
optional bool manual_charge = 8; ///< 是否连接手动充电器(仅 SRC-2000
optional bool auto_charge = 9; ///< 是否连接自动充电桩(仅 SRC-2000
optional int32 battery_cycle = 10; ///< 电池循环次数(从 BMS 读取,可能不准)
optional string battery_user_data = 11; ///< 电池用户自定义数据
optional string extra = 12; ///< 扩展字段(预留)
optional int32 ret_code = 13; ///< 返回码0 表示成功
optional string create_on = 14; ///< 数据创建时间戳ISO 8601
optional string err_msg = 15; ///< 错误信息
}
/**
* @brief
*/
2026-06-17 14:50:37 +08:00
message RobotStatusBatteryRequestData {
2026-06-23 16:44:03 +08:00
optional bool simple = 1; ///< true=仅关键数据false=全量数据(默认 false
2026-06-17 14:50:37 +08:00
}
2026-06-23 16:44:03 +08:00
/**
* @brief
*/
2026-06-17 14:50:37 +08:00
message RobotStatusBatteryCommand {
message Request {
2026-06-23 16:44:03 +08:00
CommandHeader.Request header = 1; ///< 公共请求头
RobotStatusBatteryRequestData data = 2; ///< 请求参数
2026-06-17 14:50:37 +08:00
}
message Feedback {
2026-06-23 16:44:03 +08:00
CommandHeader.Feedback header = 1; ///< 公共响应头
AgvBatteryStatus status = 2; ///< 电池状态信息
2026-06-17 14:50:37 +08:00
}
}
2026-06-23 16:44:03 +08:00
// ============================================================================
// 3. 机器人位置查询(命令码 1004, 0x03EC
// ============================================================================
2026-06-17 14:50:37 +08:00
2026-06-23 16:44:03 +08:00
/**
* @brief
* @note API 10040x03EC姿
*/
2026-06-17 14:50:37 +08:00
message AgvRobotLocation {
2026-06-23 16:44:03 +08:00
optional double x = 1; ///< X 坐标(米)
optional double y = 2; ///< Y 坐标(米)
optional double angle = 3; ///< 朝向角(弧度),逆时针为正
optional double confidence = 4; ///< 定位置信度0~1
optional string current_station = 5; ///< 当前所在站点 ID若在站点上
optional string last_station = 6; ///< 上一个经过的站点 ID
optional int32 loc_method = 7; ///< 定位方式0=自然轮廓, 1=反光柱, 2=二维码, 3=里程计...
optional int32 ret_code = 8; ///< 返回码0 表示成功
optional string create_on = 9; ///< 时间戳
optional string err_msg = 10; ///< 错误信息
}
/**
* @brief
*/
2026-06-17 14:50:37 +08:00
message RobotStatusLocCommand {
message Request {
2026-06-23 16:44:03 +08:00
CommandHeader.Request header = 1; ///< 公共请求头
2026-06-17 14:50:37 +08:00
}
message Feedback {
2026-06-23 16:44:03 +08:00
CommandHeader.Feedback header = 1; ///< 公共响应头
AgvRobotLocation status = 2; ///< 位置信息
2026-06-17 14:50:37 +08:00
}
}
2026-06-23 16:44:03 +08:00
// ============================================================================
// 4. 地图下载(命令码 4011, 0x0FAB
// ============================================================================
/**
* @brief
*/
2026-06-17 14:50:37 +08:00
message RobotConfigDownloadMapRequestData {
2026-06-23 16:44:03 +08:00
optional string map_name = 1; ///< 要下载的地图名称(必填)
2026-06-17 14:50:37 +08:00
}
2026-06-23 16:44:03 +08:00
/**
* @brief
*/
2026-06-17 14:50:37 +08:00
message AgvDownloadMapResult {
2026-06-23 16:44:03 +08:00
optional int32 ret_code = 1; ///< 返回码0 表示成功
optional string create_on = 2; ///< 时间戳
optional string err_msg = 3; ///< 错误信息
optional string map_content = 4; ///< 地图 JSON 文件内容(成功时填充)
2026-06-17 14:50:37 +08:00
}
2026-06-23 16:44:03 +08:00
/**
* @brief
*/
2026-06-17 14:50:37 +08:00
message RobotConfigDownloadMapCommand {
message Request {
CommandHeader.Request header = 1;
RobotConfigDownloadMapRequestData data = 2;
}
message Feedback {
CommandHeader.Feedback header = 1;
AgvDownloadMapResult status = 2;
}
}
2026-06-23 16:44:03 +08:00
// ============================================================================
// 5. 地图状态查询(命令码 1300, 0x0514
// ============================================================================
/**
* @brief
*/
2026-06-17 14:50:37 +08:00
message MapFileInfo {
2026-06-23 16:44:03 +08:00
optional string name = 1; ///< 文件名
optional string modified = 2; ///< 最后修改时间
optional int64 size = 3; ///< 文件大小(字节)
2026-06-17 14:50:37 +08:00
}
2026-06-23 16:44:03 +08:00
/**
* @brief
* @note API 13000x0514
*/
2026-06-17 14:50:37 +08:00
message AgvMapStatus {
2026-06-23 16:44:03 +08:00
optional string current_map = 1; ///< 当前加载的地图名称
optional string current_map_md5 = 2; ///< 当前地图的 MD5 校验值
repeated string maps = 3; ///< 所有地图名称列表
repeated MapFileInfo map_files_info = 4; ///< 每个地图文件的详细信息
optional int32 ret_code = 5; ///< 返回码0 表示成功
optional string create_on = 6; ///< 时间戳
optional string err_msg = 7; ///< 错误信息
}
/**
* @brief
*/
2026-06-17 14:50:37 +08:00
message RobotStatusMapCommand {
message Request {
CommandHeader.Request header = 1;
}
message Feedback {
CommandHeader.Feedback header = 1;
AgvMapStatus status = 2;
}
}
2026-06-23 16:44:03 +08:00
// ============================================================================
// 6. 上传地图(命令码 4010, 0x0FAA
// ============================================================================
/**
* @brief
*/
2026-06-17 14:50:37 +08:00
message RobotConfigUploadMapRequestData {
2026-06-23 16:44:03 +08:00
optional string map_content = 1; ///< 完整的地图 JSON 字符串(必填)
2026-06-17 14:50:37 +08:00
}
2026-06-23 16:44:03 +08:00
/**
* @brief
*/
2026-06-17 14:50:37 +08:00
message AgvUploadMapResult {
2026-06-23 16:44:03 +08:00
optional int32 ret_code = 1; ///< 返回码0 表示成功
optional string create_on = 2; ///< 时间戳
optional string err_msg = 3; ///< 错误信息
2026-06-17 14:50:37 +08:00
}
2026-06-23 16:44:03 +08:00
/**
* @brief
*/
2026-06-17 14:50:37 +08:00
message RobotConfigUploadMapCommand {
message Request {
CommandHeader.Request header = 1;
RobotConfigUploadMapRequestData data = 2;
}
message Feedback {
CommandHeader.Feedback header = 1;
AgvUploadMapResult status = 2;
}
}
2026-06-23 16:44:03 +08:00
// ============================================================================
// 7. 抢占控制权(命令码 4005, 0x0FA5
// ============================================================================
/**
* @brief
*/
2026-06-17 14:50:37 +08:00
message RobotConfigLockRequestData {
2026-06-23 16:44:03 +08:00
optional string nick_name = 1; ///< 抢占者昵称/标识(必填)
2026-06-17 14:50:37 +08:00
}
2026-06-23 16:44:03 +08:00
/**
* @brief
*/
2026-06-17 14:50:37 +08:00
message AgvLockResult {
2026-06-23 16:44:03 +08:00
optional int32 ret_code = 1; ///< 返回码0 表示成功
optional string create_on = 2; ///< 时间戳
optional string err_msg = 3; ///< 错误信息
2026-06-17 14:50:37 +08:00
}
2026-06-23 16:44:03 +08:00
/**
* @brief
*/
2026-06-17 14:50:37 +08:00
message RobotConfigLockCommand {
message Request {
CommandHeader.Request header = 1;
RobotConfigLockRequestData data = 2;
}
message Feedback {
CommandHeader.Feedback header = 1;
AgvLockResult status = 2;
}
}
2026-06-23 16:44:03 +08:00
// ============================================================================
// 8. 查询当前控制权所有者(命令码 1060, 0x0424
// ============================================================================
2026-06-17 14:50:37 +08:00
2026-06-23 16:44:03 +08:00
/**
* @brief
* @note API 10600x0424
*/
2026-06-17 14:50:37 +08:00
message AgvCurrentLockStatus {
2026-06-23 16:44:03 +08:00
optional bool locked = 1; ///< 是否被锁定(有持有者)
optional string ip = 2; ///< 持有者 IP 地址
optional int32 port = 3; ///< 持有者端口
optional uint32 type = 4; ///< 持有者类型0=default, 2=roboshop, 0xDD=srd
optional string nick_name = 5; ///< 持有者昵称
optional int64 time_t = 6; ///< 锁定时间戳Unix 秒)
optional string desc = 7; ///< 描述信息
optional int32 ret_code = 8; ///< 返回码0 表示成功
optional string create_on = 9; ///< 时间戳
optional string err_msg = 10; ///< 错误信息
}
/**
* @brief
*/
2026-06-17 14:50:37 +08:00
message RobotStatusCurrentLockCommand {
message Request {
CommandHeader.Request header = 1;
}
message Feedback {
CommandHeader.Feedback header = 1;
AgvCurrentLockStatus status = 2;
}
}
2026-06-23 16:44:03 +08:00
// ============================================================================
// 9. 开环速度运动控制(命令码 2010, 0x07DA
// ============================================================================
/**
* @brief
* @note 20100x07DA
* vx/vy/w steer/real_steer
* duration = -1
*/
2026-06-17 14:50:37 +08:00
message RobotMotionControlRequestData {
2026-06-23 16:44:03 +08:00
optional double vx = 1; ///< X 方向线速度m/s
optional double vy = 2; ///< Y 方向线速度m/s
optional double w = 3; ///< 角速度rad/s逆时针为正
optional double steer = 4; ///< 舵轮转向角(单舵轮,单位 rad
optional double real_steer = 5; ///< 实际舵轮角度(单舵轮,优先级高于 steer
optional int64 duration = 6; ///< 持续时间ms-1 表示一直运行
2026-06-17 14:50:37 +08:00
}
2026-06-23 16:44:03 +08:00
/**
* @brief
*/
2026-06-17 14:50:37 +08:00
message RobotMotionControlResult {
2026-06-23 16:44:03 +08:00
optional int32 ret_code = 1; ///< 返回码0 表示成功
optional string create_on = 2; ///< 时间戳
optional string err_msg = 3; ///< 错误信息
2026-06-17 14:50:37 +08:00
}
2026-06-23 16:44:03 +08:00
/**
* @brief
*/
2026-06-17 14:50:37 +08:00
message RobotMotionControlCommand {
message Request {
CommandHeader.Request header = 1;
RobotMotionControlRequestData data = 2;
}
message Feedback {
CommandHeader.Feedback header = 1;
RobotMotionControlResult status = 2;
}
}
2026-06-23 16:44:03 +08:00
// ============================================================================
// 10. 切换载入地图(命令码 2022, 0x07E6
// ============================================================================
/**
* @brief
* @note 20220x07E6
*/
2026-06-17 14:50:37 +08:00
message RobotLoadMapRequestData {
2026-06-23 16:44:03 +08:00
optional string map_name = 1; ///< 目标地图名称(必填,仅字母数字-_
2026-06-17 14:50:37 +08:00
}
2026-06-23 16:44:03 +08:00
/**
* @brief
*/
2026-06-17 14:50:37 +08:00
message RobotLoadMapResult {
2026-06-23 16:44:03 +08:00
optional int32 ret_code = 1; ///< 返回码0 表示成功
optional string create_on = 2; ///< 时间戳
optional string err_msg = 3; ///< 错误信息
2026-06-17 14:50:37 +08:00
}
2026-06-23 16:44:03 +08:00
/**
* @brief
*/
2026-06-17 14:50:37 +08:00
message RobotLoadMapCommand {
message Request {
CommandHeader.Request header = 1;
RobotLoadMapRequestData data = 2;
}
message Feedback {
CommandHeader.Feedback header = 1;
RobotLoadMapResult status = 2;
}
}
2026-06-23 16:44:03 +08:00
// ============================================================================
// 11. 查询地图载入状态(命令码 1022, 0x03FE
// ============================================================================
/**
* @brief
* @note 10220x03FEloadmap_status: 0=, 1=, 2=
* 2
*/
2026-06-17 14:50:37 +08:00
message RobotQueryLoadMapStatusResult {
2026-06-23 16:44:03 +08:00
optional int32 loadmap_status = 1; ///< 0=失败, 1=成功, 2=载入中
optional int32 ret_code = 2; ///< 返回码0 表示成功
optional string create_on = 3; ///< 时间戳
optional string err_msg = 4; ///< 错误信息
2026-06-17 14:50:37 +08:00
}
2026-06-23 16:44:03 +08:00
/**
* @brief
*/
2026-06-17 14:50:37 +08:00
message RobotQueryLoadMapStatusCommand {
message Request {
CommandHeader.Request header = 1;
}
message Feedback {
CommandHeader.Feedback header = 1;
RobotQueryLoadMapStatusResult status = 2;
}
}
2026-06-23 16:44:03 +08:00
// ============================================================================
// 12. 查询站点列表(命令码 1301, 0x0515
// ============================================================================
2026-06-17 14:50:37 +08:00
2026-06-23 16:44:03 +08:00
/**
* @brief
*/
2026-06-17 14:50:37 +08:00
message StationItem {
2026-06-23 16:44:03 +08:00
optional string id = 1; ///< 站点唯一 ID
optional string type = 2; ///< 站点类型(如 "LocationMark", "ChargePoint"
optional double x = 3; ///< X 坐标(米)
optional double y = 4; ///< Y 坐标(米)
optional double r = 5; ///< 朝向角(弧度)
optional string desc = 6; ///< 描述信息
optional string executor = 7; ///< 执行器信息
optional string prepoint = 8; ///< 前置点 ID
optional string recfile = 9; ///< 识别文件路径
optional bool spin = 10; ///< 是否允许自旋
optional bool use_down_pgv = 11; ///< 是否使用下视 PGV
}
/**
* @brief
*/
2026-06-17 14:50:37 +08:00
message QueryStationListResult {
2026-06-23 16:44:03 +08:00
repeated StationItem stations = 1; ///< 站点列表
optional int32 ret_code = 2; ///< 返回码0 表示成功
optional string create_on = 3; ///< 时间戳
optional string err_msg = 4; ///< 错误信息
2026-06-17 14:50:37 +08:00
}
2026-06-23 16:44:03 +08:00
/**
* @brief
*/
2026-06-17 14:50:37 +08:00
message QueryStationListCommand {
message Request {
CommandHeader.Request header = 1;
}
message Feedback {
CommandHeader.Feedback header = 1;
QueryStationListResult status = 2;
}
}
2026-06-23 16:44:03 +08:00
// ============================================================================
// 13. 指定路径导航(命令码 3066, 0x0BFA
// ============================================================================
/**
* @brief
* @note 3066 move_task_list
* source_id id
*/
2026-06-17 14:50:37 +08:00
message MoveTaskItem {
2026-06-23 16:44:03 +08:00
optional string task_id = 1; ///< 任务唯一 ID必填
optional string source_id = 2; ///< 起始站点 ID必填
optional string id = 3; ///< 目标站点 ID必填
optional string operation = 4; ///< 到达后执行的动作(如 "JackLoad"
optional double jack_height = 5; ///< 顶升高度(米)
2026-06-17 14:50:37 +08:00
}
2026-06-23 16:44:03 +08:00
/**
* @brief
*/
2026-06-17 14:50:37 +08:00
message RobotGoTargetListRequestData {
2026-06-23 16:44:03 +08:00
repeated MoveTaskItem move_task_list = 1; ///< 导航任务序列(顺序执行)
2026-06-17 14:50:37 +08:00
}
2026-06-23 16:44:03 +08:00
/**
* @brief
* @note ret_code=0
*/
2026-06-17 14:50:37 +08:00
message RobotGoTargetListResult {
2026-06-23 16:44:03 +08:00
optional int32 ret_code = 1; ///< 返回码0 表示成功接收
optional string create_on = 2; ///< 时间戳
optional string err_msg = 3; ///< 错误信息
2026-06-17 14:50:37 +08:00
}
2026-06-23 16:44:03 +08:00
/**
* @brief
*/
2026-06-17 14:50:37 +08:00
message RobotGoTargetListCommand {
message Request {
CommandHeader.Request header = 1;
RobotGoTargetListRequestData data = 2;
}
message Feedback {
CommandHeader.Feedback header = 1;
RobotGoTargetListResult status = 2;
}
}
2026-06-23 16:44:03 +08:00
// ============================================================================
// 14. 查询当前实时导航状态(命令码 1020, 0x03FC
// ============================================================================
/**
* @brief 1020
*/
message RobotStatusTaskReqData {
optional bool simple = 1; ///< true=仅返回 task_statusfalse=全量
2026-06-17 14:50:37 +08:00
}
2026-06-23 16:44:03 +08:00
/**
* @brief
*/
2026-06-17 14:50:37 +08:00
message NavContainerItem {
2026-06-23 16:44:03 +08:00
optional string container_name = 1; ///< 料箱名称
optional string desc = 2; ///< 描述
optional string goods_id = 3; ///< 绑定的货物 ID
optional bool has_goods = 4; ///< 是否已绑定货物
}
/**
* @brief 1020
*/
message RobotStatusTaskResData {
optional int32 task_status = 1; ///< 0=NONE, 1=WAITING, 2=RUNNING, 3=SUSPENDED, 4=COMPLETED, 5=FAILED, 6=CANCELED
optional int32 task_type = 2; ///< 0=无, 1=自由导航到坐标, 2=自由导航到站点, 3=路径导航到站点, 7=平动转动
optional string target_id = 3; ///< 目标站点 IDtask_type 为 2/3 时)
repeated double target_point = 4; ///< 目标坐标 [x, y, r]task_type 为 1 时)
repeated string finished_path = 5; ///< 已经过的站点列表
repeated string unfinished_path = 6; ///< 尚未经过的站点列表
optional string move_status_info = 7; ///< 附加信息(如错误描述)
repeated NavContainerItem containers = 8; ///< 料箱信息
optional int32 ret_code = 9; ///< 返回码0 表示成功
optional string create_on = 10; ///< 时间戳
optional string err_msg = 11; ///< 错误信息
}
/**
* @brief
*/
message RobotStatusTaskCurrentCommand {
message Request {
CommandHeader.Request header = 1;
RobotStatusTaskReqData data = 2;
}
message Feedback {
CommandHeader.Feedback header = 1;
RobotStatusTaskResData data = 2;
}
}
// ============================================================================
// 15. 批量查询任务状态(命令码 1110, 0x0456
// ============================================================================
/**
* @brief 1110
*/
message QueryTaskStatusPackageReqData {
repeated string task_ids = 1; ///< 要查询的任务 ID 列表;为空则查所有未完成 + 最近一条完成
}
/**
* @brief
*/
message SingleTaskStatusItem {
optional string task_id = 1; ///< 任务 ID
optional int32 status = 2; ///< 状态码(同 task_status
optional int32 type = 3; ///< 任务类型(同 task_type
}
/**
* @brief
*/
message TaskStatusPackage {
optional string closest_target = 1; ///< 最近站点 ID
optional string source_name = 2; ///< 起点站点名称
optional string target_name = 3; ///< 终点站点名称
optional double percentage = 4; ///< 任务进度百分比0~100
optional double distance = 5; ///< 剩余距离(米)
optional string info = 6; ///< 附加信息
repeated SingleTaskStatusItem task_status_list = 7; ///< 所有任务状态列表
}
/**
* @brief 1110
*/
message QueryTaskStatusPackageResData {
optional TaskStatusPackage task_status_package = 1; ///< 任务状态包
optional int32 ret_code = 2; ///< 返回码0 表示成功
optional string create_on = 3; ///< 时间戳
optional string err_msg = 4; ///< 错误信息
}
/**
* @brief
*/
message RobotStatusTaskPackageCommand {
message Request {
CommandHeader.Request header = 1;
QueryTaskStatusPackageReqData data = 2;
}
message Feedback {
CommandHeader.Feedback header = 1;
QueryTaskStatusPackageResData data = 2;
}
}
// ============================================================================
// 16. 单点站点自动规划导航(命令码 3051, 0x0BEB
// ============================================================================
/**
* @brief DI
*/
message DIItem {
int32 id = 1; ///< DI 编号
bool status = 2; ///< 状态true=高电平, false=低电平)
}
/**
* @brief DO
*/
message DOItem {
int32 id = 1; ///< DO 编号
bool status = 2; ///< 状态true=高电平, false=低电平)
}
/**
* @brief
*/
message SoundArgs {
optional string name = 1; ///< 音频文件名
optional int32 loop = 2; ///< 循环次数0=播放一次, 1=循环)
optional int32 stop = 3; ///< 1=停止播放
}
/**
* @brief WaitDI
*/
message WaitDIArgs {
repeated DIItem DI = 1; ///< 需要等待的 DI 条件列表
optional double timeout = 2; ///< 超时时间0 表示无限等待
}
/**
* @brief SetDO
*/
message SetDOArgs {
repeated DOItem do_list = 1; ///< 要设置的 DO 列表
}
/**
* @brief PGV
*/
message PgvParam {
optional bool use_pgv = 1; ///< 是否使用上视 PGV
optional bool use_down_pgv = 2; ///< 是否使用下视 PGV
optional double pgv_adjust_dist = 3; ///< 最大调整半径(米)
optional double pgv_adjust_cx = 4; ///< 二维码坐标系 X 偏移(米)
optional double pgv_adjust_cy = 5; ///< 二维码坐标系 Y 偏移(米)
optional double pgv_x_adjust = 6; ///< 仅调整 X 方向误差(米)
}
/**
* @brief +
*/
message FreeGoPoint {
double x = 1; ///< X 坐标(米)
double y = 2; ///< Y 坐标(米)
double theta = 3; ///< 朝向角(弧度)
}
/**
* @brief
*/
message ScriptArgs {
map<string, string> str_kv = 1; ///< 字符串键值对
map<string, double> num_kv = 2; ///< 数字键值对
repeated DOItem do_list = 3; ///< DO 列表
repeated DIItem di_list = 4; ///< DI 列表
}
/**
* @brief 3051
* @warning /
*
* warning/error
* freego
*/
message RobotGoTargetReqData {
// -------- 必填字段 --------
string source_id = 1; ///< 起始站点 ID"SELF_POSITION" 表示当前位置)
string id = 2; ///< 目标站点 ID"SELF_POSITION" 表示原地执行 operation
optional string task_id = 3; ///< 任务 ID建议提供
// -------- 运动通用参数 --------
optional double angle = 4; ///< 目标点朝向角(弧度)
optional string method = 5; ///< "forward"(正走)或 "backward"(倒走)
optional double max_speed = 6; ///< 最大线速度m/s0 使用默认
optional double max_wspeed = 7; ///< 最大角速度rad/s
optional double max_acc = 8; ///< 最大加速度m/s²
optional double max_wacc = 9; ///< 最大角加速度rad/s²
optional int64 duration = 10; ///< 到达后等待时间(毫秒)
optional int32 orientation = 11; ///< 全向车保持的角度(暂不使用)
optional bool spin = 12; ///< 是否随动(托盘旋转)
optional int64 delay = 13; ///< 延迟结束导航状态(毫秒),缺省 0
optional int32 start_rot_dir = 14; ///< 起步旋转方向:-1=顺时针, 0=就近, 1=逆时针
optional int32 end_rot_dir = 15; ///< 到点旋转方向:-1=顺时针, 0=就近, 1=逆时针
optional double reach_dist = 16; ///< 到点位置精度(米)
optional double reach_angle = 17; ///< 到点角度精度(弧度)
optional string skill_name = 18; ///< 技能名称:"Action" 或 "GotoSpecifiedPose"
// -------- PGV --------
optional PgvParam pgv = 19; ///< 二次定位参数
// -------- 设备动作 --------
optional string operation = 20; ///< 操作类型JackLoad/ForkUnload/RollerLoad/HookLoad/WaitDI/SetDO/sound/Script 等)
optional double jack_height = 21; ///< 顶升高度(米)
optional double start_height = 22; ///< 货叉起步前举升高度(米)
optional double end_height = 23; ///< 货叉到点后举升高度(米)
optional double fork_mid_height = 24; ///< 货叉行走过程中举升高度(米)
optional double fork_dist = 25; ///< 货叉前移距离(米)
optional string direction = 26; ///< 方向:"left"/"right"/"front"/"back"
optional bool recognize = 27; ///< 是否启用视觉识别
optional string recfile = 28; ///< 识别文件路径(如 "shelf/s0002.shelf"
// -------- 音频 --------
optional SoundArgs sounds_args = 29; ///< 音频参数
// -------- WaitDI / SetDO --------
optional WaitDIArgs wait_di_args = 30; ///< WaitDI 参数
optional SetDOArgs set_do_args = 31; ///< SetDO 参数
// -------- 脚本 --------
optional string script_name = 32; ///< 脚本文件名
optional ScriptArgs script_args = 33; ///< 脚本参数
optional int32 script_stage = 34; ///< 执行阶段0=导航前, 1=导航中, 2=导航后, 3=脚本控制导航
// -------- 原地旋转GoByOdometer --------
optional double move_angle = 35; ///< 旋转角度(弧度)
optional double speed_w = 36; ///< 旋转角速度rad/s
optional int32 loc_mode = 37; ///< 定位模式1=激光定位, 0=里程定位
// -------- 自由导航(仅双轮差速) --------
optional FreeGoPoint freego = 38; ///< 自由导航目标(若提供则忽略 id 字段)
}
/**
* @brief 3051
*/
message RobotGoTargetResData {
optional int32 ret_code = 1; ///< 返回码0 表示成功接收
optional string create_on = 2; ///< 时间戳
optional string err_msg = 3; ///< 错误信息
}
/**
* @brief
*/
message RobotGoTargetCommand {
message Request {
CommandHeader.Request header = 1;
RobotGoTargetReqData data = 2;
}
message Feedback {
CommandHeader.Feedback header = 1;
RobotGoTargetResData data = 2;
}
2026-06-17 14:50:37 +08:00
}
2026-06-23 16:44:03 +08:00
// ============================================================================
// 17. 停止开环运动(命令码 2000, 0x07D0
// ============================================================================
/**
* @brief
* @note 20000x07D0
*/
message RobotControlStopRequestData
{
}
/**
* @brief
*/
message RobotControlStopResult
{
optional int32 ret_code = 1; ///< 返回码0 表示成功
optional string create_on = 2; ///< 时间戳
optional string err_msg = 3; ///< 错误信息
2026-06-17 14:50:37 +08:00
}
2026-06-23 16:44:03 +08:00
/**
* @brief
*/
message RobotControlStopCommand
{
message Request
{
CommandHeader.Request header = 1;
RobotControlStopRequestData data = 2;
}
message Feedback
{
CommandHeader.Feedback header = 1;
RobotControlStopResult status = 2;
}
}
// ============================================================================
// 18. 暂停/继续/取消导航任务(命令码 3001/3002/3003
// ============================================================================
/**
* @brief 3001, 0x0BB9
* @note
*/
message RobotTaskPauseCommand {
2026-06-17 14:50:37 +08:00
message Request {
CommandHeader.Request header = 1;
2026-06-23 16:44:03 +08:00
// 无 data 字段
2026-06-17 14:50:37 +08:00
}
message Feedback {
CommandHeader.Feedback header = 1;
2026-06-23 16:44:03 +08:00
/**
* @brief
*/
message Result {
optional int32 ret_code = 1; ///< 返回码0 表示成功
optional string create_on = 2; ///< 时间戳
optional string err_msg = 3; ///< 错误信息
}
Result status = 2;
2026-06-17 14:50:37 +08:00
}
}
2026-06-23 16:44:03 +08:00
/**
* @brief 3002, 0x0BBA
* @note
*/
message RobotTaskResumeCommand {
message Request {
CommandHeader.Request header = 1;
// 无 data 字段
}
message Feedback {
CommandHeader.Feedback header = 1;
/**
* @brief
*/
message Result {
optional int32 ret_code = 1; ///< 返回码0 表示成功
optional string create_on = 2; ///< 时间戳
optional string err_msg = 3; ///< 错误信息
}
Result status = 2;
}
}
/**
* @brief 3003, 0x0BBB
* @note
*/
message RobotTaskCancelCommand {
message Request {
CommandHeader.Request header = 1;
// 无 data 字段
}
message Feedback {
CommandHeader.Feedback header = 1;
/**
* @brief
*/
message Result {
optional int32 ret_code = 1; ///< 返回码0 表示成功
optional string create_on = 2; ///< 时间戳
optional string err_msg = 3; ///< 错误信息
}
Result status = 2;
}
}