ROS Flutter GUI App
项目地址:https://github.com/chengyangkj/ROS_Flutter_Gui_App
ROS Flutter GUI App 是基于 Google 的 Flutter 框架开发,能够一套代码同时运行在 Android、iOS、Web、Linux、Windows 和 macOS 平台,为 ROS1/ROS2 机器人提供统一的可视化控制界面。
项目背景
ROS Flutter GUI App 由开发者 chengyangkj 发起并开源,是一个专门为 ROS 机器人设计的跨平台人机交互软件。它通过 WebSocket 与 ROS 系统通信,让用户可以用手机、平板或电脑轻松控制机器人,实时查看地图、传感器数据、摄像头画面等信息。
项目的核心理念是:让机器人控制像玩手机游戏一样简单。无论你使用的是 Android 手机、iPhone、Windows 电脑,还是 Linux 工作站,都能获得一致的操作体验。
核心功能亮点
根据项目文档,这款应用具备以下主要功能:
| 功能模块 | 具体能力 |
|---|---|
| 地图显示 | 实时显示机器人的占用网格地图 |
| 机器人定位 | 实时展示机器人在地图上的位置和朝向 |
| 遥操作控制 | 虚拟手柄、键盘或物理游戏手柄控制机器人移动 |
| 导航功能 | 支持单点和多点路径导航 |
| 路径规划可视化 | 显示机器人的规划路径 |
| 状态监控 | 电池电量实时显示 |
| 摄像头画面 | 实时查看机器人摄像头回传画面 |
这些功能覆盖了机器人日常开发和调试的绝大部分场景,从建图、定位到导航,都可以通过这个 App 完成。
技术架构解析
通信原理
ROS Flutter GUI App 采用 WebSocket + rosbridge 的通信方案:
-
机器人端运行
rosbridge_server,将 ROS 话题通过 WebSocket 对外暴露 -
App 端通过 WebSocket 连接到 rosbridge,订阅和发布 ROS 话题
-
所有通信数据采用 JSON 格式,轻量且跨语言
这种架构的优势在于:无需修改机器人原有代码,只需启动 rosbridge 服务,即可让任意平台的应用与 ROS 系统通信。
跨平台实现
得益于 Flutter 的跨平台能力,应用的核心代码全部用 Dart 语言编写,一套代码可以编译到 6 个平台:
-
Android:生成 APK 或 AppBundle,可直接安装到手机
-
iOS:生成 iOS 应用(需 Mac 编译)
-
Web:生成 HTML5 页面,浏览器即可访问
-
Linux:生成 Linux 桌面应用
-
Windows:生成 Windows 可执行文件
-
macOS:生成 Mac 桌面应用
项目还配置了 GitHub Actions 自动构建,每次发布新版本都会自动编译各平台的可执行文件,用户可以直接下载使用。
使用过程详解
接下来,我们以一个实际的仿真机器人为例,完整演示如何使用 ROS Flutter GUI App。
前期准备
1. 安装 ROS Flutter GUI App
你可以通过两种方式获取应用:
-
从 GitHub Releases 下载预编译的二进制文件
-
或者克隆源码自行编译:
git clone https://github.com/chengyangkj/ROS_Flutter_Gui_App
cd ROS_Flutter_Gui_App
flutter run -d linux # Linux桌面版
2. 准备 ROS 环境
本文以 ROS2 Humble 为例,需要安装 rosbridge_server:
bash
sudo apt install ros-humble-rosbridge-server
如果需要摄像头画面,还需安装 web_video_server:
bash
sudo apt install ros-humble-web-video-server
启动仿真机器人
以 walking 仿真机器人为例,这是一个开源的移动机器人仿真平台:
bash
# 加载gazebo环境
. /usr/share/gazebo/setup.bash
`
启动仿真环境`
ros2 launch walking_application house_world_inspection.launch.py
执行后,你会看到 Gazebo 仿真界面加载出一个室内环境,机器人已经准备就绪。
启动通信桥接
新开一个终端,启动 rosbridge 服务:
bash
ros2 launch rosbridge_server rosbridge_websocket_launch.xml
如果需要摄像头画面,再开一个终端启动 web_video_server:
bash
ros2 run web_video_server web_video_server
连接并控制机器人
-
启动 ROS Flutter GUI App
如果你使用的是 Linux 桌面版,直接运行:
bash
cd ~/tools/ROS_Flutter_Gui_App
flutter run -d linux -
配置连接参数
-
在应用设置中,将
init配置改为2(使用 walking 机器人配置) -
确保 WebSocket 地址正确指向运行 rosbridge 的机器人 IP(默认
ws://localhost:9090)
-
-
连接机器人
点击左上角的连接按钮,如果一切正常,应用界面会显示地图和机器人的当前位置。
-
开始控制
-
移动控制
:点击键盘图标,底部会出现两个控制圆盘。左边控制前后移动,右边控制转向。再次点击键盘图标可隐藏控制盘。
-
设置导航目标
:点击水滴图标,然后在地图上点击想要机器人到达的位置,再次点击水滴图标确认。机器人就会开始自主导航。
-
状态监控
:顶栏会实时显示机器人的速度、方向等信息。
-
整个过程非常直观,就像在玩一个遥控机器人游戏。
在手机上使用
如果你希望用手机控制机器人,可以编译 Android 版本:
bash
# 连接安卓手机(需开启USB调试)
flutter run
编译完成后,应用会自动安装到手机。手机和机器人需要在同一网络下,配置好机器人 IP 即可实现无线控制。
手机端界面与桌面版一致,触控操作更加自然,真正实现"捧着手机控制机器人"。
实际应用案例
案例1:Turtlebot4 仿真控制
在创客智造的教程中,作者详细演示了用 ROS Flutter GUI App 控制 Turtlebot4 仿真机器人的过程:
-
启动 Turtlebot4 仿真环境
-
通过 App 订阅地图话题,实时显示建图进度
-
设置多个导航点,机器人依次到达
-
监控电池电量,防止仿真中"电量耗尽"
常见问题解决
报错1
text
./ros_flutter_gui_app: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.32' not found (required by /home/kobe/ros2_ws/src/ros_flutter_gui_app_linux_x86_64/lib/libgamepads_linux_plugin.so)
解决方法:
bash
sudo apt-get install ros-humble-async-web-server-cpp
报错2
text
./ros_flutter_gui_app: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.32' not found (required by /home/kobe/ros2_ws/src/ros_flutter_gui_app_linux_x86_64/lib/libgamepads_linux_plugin.so)
解决方法:添加 Ubuntu Toolchain 测试 PPA 并更新 libstdc++。
编译错误:CMake安装权限问题
如果你在编译 Linux 版本时遇到类似错误:
text
CMake Error at cmake_install.cmake:66 (file): file INSTALL cannot copy file ... to /usr/local/...: Permission denied.
这是因为 CMake 试图将应用安装到系统目录。解决方法:
-
直接运行编译好的程序(推荐):
bash
./build/linux/x64/debug/bundle/ros_flutter_gui_app -
或修改 CMakeLists.txt,注释掉 install 相关行。
无法连接到 rosbridge
如果应用提示连接失败,请检查:
-
rosbridge 服务是否已启动:
ps aux | grep rosbridge -
防火墙是否开放 9090 端口
-
手机/电脑与机器人是否在同一网段
-
WebSocket 地址格式是否正确(
ws://IP:9090)
地图显示空白
可能的原因:
-
话题名称不匹配:检查机器人发布的地图话题名,在应用配置中对应修改
-
坐标变换问题:确认机器人发布了 tf 变换