跳到主要内容

导航参数与参数方案

8.1 三种状态必须分开​

  1. 已保存参数:本机数据库中的配置。
  2. 运行参数:当前导航容器参数服务中的值。
  3. 启动回放结果:保存值在容器启动后应用、匹配及验证的结果。

保存成功不等于已经生效。/nav/set_nav_params 先保存,运行时就绪后尝试应用;/nav/params/set 先下发运行时,仅持久化运行时接受的参数。

8.2 POST /v1/api/nav/params/list​

无请求体。返回嵌套参数树:

{"parameters":{"navigation":{"free_navigation":{"linear_speed":{"access":"rw","type":"float","value":0.4,"writable":true}}}}}

叶子 access:string、type:string、value:any、writable:boolean;树的完整内容、access/type 的字符串以及取值范围由当前导航镜像返回,示例不是固定清单。可读取到的字段不一定在端侧写入白名单内。

8.3 查询运行值与保存值​

三个接口都需要 JSON:

{"names":["navigation:free_navigation:linear_speed","robot:footprint"]}
接口数据来源响应 data 结构
POST /v1/api/nav/params/get运行时{"parameters":{"参数名":ParamResult}}
POST /v1/api/nav/get_nav_params运行时{"参数名":ParamResult}
POST /v1/api/nav/get_saved_nav_params本机保存值{"参数名":ParamResult}

names 是 string[]。客户端应至少请求一个明确名称,不依赖空数组的下游行为。ParamResult:success:boolean、value:any、message:string。例如 /params/get:

{"parameters":{"navigation:free_navigation:linear_speed":{"success":true,"value":0.4,"message":""}}}

单项 success=false 仍可能在外层 code=0 的响应中出现。

8.4 保存 / 设置参数​

两个接口的请求体都是直接的参数名到值映射,不要再套一层 params 或 values:

{"navigation:free_navigation:linear_speed":0.4,"navigation:fixed_point_navigation:holonomic":false}
接口行为响应 data
POST /v1/api/nav/set_nav_params校验并保存;运行时可用则立即应用,不可用则延后参数名 → ParamSetResult;在线应用时可额外出现键 offline_save
POST /v1/api/nav/params/set下发运行时,把成功项保存到数据库{"results":{参数名:ParamSetResult},"offline_save":ParamSetResult}

ParamSetResult:success:boolean、message:string,可含 value:any。offline_save 是结果对象,不是 boolean。离线保存示例:

{"navigation:free_navigation:linear_speed":{"success":true,"message":"已保存,导航启动后应用","value":0.4}}

运行时设置示例:

{"results":{"navigation:free_navigation:linear_speed":{"success":true,"message":"","value":0.4}},"offline_save":{"success":true,"message":""}}

外层成功不是所有参数成功,必须遍历 results 或参数映射。失败项不应在 UI 上显示为“已生效”。同一请求可能部分成功,不能把它当成原子事务。

8.5 当前写入白名单与校验​

以下名称来自端侧 ParamManager,适用于保存、运行时设置、参数方案校验;实际数值边界还需遵循导航镜像约束。

参数名JSON 类型含义
robot:lidar_mount_positionnumber[3]雷达安装位置
robot:footprintnumber[][2]机器人轮廓多边形
general:min_obstacle_heightnumber最小障碍物高度
general:max_obstacle_heightnumber最大障碍物高度
navigation:free_navigation:linear_speednumber自由导航线速度
navigation:free_navigation:angular_speednumber自由导航角速度
navigation:free_navigation:xy_goal_tolerancenumber平面到点容差
navigation:free_navigation:yaw_goal_tolerancenumber朝向容差
navigation:free_navigation:safety_distancenumber安全距离
navigation:fixed_point_navigation:max_linear_speednumber定点最大线速度
navigation:fixed_point_navigation:max_angular_speednumber定点最大角速度
navigation:fixed_point_navigation:holonomicboolean全向运动配置
navigation:fixed_point_navigation:xy_goal_tolerancenumber定点位置容差
navigation:fixed_point_navigation:yaw_goal_tolerancenumber定点朝向容差
navigation:fixed_point_navigation:lateral_safety_distancenumber横向安全距离
navigation:fixed_point_navigation:forward_safety_distancenumber前向安全距离

所有 number 必须有限;不接受字符串代替数值,boolean 也不接受字符串。lidar_mount_position 恰好 3 个数。footprint 至少 3 个点,每点 2 个有限数,坐标绝对值不超过 5 m,面积 0.01–10 m²,不自交,原点必须严格在内部且不落在边界。

{"robot:footprint":[[-0.3,-0.2],[0.3,-0.2],[0.3,0.2],[-0.3,0.2]]}

历史名称会规范化:

旧名当前名称
linear_speednavigation:free_navigation:linear_speed
angular_speednavigation:free_navigation:angular_speed
robot_footprintrobot:footprint
fixed_point_safety_distancenavigation:fixed_point_navigation:forward_safety_distance
holonomicnavigation:fixed_point_navigation:holonomic
navigation:free_navigation:min_obstacle_heightgeneral:min_obstacle_height
navigation:free_navigation:max_obstacle_heightgeneral:max_obstacle_height

current_map 虽有到 general:map_name 的名称映射,但该名称不在当前写入白名单,不能通过这个兼容名称实现地图切换。

8.6 健康与回放结果​

POST /v1/api/nav/params/health 无请求体,返回 {"healthy":true}。

GET /v1/api/nav/params/apply_status 无参数,返回:

字段类型说明
statestringidle、running、success、failed、skipped
messagestring说明文本
saved_count、applied_count、matched_countinteger保存项、已下发项、原值已经匹配项数量
failed_count、verified_count、unverified_countinteger失败、验证成功、未验证数量
applied、matchedstring[],可省略参数名列表
failed、verify_failed、unverifiedobject[],可省略每项 {name:string,message:string}
offline_saveParamSetResult下游离线保存结果
started_at、finished_atstring,可省略本次回放时间

未执行回放时为 idle;不能只查保存接口就推断参数启动后有效。

8.7 参数方案 CRUD 与应用​

接口请求响应 data
GET /v1/api/nav/param-presets无Preset[]
POST /v1/api/nav/param-presetsname + params新 Preset
PUT /v1/api/nav/param-presets/{id}正整数 id;完整 name + params更新后的 Preset
DELETE /v1/api/nav/param-presets/{id}正整数 id,无请求体null
POST /v1/api/nav/param-presets/{id}/apply正整数 id,无请求体preset_id、all_succeeded、results
{"name":"室内低速","params":{"navigation:free_navigation:linear_speed":0.3}}

name 必须非空,params 必须为非空对象并通过白名单校验。Preset 响应增加 id:integer、created_at:string、updated_at:string;应用后可有 last_applied_at:string,未应用时可能省略。

{"preset_id":1,"all_succeeded":true,"results":{"navigation:free_navigation:linear_speed":{"success":true,"message":"已保存,导航启动后应用","value":0.3}}}

应用方案复用保存逻辑,离线时可以成功保存;all_succeeded=true 不保证立即生效。导航任务运行、暂停或停止中时拒绝切换:409/4002。非法 ID、名称重复、参数无效:400/1001;不存在:404/1002。PUT 是完整资源更新,不是局部 PATCH。