【保姆级教程】在AutoDL容器中部署EGO-Planner,实现无人机动态避障规划

【保姆级教程】在AutoDL容器中部署EGO-Planner,实现无人机动态避障规划

作为ROS生态中经典的无人机路径规划框架,EGO-Planner以其高效的动态避障能力和实时重规划特性,成为很多开发者入门无人机规划的首选工具。但在远程容器(如AutoDL)中部署时,常因环境配置、通信问题卡壳。本文结合实战经验,从AutoDL登录到规划成功,一步步带你打通全流程,新手也能轻松上手。

一、前置知识:核心概念与环境准备

在开始前,先明确几个关键概念,避免后续操作 confusion:

  • AutoDL容器:提供远程GPU/CPU资源,预装Linux系统,需通过终端或远程桌面操作;
  • Catkin工作空间 :ROS项目的"工程目录",用于组织代码、编译产物,本文默认工作空间为~/catkin_ws
  • EGO-Planner :无人机路径规划框架,核心功能包为planner/plan_manage,依赖uav_simulator(仿真)、Utils(工具库);
  • ROS消息通信 :节点间通过"话题"传递数据,本文关键目标点话题为/goal_with_id,消息类型quadrotor_msgs/GoalSet

环境要求

  • AutoDL容器:建议选择"Ubuntu 20.04 + ROS Noetic"镜像(若无预装,可后续手动安装,但镜像自带更省心);
  • 硬件:最低1核2G内存,GPU非必需(仅仿真可CPU运行);
  • 网络:确保容器能正常访问外网(用于安装依赖、拉取代码)。

二、Step 1:登录AutoDL并进入容器

