ROS Flutter GUI App:跨平台机器人可视化控制界面使用记录

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

连接并控制机器人

  1. 启动 ROS Flutter GUI App

    如果你使用的是 Linux 桌面版,直接运行:

    bash

    复制代码

    cd ~/tools/ROS_Flutter_Gui_App
    flutter run -d linux

  2. 配置连接参数

    • 在应用设置中,将 init 配置改为 2(使用 walking 机器人配置)

    • 确保 WebSocket 地址正确指向运行 rosbridge 的机器人 IP(默认 ws://localhost:9090

  3. 连接机器人

    点击左上角的连接按钮,如果一切正常,应用界面会显示地图和机器人的当前位置。

  4. 开始控制

    • 移动控制

      :点击键盘图标,底部会出现两个控制圆盘。左边控制前后移动,右边控制转向。再次点击键盘图标可隐藏控制盘。

    • 设置导航目标

      :点击水滴图标,然后在地图上点击想要机器人到达的位置,再次点击水滴图标确认。机器人就会开始自主导航。

    • 状态监控

      :顶栏会实时显示机器人的速度、方向等信息。

整个过程非常直观,就像在玩一个遥控机器人游戏。

在手机上使用

如果你希望用手机控制机器人,可以编译 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 试图将应用安装到系统目录。解决方法:

  1. 直接运行编译好的程序(推荐):

    bash

    复制代码

    ./build/linux/x64/debug/bundle/ros_flutter_gui_app

  2. 或修改 CMakeLists.txt,注释掉 install 相关行。

无法连接到 rosbridge

如果应用提示连接失败,请检查:

  • rosbridge 服务是否已启动:ps aux | grep rosbridge

  • 防火墙是否开放 9090 端口

  • 手机/电脑与机器人是否在同一网段

  • WebSocket 地址格式是否正确(ws://IP:9090

地图显示空白

可能的原因:

  • 话题名称不匹配:检查机器人发布的地图话题名,在应用配置中对应修改

  • 坐标变换问题:确认机器人发布了 tf 变换

相关推荐
芙莉莲教你写代码8 小时前
Flutter 框架跨平台鸿蒙开发 - 时区转换器应用
学习·flutter·华为·harmonyos
芙莉莲教你写代码8 小时前
Flutter 框架跨平台鸿蒙开发 - 冥想指导应用
flutter·华为·harmonyos
王码码20358 小时前
Flutter 三方库 preact_signals 的鸿蒙化适配指南 - 掌控极致信号响应、Signals 架构实战、鸿蒙级精密状态指控专家
flutter·harmonyos·鸿蒙·openharmony·preact_signals
kobesdu9 小时前
LeRobot “机器人万能接口”:现状与前沿进展
机器人·ros
u868810 小时前
MaixinVoiceAI 3.0家电售后电话报修机器人解决方案
人工智能·机器人·大模型电话对接·coze 智能体接入电话·ai语音智能体
芙莉莲教你写代码10 小时前
Flutter 框架跨平台鸿蒙开发 - 密码管理器应用
服务器·flutter·华为·harmonyos
manyikaimen10 小时前
博派智能-运动控制技术-RTCP-五轴联动
c++·图像处理·qt·算法·计算机视觉·机器人·c#
才兄说11 小时前
机器人二次开发数据中心巡检?人力省60%
机器人
阿桂有点桂11 小时前
Flutter打包的app增加签名
flutter