Skip to content

chengyangkj/ROS_Flutter_Gui_App

Repository files navigation

GitHub last commit GitHub stars GitHub forks GitHub issues Static Badge

web android linux windows

借助ros bridge websocket实现的跨平台flutter gui 人机交互软件 本项目已接入CI,保证多环境可用,并自动打包多平台二进制Release版本

目录

项目截图

light

main.gif mapping.gif

功能/TODO:

功能 状态 备注
ROS1/ROS2通信
地图显示
机器人实时位置显示
机器人速度仪表盘
机器人手动控制
机器人重定位
机器人单点/多点导航
机器人全局/局部规划轨迹显示
机器人拓扑地图功能
电池电量显示
地图编辑功能
机器人导航任务链
地图加载
地图保存
相机图像显示 依赖web_video_server 暂不支持web端使用,其余均支持
相机图像显示 依赖web_video_server 暂不支持web端使用,其余均支持
机器人车身轮廓显示 支持配置异形车身
图层相机视角调整
Star History Chart

一,使用教程

1.1 下载项目 Release 包

Release界面 下载所需要的对应环境的版本(windows,linux,web,android)

1.2 行项目

解压下载的压缩包,APP端下载后即可运行,web端运行时需要借助网站服务器这里介绍下web端使用:

1.2.1 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即可访问站点

1.3 机器人端环境配置

软件借助ros bridge websocket实现与ros之间的通信,因此需要先在自己的机器人系统上安装ros bridget websocket并运行,由于ROS Bridge websocket的实现兼容ros1与ros2,因此这里区分ros1 与 ros2分别介绍安装教程

ROS 1

安装 rosbridge_suite

  1. 确保已安装 ROS 1(例如:ROS Melodic 或 ROS Noetic)。如果没有,请参考 ROS 安装指南 进行安装。

  2. 安装 rosbridge_suite

    sudo apt-get install ros-<your-ros-distro>-rosbridge-suite

    <your-ros-distro> 替换为你的 ROS 版本,例如 melodicnoetic

运行 rosbridge_websocket

  1. 启动 ROS 核心

    roscore
  2. 在新的终端中,启动 rosbridge_websocket 节点

    roslaunch rosbridge_server rosbridge_websocket.launch
  3. 验证 rosbridge_websocket 是否正在运行

    打开浏览器,导航到 http://localhost:9090,如果连接成功,说明 WebSocket 服务器已启动并运行。

ROS 2

安装 rosbridge_suite

  1. 确保已安装 ROS 2(例如:ROS Foxy、Galactic 或 Humble)。如果没有,请参考 ROS 2 安装指南 进行安装。

  2. 安装 rosbridge_suite

    sudo apt-get install ros-<your-ros2-distro>-rosbridge-suite

    <your-ros2-distro> 替换为你的 ROS 2 版本,例如 foxygalactichumble

  3. 在每个新的终端会话中,source 你的 ROS 2 环境

    source /opt/ros/<your-ros2-distro>/setup.bash

运行 rosbridge_websocket

  1. 在新的终端中,启动 rosbridge_websocket 节点

    ros2 launch rosbridge_server rosbridge_websocket_launch.xml
  2. 验证 rosbridge_websocket 是否正在运行

    打开浏览器,导航到 http://localhost:9090,如果连接成功,说明 WebSocket 服务器已启动并运行。

1.4 软件运行

打开软件,进行topic设置:

setting_button

设置界面: setting_button

1.5 配置说明

配置名 消息类型 说明
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名
imagePort string 相机图像web video server 服务器短裤
imageTopic string 要展示的相机图像的topic
imageWidth int 要展示的相机图像的宽默认640
imageHeight int 要展示的相机图像的高默认480
ConfigTemplate string 模板配置,软件在升级与初始化时,会根据此模板配置做初始化支持类型("turtlebot3:ros2","turtlebot3:ros1","jackal","turtlebot4","walking")

设置完成后,点击connect按钮,连接到rosbridge_websocket,连接成功后,软件会自动订阅设置的topic,并显示topic数据: connect

1.6 功能说明

1.6.1 地图显示

软件会自动订阅设置的地图topic,配置项[mapTopic],并显示地图数据,地图数据会以2D栅格的形式显示在界面上,点击地图上的栅格,会显示栅格的坐标和栅格的值。

