ArduPilot飞控之Gazebo + SITL + MP的Jetson Orin环境搭建
1. 源由
很简单,希望伴机电脑上天之前先进行相关验证工作,而验证顾名思义就是一个测试环境。然而测试就有大量的,显而易见的炸机,希望能在模拟环境中尽量多的炸机,只有这样,现场测试才能更加稳定可靠。
之前其实已经有了一个基于Ubuntu22.04 LTS的笔记本Laptop环境,尽管电脑是10年前的老电脑,但是还是基本可以用的。
为什么要切换到Jetson Orin的主要原因是:
- 后期需要大量GPU来做视频/图像分析
- 希望能模拟3D飞行环境(若有FPV视频影像更佳)
- 为搭建相对完整仿真环境奠定基础
(MP + Simulator(Jetson Orin) + AI(Jetson Orin) + CC(Companion Computer) + FlightControl(SITL) + RC + FPV)
2. Linux环境整理
Jetson Orin系统安装这里就不再展开,需要了解的朋友,可以详细参考:《Linux 36.2@Jetson Orin Nano之基础环境构建》
这里的更新系统,更多的是需要对系统进行一些软件包上的整理。
$ sudo apt-get update
$ sudo apt-get upgrade
比如:有的时候会出现一些依赖问题,或者多余的安装包,请使用以下指令进行清理。
$ sudo apt-get clean
$ sudo apt-get autoclean
3. 安装Gazebo环境
3.1 安装Gazebo
Gazebo Garden安装
$ sudo wget https://packages.osrfoundation.org/gazebo.gpg -O /usr/share/keyrings/pkgs-osrf-archive-keyring.gpg
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/pkgs-osrf-archive-keyring.gpg] http://packages.osrfoundation.org/gazebo/ubuntu-stable $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/gazebo-stable.list > /dev/null
$ sudo apt-get install gz-garden
3.2 安装插件
- 下载插件
$ sudo apt install libgz-sim7-dev rapidjson-dev
$ git clone git@github.com:ArduPilot/ardupilot_gazebo.git
$ git log -n 1
commit 2589e7b4548b08709c3a66e81e98c459202c2c27 (HEAD -> main, origin/main, origin/HEAD)
Author: Rhys Mainwaring <rhys.mainwaring@me.com>
Date: Mon Feb 5 13:06:18 2024 +0000
Runway: fix render order issue causing vehicle model to be hidden
Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>
- 安装插件
$ cd ardupilot_gazebo
$ mkdir build && cd build
$ cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo
$ make -j4
3.3 配置插件
$ export GZ_SIM_SYSTEM_PLUGIN_PATH=<ardupilot_gazebo path>/build:$GZ_SIM_SYSTEM_PLUGIN_PATH
$ export GZ_SIM_RESOURCE_PATH=<ardupilot_gazebo path>/models:$HOME/ardupilot_gazebo/worlds:$GZ_SIM_RESOURCE_PATH
or
$ echo 'export GZ_SIM_SYSTEM_PLUGIN_PATH=$HOME/ardupilot_gazebo/build:${GZ_SIM_SYSTEM_PLUGIN_PATH}' >> ~/.bashrc
$ echo 'export GZ_SIM_RESOURCE_PATH=$HOME/ardupilot_gazebo/models:$HOME/ardupilot_gazebo/worlds:${GZ_SIM_RESOURCE_PATH}' >> ~/.bashrc
3.4 测试Gazebo
$ gz sim --version
Gazebo Sim, version 7.0.0
Copyright (C) 2018 Open Source Robotics Foundation.
Released under the Apache 2.0 License.
$ gz sim -v4 -r shapes.sdf
$ gz sim -v4 -r iris_runway.sdf --render-engine ogre
4. 安装Arudpilot-SITL环境
4.1 克隆工程
$ git clone git@github.com:SnapDragonfly/ardupilot.git
$ git checkout Copter-4.5-lida2003
$ git log -n 1
commit b4407356a9193069c7f48b9dfed8785504968fca (HEAD -> Copter-4.5-lida2003, origin/Copter-4.5-lida2003)
Merge: 220478c733 913ec4b29c
Author: Daniel Li <lida_mail@163.com>
Date: Thu Apr 11 07:44:19 2024 +0800
Merge branch 'Copter-4.5' into Copter-4.5-lida2003
4.2 编译准备
$ cd ardupilot
$ git submodule update --init --recursive
$ Tools/environment_install/install-prereqs-ubuntu.sh -y
4.3 环境配置
$ pwd
/home/daniel/ardupilot
$ export PATH=$PATH:<ardupilot path>/Tools/autotest
$ export PATH=/usr/lib/ccache:$PATH
$ . ~/.profile
4.4 配置编译
$ ./waf configure --board sitl # software-in-the-loop simulator
or
$ ./waf configure --board sitl --debug # software-in-the-loop simulator with debug symbols
$ ./waf
4.5 测试运行
第一次测试运行,清理虚拟EEPROM参数
$ sim_vehicle.py -w -v ArduCopter
加载默认参数后,正常启动SITL模拟器
$ sim_vehicle.py --console --map -v ArduCopter
or
$ sim_vehicle.py --console --map -v ArduCopter --custom-location=30.218788,120.092316,281,90
5. 测试运行
5.1 十里琅珰 SITL+MP+MAVProxy模拟
-
十里琅珰远航飞行:BF飞行路线:BetaFlight Mark4 + 十里琅珰 + ELRS3.0 + 500mW_Dyn
-
Jetson Orin运行起飞点模拟命令
$ sim_vehicle.py --console --map -v ArduCopter --custom-location=30.3051391,120.1556749,8.71000003814697,90
-
MissionPlanner 连接 TCP端口5763 //TCP5760被MAVProxy占用了
-
录制的视频,将Jetson Orin上的Map地图和WIndows桌面的MissionPlanner组合叠加显示
Jetson Orin(MAVProxyMap + Ardupilot 4.5.1SITL) + MissionPlanner
5.2 iris_runway Gazebo+SITL+MP+MAVProxy模拟
- Gazebo环境
$ gz sim -v4 -r iris_runway.sdf
- SITL+MAVProxy环境
$ sim_vehicle.py --console --map -v ArduCopter
- Windows下的MP 连接 TCP端口5763 //TCP5760被MAVProxy占用了
- 录制的视频,将MissionPlanner组合叠加在Gazebo+MAVProxyMap上
Jetson Orin(Gazebo + Ardupilot 4.5.1SITL) + MissionPlanner
5.3 后续事项
整体来看效果不错,理论上断开SITL的TCP5760模拟端口,使用伴机电脑向SITL发出指令就能控制飞行器进行飞行。唯一需要考虑的是透过UART获取飞行信息并发出指令。
后续考虑的工作:
- 能否将3D FPV视频也加进来 //RealFlight应该可以,哈哈。我可是有这个steam上的软件的:)
- 构建新的模型地图&仿真环境 //ardupilot_gazebo有兴趣的可以看下
- 透过TCP5760端口进行编程 //这个已经在后续的飞控规划中给出,至于硬件厂商能否做出来,其实并不重要,因为每个飞控都有串口,仅仅只是稳定性和速率的问题
关于Ardupilot模拟相关详细内容,请参阅:
6. 参考资料
【1】ArduPilot开源飞控系统之简单介绍
【2】PX4模块设计之一:SITL & HITL模拟框架
【3】PX4模块设计之七:Ubuntu 20.04搭建Gazebo模拟器
【4】PX4模块设计之八:Ubuntu 20.04搭建FlightGear模拟器
【5】PX4开发环境搭建–模拟器编译及QGroundControl & RC遥控模拟配置
【6】ArduPilot开源飞控之MAVProxy简介