Autoxing REST API Book
  • English
  • zh-CN
GitHub
  • English
  • zh-CN
GitHub
  • 入门指南

    • 入门指南
    • 开始移动
    • WebSocket 入门指南
    • Robot Admin (单机版)
  • 参考手册

    • REST API 设计原则
    • 地图 (Map) API
    • 移动 (Move) API
    • 当前地图与位姿 API
    • 叠加层 (Overlays)
    • 建图 (Mapping) API
    • 服务 API (Service API)
    • 转发 ROS 服务 API (Forwarded ROS Services API)
    • 物联网 (IoT) 设备
    • 设备信息 API
    • 机器人参数 (Robot Parameters) API
    • 系统设置 (System Settings)
    • 应用商店 API
    • 主机名 (Hostname) API
    • Lidar 陆标 (Landmarks)
    • WebSocket 参考 (WebSocket Reference)
    • 子图 (Submaps)
  • 其他

    • 弃用说明
    • 更新日志

WebSocket 入门指南

除了 REST API 之外,我们还提供 WebSocket 以获取实时信息。

与 REST API 的“请求-响应”模式不同,WebSocket 允许客户端与服务器(机器人)之间进行持续的双向通信。 这对于报告快速变化的信息特别有用,例如:

  • 机器人的位姿
  • 规划状态
  • 当前地图
  • 当前目标
  • ...

获取机器人位姿

为了进行演示,我们将使用 wscat 来测试 WebSocket 连接。 在 Ubuntu 上,您可以使用 sudo apt install node-ws 安装它。或者,如果您安装了 Node.js,可以使用 sudo npm install -g wscat。

$ wscat -c ws://192.168.25.25:8090/ws/v2/topics
connected (press CTRL+C to quit)
> {"enable_topic": "/slam/state"}
< {"enabled_topics": ["/slam/state"]}
> {"enable_topic": "/tracked_pose"}
< {"enabled_topics": ["/tracked_pose", "/slam/state"]}
< {"topic": "/tracked_pose", "pos": [-3.55, -0.288], "ori": -1.28}
< {"topic": "/tracked_pose", "pos": [-3.55, -0.285], "ori": -1.28}
< {"topic": "/slam/state", "state": "positioning", "reliable": true}
< {"topic": "/tracked_pose", "pos": [-3.553, -0.285], "ori": -1.28}
< {"topic": "/tracked_pose", "pos": [-3.553, -0.288], "ori": -1.28}
< {"topic": "/tracked_pose", "pos": [-3.55, -0.285], "ori": -1.28}
< {"topic": "/tracked_pose", "pos": [-3.55, -0.288], "ori": -1.28}
< {"topic": "/tracked_pose", "pos": [-3.548, -0.288], "ori": -1.28}
< {"topic": "/tracked_pose", "pos": [-3.55, -0.285], "ori": -1.28}

/ws/v2/topics 中的 v2 代表 WebSocket API 版本。 目前,v2 是唯一可用的版本。我们致力于维持 API 的稳定性;然而,如果需要进行重大更改,我们将提供更新的版本。

在上述示例中,订阅了两个主题:

  • /slam/state: 用于定位状态更新。
  • /tracked_pose: 用于位姿更新。

订阅之后,每当定位状态或机器人位姿发生变化时,服务器都会主动通知您。

远程控制

WebSocket 比 REST API 响应更迅速,因此更适合遥测遥控等实时操作。

首先,将控制模式切换为 remote(远程):

curl -X POST \
  -H "Content-Type: application/json" \
  -d '{"mode": "remote"}' \
  http://192.168.25.25:8090/services/wheel_control/set_control_mode

然后,使用 WebSocket 发送控制指令:

$ wscat -c ws://192.168.25.25:8090/ws/v2/topics
connected (press CTRL+C to quit)
> {"topic": "/twist", "linear_velocity": 0, "angular_velocity": -0.6522}
< {"topic": "/twist_feedback"}
> {"topic": "/twist", "linear_velocity": 0, "angular_velocity": -0.6522}
< {"topic": "/twist_feedback"}

linear_velocity: 0, angular_velocity: -0.6522 指挥机器人保持原位(线速度为 0),同时向右旋转(角速度为 -0.6522 弧度/秒)。

危险

避免快速连续发送大量的 /twist 指令。您应该在发送下一条指令前等待 /twist_feedback 消息。 如果网络连接缓慢或不稳定,这一点尤为重要。

指令可能会堆积在 Socket 缓冲区中。 即使您停止发送指令,机器人仍会继续接收并处理缓冲区中已有的指令。 这可能导致机器人在停止操作后仍继续移动较长时间,直到执行完所有缓冲的指令。

Edit this page
最后更新: 2026/6/17 13:24
Contributors: FengZhaolin
Prev
开始移动
Next
Robot Admin (单机版)