Skip to content

rosbridge WebSocket 开发

这条路线使用当前已经运行的 naviai_rosbridge 容器,通过 WebSocket 访问 ROS。开发端不需要安装 ROS,也不需要进入 Docker 容器。

完整路线原文见:rosbridge 开发路线原文

当前状态

容器naviai_rosbridge
ROS 节点/rosbridge_websocket/rosapi
WebSocket URLws://192.168.217.100:9090
监听地址0.0.0.0:9090
ROS masterhttp://192.168.217.1:11311
认证authenticate=false
topic/service 过滤topics_glob=[*]services_glob=[*]

数据链路

text
你的程序/浏览器
  -> ws://192.168.217.100:9090
  -> naviai_rosbridge
  -> ROS master: 192.168.217.1:11311
  -> 真实 ROS 节点/容器/外部设备

本机开发配置

在 Orin 本机运行程序:

bash
export ROSBRIDGE_URL=ws://127.0.0.1:9090

如果浏览器实际运行在笔记本上,即使页面由 Orin 提供,浏览器里的地址也应使用:

bash
export ROSBRIDGE_URL=ws://192.168.217.100:9090

局域网其他服务器开发

其他服务器或电脑需要能访问 192.168.217.100:9090

bash
export ROSBRIDGE_URL=ws://192.168.217.100:9090

不要把浏览器或后端进程里的 rosbridge 地址写成 localhost,除非程序确实运行在 Orin 本机。

前端 roslibjs 示例

js
const ROSBRIDGE_URL = "ws://192.168.217.100:9090";

const ros = new ROSLIB.Ros({
  url: ROSBRIDGE_URL,
});

ros.on("connection", () => console.log("rosbridge connected"));
ros.on("error", (err) => console.error("rosbridge error", err));
ros.on("close", () => console.log("rosbridge closed"));

订阅机器人状态:

js
const robotState = new ROSLIB.Topic({
  ros,
  name: "/zj_humanoid/robot/robot_state",
  messageType: "zj_robot/RobotState",
});

robotState.subscribe((msg) => {
  console.log("robot_state", msg);
});

推荐只读 topic

Topic说明
/zj_humanoid/robot/robot_state机器人整体状态
/zj_humanoid/robot/orin_states/resourceOrin 资源状态
/zj_humanoid/robot/orin_states/errorsOrin 错误状态
/zj_humanoid/robot/pico_states/resourcePico/外部控制侧资源状态
/zj_humanoid/robot/monitor_status监控状态
/zj_humanoid/hand/joint_states灵巧手关节状态
/zj_humanoid/upperlimb/joint_states上肢关节状态

不建议直接操作的接口

rosbridge 当前无认证,且可以访问全部 topic/service。开发时不要随便发布控制命令。

重点避免:

  • /cmd_vel 类速度控制。
  • /zj_humanoid/cmd_vel/web
  • /zj_humanoid/upperlimb/servoj/*
  • /zj_humanoid/upperlimb/speedj/*
  • /zj_humanoid/upperlimb/servol/*
  • action 的 goalcancel
  • 模式切换、重启、停止类 service。

优缺点

说明
优点客户端无需 ROS;适合 Web/业务系统;本机和局域网其他服务器都容易接入
缺点依赖 rosbridge;大流量 topic 可能较重;类型检查弱于原生 ROS
推荐用途Web 控制台、状态面板、业务系统集成、只读数据展示