这一步是所有操作的起点,重点是"找到终端入口":

  1. 登录AutoDL控制台:打开AutoDL官网(https://www.autodl.com/),登录后在"我的容器"中找到已创建的容器,点击"启动";
  2. 进入终端:启动后点击"JupyterLab",在打开的页面中,左侧导航栏找到"终端"图标(类似命令行的黑色图标),点击即可打开Linux终端;
  3. 确认初始路径 :默认终端路径为/root,后续所有操作均在该用户下执行(无需切换用户,避免权限问题)。

三、Step 2:确认并编译Catkin工作空间

EGO-Planner的代码需放在Catkin工作空间的src目录下,编译后才能运行。若你已上传代码(如之前操作),直接执行以下步骤;若未上传,需先克隆代码(附克隆命令)。

2.1 确认工作空间结构

先检查~/catkin_ws是否存在,以及src目录下是否有EGO-Planner相关代码:

bash 复制代码
# 进入工作空间
cd ~/catkin_ws
# 查看src目录内容(关键看是否有planner、uav_simulator、Utils)
ls src
  • src目录下已有planneruav_simulatorUtils:跳过"克隆代码",直接编译;

  • 若没有:先执行以下命令克隆EGO-Planner及其依赖(需等待1-2分钟,视网络速度而定):

    bash 复制代码
    # 进入src目录
    cd ~/catkin_ws/src
    # 克隆EGO-Planner核心代码
    git clone https://github.com/ZJU-FAST-Lab/EGO-Planner-v2.git planner/plan_manage
    # 克隆无人机仿真代码
    git clone https://github.com/ZJU-FAST-Lab/uav_simulator.git
    # 克隆工具库
    git clone https://github.com/ZJU-FAST-Lab/Utils.git

2.2 编译工作空间

编译是将源代码生成可执行文件(如仿真节点、规划节点)的关键步骤,需确保无编译错误:

bash 复制代码
# 回到工作空间根目录
cd ~/catkin_ws
# 编译(-j1表示单线程编译,避免多线程冲突;性能好可去掉-j1)
catkin_make -j1
  • 编译成功标志:终端最后输出"[100%] Built target xxx",无"error"或"failed";
  • 若编译报错:常见原因是缺少依赖,可执行 sudo apt install ros-noetic-xxx(xxx为报错中提示的缺失包名,如ros-noetic-octomap),安装后重新编译。

2.3 加载ROS环境变量

编译后生成的可执行文件和功能包路径,需通过"环境变量"让系统识别,每次新开终端都需执行

bash 复制代码
# 加载当前工作空间的环境变量
source ~/catkin_ws/devel/setup.bash
  • 可选优化:将上述命令添加到~/.bashrc,实现"新开终端自动加载",无需每次手动输入:

    bash 复制代码
    echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc

四、Step 3:启动EGO-Planner仿真节点

仿真节点是"无人机+环境"的载体,启动后会创建随机障碍物,并等待目标点输入。

3.1 清理旧ROS进程(关键!避免通信冲突)

若之前启动过ROS相关进程(如roscore、仿真节点),未正常关闭会导致"连接重置"错误,需先清理:

bash 复制代码
# 杀死所有ROS相关进程(包括roscore、节点)
pkill -f "ros" && pkill -f "roscore"

执行后等待2-3秒,确保旧进程完全退出。

3.2 启动单机仿真核心

直接用"绝对路径"启动仿真文件,避免因"功能包名识别错误"导致启动失败(这是新手常踩的坑):

bash 复制代码
# 启动仿真节点(会自动启动roscore,无需单独启动)
roslaunch ~/catkin_ws/src/planner/plan_manage/launch/single_drone_interactive.launch
  • 启动成功标志:终端持续输出[FSM]: state: WAIT_TARGET, Drone:0. Waiting for target,表示无人机已就绪,等待目标点;
  • 注意:不要关闭这个终端!关闭会导致仿真节点退出。

五、Step 4:发送目标点,触发避障规划

仿真节点就绪后,需新建一个终端发送目标点,让无人机开始规划。

5.1 新建终端并加载环境变量

在JupyterLab中再次点击"终端"图标,新建一个终端,执行:

bash 复制代码
# 加载环境变量(若已添加到.bashrc,可跳过)
source ~/catkin_ws/devel/setup.bash

5.2 发送正确格式的目标点

关键!之前多次失败的核心原因是"消息格式不匹配",需严格按照quadrotor_msgs/GoalSet的结构发送(通过rosmsg show quadrotor_msgs/GoalSet可查看结构):

bash 复制代码
# 发送目标点到/goal_with_id话题,坐标为(x=5.0, y=2.0, z=1.5)
rostopic pub -1 /goal_with_id quadrotor_msgs/GoalSet "drone_id: 0
goal: [5.0, 2.0, 1.5]"
  • 参数说明:
    • drone_id: 0:单机场景固定为0(多机时区分不同无人机);
    • goal: [5.0, 2.0, 1.5]:目标点的三维坐标,可根据需求修改(如[8.0, 5.0, 2.0]);
    • -1:表示"发送一次后退出",无需持续发送。

六、Step 5:验证规划成功(关键日志解读)

发送目标点后,回到"仿真终端",若出现以下日志,说明EGO-Planner已完全跑通:

  1. 目标点接收成功[INFO] Received goal: 5.000000, 2.000000, 1.500000 → 无人机正确识别目标;
  2. 状态切换正常[FSM]Drone:0, from WAIT_TARGET to SEQUENTIAL_START → 从"等待目标"进入"启动流程";
  3. 动态重规划成功Drone 0 Replan 0, Success=yes(多次出现)→ 无人机实时计算避障路径,每次重规划都成功;
  4. 轨迹执行中[FSM]Drone:0, from REPLAN_TRAJ to EXEC_TRAJ → 规划出的路径正在被执行,"规划→执行"闭环打通。

若出现Success=no:无需担心,偶尔一次重规划失败是正常的,后续会自动重试,只要大部分Success=yes即可。

七、可选:Rviz可视化(直观看到无人机与轨迹)

若想"眼见为实",通过Rviz看到无人机、障碍物和彩色规划轨迹,需配置AutoDL远程桌面(纯终端环境无法显示GUI)。

7.1 启动远程桌面服务

在任意终端执行:

bash 复制代码
# 启动AutoDL远程桌面(首次执行会提示设置密码,记好密码)
autodl-desktop
  • 启动成功后,终端会输出"远程桌面已启动",并显示访问链接(如http://xxx.autodl.com:xxxx)。

7.2 连接远程桌面

  1. 复制终端输出的远程桌面链接,在本地浏览器中打开;
  2. 输入之前设置的密码,进入Linux桌面环境;
  3. 打开桌面的"Terminal"(类似Windows的命令提示符)。

7.3 启动Rviz

在桌面终端中执行:

bash 复制代码
# 加载环境变量
source ~/catkin_ws/devel/setup.bash
# 启动Rviz(加载EGO-Planner预设配置)
roslaunch ~/catkin_ws/src/planner/plan_manage/launch/rviz.launch
  • 可视化效果:Rviz中会显示无人机模型(绿色/蓝色)、随机障碍物(灰色)、彩色规划轨迹(红色/绿色),无人机将沿轨迹飞向目标点。

八、常见问题排查(避坑指南)

  1. 启动仿真报错"RLException: [xxx.launch] is neither a launch file"
    → 原因:功能包名错误或路径错误;解决方案:用绝对路径启动(如本文Step 3.2的命令)。
  2. 发送目标点后无反应,日志仍显示"WAIT_TARGET"
    → 原因:话题名或消息格式错误;解决方案:执行rosnode info /drone_0_ego_planner_node | grep "Subscriptions"确认目标点话题,再用rosmsg show 话题类型确认格式。
  3. Rviz启动报错"qt.qpa.xcb: could not connect to display"
    → 原因:未进入远程桌面,纯终端无GUI环境;解决方案:按Step 7配置远程桌面后再启动Rviz。

九、总结

本文从AutoDL登录到规划成功,覆盖了"环境准备→编译→启动→验证"全流程,核心是避开三个新手坑:

  1. 用"绝对路径"启动仿真文件,避免功能包名识别错误;
  2. rosmsg show确认的消息结构发送目标点,避免格式错误;
  3. 启动前清理旧ROS进程,避免通信冲突。

按照本文步骤操作,即使是ROS新手,也能在1小时内打通EGO-Planner的动态避障功能。后续可尝试修改目标点坐标、调整仿真参数(如障碍物数量),深入探索EGO-Planner的特性。

最后,附上关键命令速查表,方便后续快速复用:

操作目标 命令
编译工作空间 cd ~/catkin_ws && catkin_make -j1
加载环境变量 source ~/catkin_ws/devel/setup.bash
清理ROS进程 pkill -f "ros" && pkill -f "roscore"
启动仿真 roslaunch ~/catkin_ws/src/planner/plan_manage/launch/single_drone_interactive.launch
发送目标点(x=5,y=2,z=1.5) rostopic pub -1 /goal_with_id quadrotor_msgs/GoalSet "drone_id: 0; goal: [5.0, 2.0, 1.5]"
启动远程桌面 autodl-desktop
启动Rviz roslaunch ~/catkin_ws/src/planner/plan_manage/launch/rviz.launch

要不要我帮你整理一份 "EGO-Planner 常见问题排查手册"?把本文中提到的报错和解决方案汇总成文档,方便你后续遇到问题时快速定位原因。

相关推荐
风象南3 小时前
Claude Code这个隐藏技能,让我告别PPT焦虑
人工智能·后端
曲幽4 小时前
FastAPI压力测试实战:Locust模拟真实用户并发及优化建议
python·fastapi·web·locust·asyncio·test·uvicorn·workers
Mintopia4 小时前
OpenClaw 对软件行业产生的影响
人工智能
陈广亮5 小时前
构建具有长期记忆的 AI Agent:从设计模式到生产实践
人工智能
会写代码的柯基犬5 小时前
DeepSeek vs Kimi vs Qwen —— AI 生成俄罗斯方块代码效果横评
人工智能·llm
Mintopia5 小时前
OpenClaw 是什么?为什么节后热度如此之高?
人工智能
爱可生开源社区5 小时前
DBA 的未来?八位行业先锋的年度圆桌讨论
人工智能·dba
叁两8 小时前
用opencode打造全自动公众号写作流水线,AI 代笔太香了!
前端·人工智能·agent
敏编程8 小时前
一天一个Python库:jsonschema - JSON 数据验证利器
python