借助ros bridge websocket实现的跨平台flutter gui 人机交互软件 本项目已接入CI,保证多环境可用,并自动打包多平台二进制Release版本
目录
项目截图
功能/TODO:
功能 | 状态 | 备注 |
---|---|---|
ROS1/ROS2通信 | ✅ | |
地图显示 | ✅ | |
机器人实时位置显示 | ✅ | |
机器人速度仪表盘 | ✅ | |
机器人手动控制 | ✅ | |
机器人重定位 | ✅ | |
机器人单点/多点导航 | ✅ | |
机器人全局/局部规划轨迹显示 | ✅ | |
机器人拓扑地图功能 | ❌ | |
电池电量显示 | ✅ | |
地图编辑功能 | ❌ | |
机器人导航任务链 | ✅ | |
地图加载 | ❌ | |
地图保存 | ❌ | |
相机图像显示 | ✅ | 依赖web_video_server 暂不支持web端使用,其余均支持 |
相机图像显示 | ✅ | 依赖web_video_server 暂不支持web端使用,其余均支持 |
机器人车身轮廓显示 | ❌ | 支持配置异形车身 |
图层相机视角调整 | ✅ |
从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名 |
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数据:
软件会自动订阅设置的地图topic,配置项[mapTopic],并显示地图数据,地图数据会以2D栅格的形式显示在界面上,点击地图上的栅格,会显示栅格的坐标和栅格的值。
软件订阅ros的tf,手动构建tf树,实现tf2_dart类,通过tf2_dart类,可以获取机器人在地图上的位置,并显示在界面上。
软件会自动发布设置的手动控制速度,配置项[SpeedCtrlTopic],并显示机器人速度控制数据,点击界面上的速度控制按钮,可以控制机器人的速度。 左侧遥感可以控制机器人的速度,遥感左上角为正方向,遥感右下角为负方向,遥感中间为停止。 右侧遥感既可控制机器人速度,又可控制机器人旋转,遥感左上角为正方向,遥感右下角为负方向,左侧为向左旋转,右侧向右旋转,遥感中间为停止。
相机图像显示依赖 web_video_server
包,这个包会自动将系统中所有的图像topic转换为mjpeg格式的http视频流
以下教程是在 ROS 1 和 ROS 2 中安装和验证该包的参考方法。
-
安装
web_video_server
包在 ROS 1 中,运行以下命令安装
web_video_server
包:sudo apt install ros-noetic-web-video-server
-
启动相机节点
启动自己的相机节点,确保有图片topic
- 启动 web_video_server
启动 web_video_server 节点,它将发布图像流供 Web 客户端访问:
rosrun web_video_server web_video_server
- 验证视频流
在 Web 浏览器中打开以下链接,查看视频流(假设相机话题为 /usb_cam/image_raw):
http://localhost:8080/stream?topic=/usb_cam/image_raw
如果图像正常显示,则 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
- 安装依赖
安装所需的依赖:
cd ~/ros2_ws/
rosdep install --from-paths src --ignore-src -r -y
- 编译工作空间
使用 colcon 工具编译工作空间:
colcon build
- 启动相机节点
启动自己的相机节点,确保有图片topic
- 启动 web_video_server 节点:
ros2 run web_video_server web_video_server
- 验证视频流
在 Web 浏览器中打开以下链接,查看视频流(假设相机话题为 /usb_cam/image_raw):
http://localhost:8080/stream?topic=/usb_cam/image_raw
如果图像正常显示,则 web_video_server 已成功配置。
长按左侧导航点按钮,可以管理航点,并进行多点导航
在软件中需要配置要显示的话题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 文件。