1.6.2 机器人位置显示

软件订阅ros的tf,手动构建tf树,实现tf2_dart类,通过tf2_dart类,可以获取机器人在地图上的位置,并显示在界面上。

1.6.3 机器人速度控制

软件会自动发布设置的手动控制速度,配置项[SpeedCtrlTopic],并显示机器人速度控制数据,点击界面上的速度控制按钮,可以控制机器人的速度。 左侧遥感可以控制机器人的速度,遥感左上角为正方向,遥感右下角为负方向,遥感中间为停止。 右侧遥感既可控制机器人速度,又可控制机器人旋转,遥感左上角为正方向,遥感右下角为负方向,左侧为向左旋转,右侧向右旋转,遥感中间为停止。

1.6.4 相机图像显示

相机图像显示依赖 web_video_server 包,这个包会自动将系统中所有的图像topic转换为mjpeg格式的http视频流

以下教程是在 ROS 1ROS 2 中安装和验证该包的参考方法。

ROS 1 安装web_video_server程

  1. 安装 web_video_server

    ROS 1 中,运行以下命令安装 web_video_server 包:

    sudo apt install ros-noetic-web-video-server
  2. 启动相机节点

启动自己的相机节点,确保有图片topic

  1. 启动 web_video_server

启动 web_video_server 节点,它将发布图像流供 Web 客户端访问:

rosrun web_video_server web_video_server
  1. 验证视频流

在 Web 浏览器中打开以下链接,查看视频流(假设相机话题为 /usb_cam/image_raw):

http://localhost:8080/stream?topic=/usb_cam/image_raw

如果图像正常显示,则 web_video_server 已成功配置。

ROS 2 安装web_video_server教程

安装 web_video_server 包

在 ROS 2 中,您需要从源代码编译 web_video_server。首先,确保您的工作空间已经初始化并设置:

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
git clone https://github.com/RobotWebTools/web_video_server.git
  1. 安装依赖

安装所需的依赖:

cd ~/ros2_ws/
rosdep install --from-paths src --ignore-src -r -y
  1. 编译工作空间

使用 colcon 工具编译工作空间:

colcon build
  1. 启动相机节点

启动自己的相机节点,确保有图片topic

  1. 启动 web_video_server 节点:
ros2 run web_video_server web_video_server
  1. 验证视频流

在 Web 浏览器中打开以下链接,查看视频流(假设相机话题为 /usb_cam/image_raw):

http://localhost:8080/stream?topic=/usb_cam/image_raw

如果图像正常显示,则 web_video_server 已成功配置。

1.5.3 多点导航

长按左侧导航点按钮,可以管理航点,并进行多点导航

软件配置

在软件中需要配置要显示的话题topic地址,以及web video server的端口(如果更改的话需要修改,默认是8080:

需要配置如下两项:

  • imagePort 相机图像web video server 服务器端口
  • imageTopic 要展示的相机图像的topic
  • imageWidth 要展示的相机图像的宽默认640
  • imageHeight 要展示的相机图像的高默认480

引用

  • 部分UI界面效果参考自ros_navigation_command_app,仅参考UI显示效果,本仓库的代码的实现均为原创
  • roslibdart,实现flutter 中的ros bridge websocket的通信,借助此库可以直接与ros进行端对端通信
  • matrix_gesture_detector 软件的手势识别在此pub���的基础上做���

许可证

本项目采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。您可以:

  • 共享 — 在任何媒介或格式中复制和再分发本作品
  • 演绎 — 修改、转换或以本作品为基础进行创作

但须遵守以下条件:

  • 署名 — 您必须给予适当的署名,提供指向许可证的链接,并说明是否对作品进行了修改。您可以以任何合理的方式进行,但不得以任何方式暗示许可人认可您或您的使用。
  • 非商业性使用 — 您不得将本作品用于商业目的。需要得到作者的许可。
  • 相同方式共享 — 如果您对本作品进行了修改、转换或以本作品为基础进行创作,您必须基于与原始作品相同的许可协议分发您的贡献。

如需商业用途,请联系作者以获取授权。

更多详情,请参阅 LICENSE 文件。