Appearance
rosbridge WebSocket 开发
这条路线使用当前已经运行的 naviai_rosbridge 容器,通过 WebSocket 访问 ROS。开发端不需要安装 ROS,也不需要进入 Docker 容器。
完整路线原文见:rosbridge 开发路线原文。
当前状态
| 项 | 值 |
|---|---|
| 容器 | naviai_rosbridge |
| ROS 节点 | /rosbridge_websocket、/rosapi |
| WebSocket URL | ws://192.168.217.100:9090 |
| 监听地址 | 0.0.0.0:9090 |
| ROS master | http://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/resource | Orin 资源状态 |
/zj_humanoid/robot/orin_states/errors | Orin 错误状态 |
/zj_humanoid/robot/pico_states/resource | Pico/外部控制侧资源状态 |
/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 的
goal、cancel。 - 模式切换、重启、停止类 service。
优缺点
| 项 | 说明 |
|---|---|
| 优点 | 客户端无需 ROS;适合 Web/业务系统;本机和局域网其他服务器都容易接入 |
| 缺点 | 依赖 rosbridge;大流量 topic 可能较重;类型检查弱于原生 ROS |
| 推荐用途 | Web 控制台、状态面板、业务系统集成、只读数据展示 |