借助ros bridge websocket实现的跨平台flutter gui 人机交互软件 本项目已接入CI,保证多环境可用,并自动打包多平台二进制Release版本
目录
项目截图
功能/TODO:
| 功能 | 状态 | 备注 |
|---|---|---|
| ROS1/ROS2通信 | ✅ | |
| 地图显示 | ✅ | |
| 机器人实时位置显示 | ✅ | |
| 机器人速度仪表盘 | ✅ | |
| 机器人手动控制 | ✅ | |
| 机器人重定位 | ✅ | |
| 机器人单点/多点导航 | ✅ | |
| 机器人全局/局部规划轨迹显示 | ✅ | |
| 机器人拓扑地图功能 | ❌ | |
| 电池电量显示 | ✅ | |
| 地图编辑功能 | ❌ | |
| 机器人导航任务链 | ❌ | |
| 地图加载 | ❌ | |
| 地图保存 | ❌ | |
| 相机图像显示 | ❌ | |
| 机器人车身轮廓显示 | ❌ | 支持配置异形车身 |
| 图层相机视角调整 | ✅ |
从Release界面 下载所需要的对应环境的版本(windows,linux,web,android)
解压下载的压缩包,APP端下载后即可运行,web端运行时需要借助网站服务器这里介绍下web端使用:
从Release界面下载最新的web端版本(ros_flutter_gui_app_web.tar.gz)
解压到本地,借助Apache等网站服务器部署即可
进入压缩包目录:
cd ros_flutter_gui_app_web我这里采用python的来搭建一个简单的网站服务器:
python -m http.server 8000由于这里指定的端口为8000,在google浏览器(其他浏览器未测试,可能出现空白界面问题)输入本机ip:8000即可访问站点
软件借助ros bridge websocket实现与ros之间的通信,因此需要先在自己的机器人系统上安装ros bridget websocket并运行,由于ROS Bridge websocket的实现兼容ros1与ros2,因此这里区分ros1 与 ros2分别介绍安装教程
-
确保已安装 ROS 1(例如:ROS Melodic 或 ROS Noetic)。如果没有,请参考 ROS 安装指南 进行安装。
-
安装
rosbridge_suite包:sudo apt-get install ros-<your-ros-distro>-rosbridge-suite
将
<your-ros-distro>替换为你的 ROS 版本,例如melodic或noetic。
-
启动 ROS 核心:
roscore
-
在新的终端中,启动 rosbridge_websocket 节点:
roslaunch rosbridge_server rosbridge_websocket.launch
-
验证 rosbridge_websocket 是否正在运行:
打开浏览器,导航到
http://localhost:9090,如果连接成功,说明 WebSocket 服务器已启动并运行。
-
确保已安装 ROS 2(例如:ROS Foxy、Galactic 或 Humble)。如果没有,请参考 ROS 2 安装指南 进行安装。
-
安装
rosbridge_suite包:sudo apt-get install ros-<your-ros2-distro>-rosbridge-suite
将
<your-ros2-distro>替换为你的 ROS 2 版本,例如foxy、galactic或humble。 -
在每个新的终端会话中,source 你的 ROS 2 环境:
source /opt/ros/<your-ros2-distro>/setup.bash
-
在新的终端中,启动 rosbridge_websocket 节点:
ros2 launch rosbridge_server rosbridge_websocket_launch.xml
-
验证 rosbridge_websocket 是否正在运行:
打开浏览器,导航到
http://localhost:9090,如果连接成功,说明 WebSocket 服务器已启动并运行。
打开软件,进行topic设置:
配置说明
| 配置名 | 消息类型 | 说明 |
|---|---|---|
| battery_topic | sensor_msgs/BatteryState | 机器人电池电量的topic,软件订阅 |
| mapTopic | nav_msgs/OccupancyGrid | 机器人地图话题名,软件订阅 |
| laserTopic | sensor_msgs/LaserScan | 激光话题名,软件订阅 |
| localPathTopic | nav_msgs/Path | 机器人局部路径话题名,软件订阅 |
| globalPathTopic | nav_msgs/Path | 机器人全局路径话题名,软件订阅 |
| odomTopic | nav_msgs/Odometry | 机器人里程计话题名,软件订阅 |
| relocTopic | geometry_msgs/PoseWithCovarianceStamped | 机器人重定位topic名,软件发布 |
| navGoalTopic | geometry_msgs/PoseStamped | 机器人导航目标点话题名,软件发布 |
| SpeedCtrlTopic | geometry_msgs/Twist | 机器人速度控制话题名,软件发布 |
| maxVx | double | 软件手动控制时最大vx速度 |
| maxVydouble | 软件手动控制时最大vy速度 | |
| maxVw | double | 软件手动控制时最大vw速度 |
| mapFrameName | string | 地图坐标系tf fram名 |
| baseLinkFrameName | string | 机器人底盘坐标系tf fram名 |
设置完成后,点击connect按钮,连接到rosbridge_websocket,连接成功后,软件会自动订阅设置的topic,并显示topic的数据:

软件会自动订阅设置的地图topic,配置项[mapTopic],并显示地图数据,地图数据会以2D栅格的形式显示在界面上,点击地图上的栅格,会显示栅格的坐标和栅格的值。
软件订阅ros的tf,手动构建tf树,实现tf2_dart类,通过tf2_dart类,可以获取机器人在地图上的位置,并显示在界面上。
软件会自动发布设置的手动控制速度,配置项[SpeedCtrlTopic],并显示机器人速度控制数据,点击界面上的速度控制按钮,可以控制机器人的速度。 左侧遥感可以控制机器人的速度,遥感左上角为正方向,遥感右下角为负方向,遥感中间为停止。 右侧遥感既可控制机器人速度,又可控制机器人旋转,遥感左上角为正方向,遥感右下角为负方向,左侧为向左旋转,右侧向右旋转,遥感中间为停止。
- 部分UI界面效果参考自ros_navigation_command_app,仅参考UI显示效果,本仓库的代码的实现均为原创
- roslibdart,实现flutter 中的ros bridge websocket的通信,借助此库可以直接与ros进行端对端通信
- matrix_gesture_detector 软件的手势识别在此pub包的基础上做更改



