Skip to content

About

A single-window GUI for ROS-based autonomous exploration

Resources

Stars

12 stars

Watchers

0 watching

Forks

Repository files navigation

ExploraDeck

Your entire exploration stack, in a single pane.

Python ROS License


ExploraDeck is a single-window PyQt5 mission control GUI for ROS-based autonomous drone exploration. It replaces the traditional multi-window workflow — ground station, SSH terminals, and standalone RViz — with a 5-step wizard that takes you from power-on to autonomous exploration in five clicks.

Built and tested on the SU17 drone + FUEL planner stack, but designed to be extensible to any exploration pipeline.

Exploration in progress    Exploration complete

✨ Why ExploraDeck?

Traditional workflow ExploraDeck
3+ windows: ground station, SSH terminals, RViz One window
Manually source ROS workspaces, type roslaunch commands Click a button
No guardrails — easy to launch out of order 5-step wizard enforces correct sequencing
Hop between terminals to check status Real-time telemetry in the same pane
No built-in log streaming Live exploration log tailed from the drone

🚀 Quick Start

git clone https://github.com/WinstonJQ/exploradeck.git
cd exploradeck
./run.sh              # full version with embedded RViz
./run.sh --no-rviz    # control panel only
./run.sh --test       # test mode: skip takeoff hardware check

Prerequisites (laptop):

  • Ubuntu 20.04, system Python 3.8+
  • ROS Noetic (ros-noetic-desktop-full)
  • PyQt5 (python3-pyqt5 — system deb package, zero pip installs)
  • SSH key-based auth to the drone

🎮 The 5-Step Wizard

Step Action Runs on
1. Start Control Launch MAVROS + Prometheus flight control Drone (SSH)
2. Start Localization Launch MID360 LiDAR + FAST-LIO odometry Drone (SSH)
3. Takeoff Check Verify position, arm state, odometry stability Remote + local
4. Start Exploration Launch bridge nodes + FUEL planner Drone (SSH)
5. Trigger Switch to COMMAND_CONTROL → publish goal Drone (SSH)

Safety design: each step verifies success before unlocking the next. Real-time position and battery telemetry stream via local ROS subscriptions — zero additional CPU load on the drone.


中文详细文档

运行环境要求

笔记本端(GUI 运行在此)

组件 版本/来源 说明
Ubuntu 20.04
Python 3.8.10(系统 /usr/bin/python3) 必须用系统 Python,ROS Noetic 绑定编译在 Python 3.8 上
ROS Noetic (ros-noetic-desktop-full) 提供 rospy、rviz、nav_msgs、sensor_msgs
PyQt5 python3-pyqt5(apt deb 包) sudo apt install python3-pyqt5
SSH 系统自带 需配置免密密钥到无人机
网络 以太网连接,IP 192.168.1.x 网段 笔记本 IP 固定为 192.168.1.123

关键:不能用 conda Python。 ROS Noetic 的 rospy、rviz 等 Python 绑定是给系统 Python 3.8 编译的,conda Python 3.9 无法加载 .so 文件。run.sh 中硬编码了 PYTHON=/usr/bin/python3。

无人机端(SU17 机载计算机)

无人机上需要预装以下组件和脚本:

组件 说明
ROS Noetic 机载 ROS 环境
Prometheus v2 amov 控制栈,含 uav_control、MAVROS 通信
FAST-LIO MID360 LiDAR 里程计
FUEL planner 自主探索规划器(本仓库仅作示例,可替换为其他规划器)
mid360_output_headless.sh 定位启动脚本,位于 ~/su17_experiment/src/su17_experiment/scripts/
start_fuel_su17.sh 探索启动脚本,位于 ~/
su17_onboard.launch 控制启动 launch 文件,位于 ROS 包 su17_experiment

GUI 通过 SSH 远程调用无人机端的这些脚本,不在 Python 代码里拼等价命令——确保 GUI 流程与手动命令行流程完全一致。

架构

文件结构

exploradeck/
├── main.py              # 入口:QApplication + 主窗口 + ROS 节点初始化
├── launch_panel.py      # 左侧控制面板 UI:5 步向导 + 实时位置/电量 + 操作提示
├── step_worker.py       # 后台 QThread:每步启动命令 + 验证轮询 + 本地遥测订阅
├── rviz_widget.py       # 内嵌 RViz 3D 视图
├── log_panel.py         # 探索日志实时显示面板
├── ssh_utils.py         # SSH 远程执行(subprocess 调 ssh 命令)
├── ros_utils.py         # ROS 话题订阅/发布
├── config.py            # 所有配置常量
└── images/              # 截图
    ├── exploration_in_progress.png
    └── exploration_complete.png

run.sh                   # 一键启动脚本

数据流

用户点击按钮
  → launch_panel 设黄灯
  → step_worker QThread.start():
      1. SSH 远程执行启动命令 (setsid bash -c 'roslaunch ...')
      2. 轮询验证(检查 ROS 节点/话题)
      3. emit signal → launch_panel 设绿灯/红灯
  → 绿灯后自动解锁下一步

遥测(位置 + 电量):
  笔记本本地 rospy 订阅 /Odometry + /uav1/mavros/battery
    → LocalPositionWorker (QThread, 5Hz)
    → position_ready / battery_ready 信号
    → launch_panel 实时更新
  零 SSH,零无人机额外 CPU 开销

GUI 布局

┌──────────────────────────────┬─────────────────────────────────┐
│  控制面板                     │  RViz 3D 视图                   │
│  ┌─────────────────────────┐ │                                 │
│  │ 当前操作提示             │ │                                 │
│  ├─────────────────────────┤ │                                 │
│  │ ● 1. 启动控制   [启动]  │ │                                 │
│  │ ● 2. 启动定位   [启动]  │ │                                 │
│  │ ● 3. 起飞悬停检查[确认] │ │                                 │
│  │ ● 4. 启动探索   [启动]  │ │                                 │
│  │ ● 5. 触发探索   [触发]  │ │                                 │
│  ├─────────────────────────┤ │                                 │
│  │ 实时位置                 │ │                                 │
│  │ x 0.00  y 0.00  z 1.02  │ │                                 │
│  │ yaw 15.3°                │ │                                 │
│  │ 电池 16.8V  92%          │ │                                 │
│  ├─────────────────────────┤ │                                 │
│  │ [全部停止]               │ │                                 │
│  └─────────────────────────┘ │                                 │
│                              ├─────────────────────────────────┤
│                              │ 探索日志                        │
│                              │ [INFO] Waiting for trigger...   │
│                              │ [INFO] Frontier detection...    │
│                              └─────────────────────────────────┘
└──────────────────────────────┴─────────────────────────────────┘

配置参数

编辑 config.py 即可适配不同环境:

# SSH 连接
SSH_HOST = "su17"            # SSH config alias 或 IP
SSH_USER = "amov"

# ROS 网络
ROS_MASTER_URI = "http://192.168.1.88:11311"   # 无人机 ROS Master
ROS_IP_LOCAL = "192.168.1.123"                  # 笔记本 IP

# 超时设置
TIMEOUT_CONTROL = 30         # 步骤 1:控制节点启动超时
TIMEOUT_LOCALIZATION = 30    # 步骤 2:定位启动超时
TIMEOUT_EXPLORATION = 30     # 步骤 4:探索启动超时

# Rviz 配置
RVIZ_CONFIG_PATH = "/path/to/your/traj_su17.rviz"

扩展性

虽然 ExploraDeck 当前以 FUEL 规划器为示例,但设计上是规划器无关的:

  • 替换探索算法:修改 CMD_START_EXPLORATION 和 NODES_EXPLORATION 指向你自己的 launch 文件和 ROS 节点名即可
  • 适配其他无人机:修改 SSH_HOST、ROS_MASTER_URI、控制/定位启动命令
  • 增加步骤:在 launch_panel.py 的 steps 列表中插入新行

ExploraDeck 本质上是一个 ROS 任务编排面板 + SSH 远程执行 + 本地遥测订阅 的通用框架。

许可证

MIT — 详见 LICENSE。

About

A single-window GUI for ROS-based autonomous exploration

Resources

Stars

12 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages