本教程介绍如何在Gazebo模拟环境中利用ArduPilot软件进行多架无人机的飞行仿真,适用于研究与开发人员。
### Ardupilot多架无人机于gazebo内仿真的详细知识点
#### 一、Ardupilot_gazebo插件的安装与配置
##### 1. 安装额外依赖项
要在Gazebo Garden环境中使用Ardupilot_gazebo插件,首先需要确保已经安装了必要的依赖项。可以通过以下命令完成:
```bash
sudo apt update
sudo apt install libgz-sim7-dev rapidjson-dev
```
这里,`libgz-sim7-dev`是Gazebo Garden的开发库,而`rapidjson-dev`则用于JSON解析。
##### 2. 创建工作区并克隆插件库
接下来创建一个新的工作区,并在这个工作区内克隆Ardupilot_gazebo插件库。可以按照以下步骤操作:
```bash
mkdir -p gz_wssrc && cd gz_wssrc
git clone https://github.com/ArduPilot/ardupilot_gazebo.git
```
这样就将插件库克隆到了`gz_wssrc`目录下。
##### 3. 构建插件
为了构建插件,需要先设置`GZ_VERSION`环境变量来指定使用的Gazebo版本。假设这里使用的是Gazebo Garden,可以设置环境变量为`garden`:
```bash
export GZ_VERSION=garden
cd ardupilot_gazebo
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo
make -j4
```
这里,`-DCMAKE_BUILD_TYPE=RelWithDebInfo`指定了编译类型为带有调试信息的发布版本,而`-j4`则指定了同时运行的最大任务数为4。
#### 二、配置Gazebo环境变量
为了使Gazebo能够正确地识别和加载插件以及模型文件,需要设置一些环境变量。这些变量可以在终端中设置,也可以在`.bashrc`或 `.zshrc` 文件中设置,以便每次打开新的终端窗口时自动加载这些变量。
```bash
export GZ_SIM_SYSTEM_PLUGIN_PATH=$HOME/gz_wssrc/ardupilot_gazebo/build:$GZ_SIM_SYSTEM_PLUGIN_PATH
export GZ_SIM_RESOURCE_PATH=$HOME/gz_wssrc/ardupilot_gazebomodels:$HOME/gz_wssrc/ardupilot_gazeworlds:$GZ_SIM_RESOURCE_PATH
```
这里,`GZ_SIM_SYSTEM_PLUGIN_PATH`指向了插件的构建目录,而 `GZ_SIM_RESOURCE_PATH` 则包含了模型和世界的路径。
#### 三、测试运行Gazebo与Ardupilot结合使用
完成以上步骤后,就可以开始测试Gazebo与Ardupilot的结合使用了。
##### 1. 运行Gazebo
首先启动Gazebo模拟器,并指定一个世界文件(如 `iris_runway.sdf`):
```bash
gz sim -v4 -r iris_runway.sdf
```
这里, `-v4` 表示设置日志级别为 4,而 `-r` 则表示从文件加载世界。
##### 2. 运行SITL(Software in the Loop)
接着,运行 SITL (软件在环路中)来模拟飞行控制器的行为。使用以下命令:
```bash
sim_vehicle.py -v ArduCopter -f gazebo-iris --model JSON --map --console
```
这里, `-v ArduCopter` 选择了飞行器类型为ArduCopter, `-f gazebo-iris` 指定了Gazebo中的模型, `--model JSON`、 `--map` 和 `--console` 则分别启用了JSON模型输出、地图显示和控制台输出。
##### 3. 解锁并起飞
通过命令行解锁飞行器并使其起飞:
```bash
STABILIZE> mode guided
GUIDED> arm throttle
GUIDED> takeoff 5
```
这里, `mode guided` 切换到引导模式, `arm throttle` 解锁电机,而 `takeoff 5` 让飞行器飞到高度 5 米。
#### 四、多架无人机文件配置
对于多架无人机的仿真,需要对模型文件进行相应的配置。
##### 1. 模型文件的修改
需要复制原始模型文件夹(例如 `iris_with_ardupilot`),并为其分配不同的名称(例如 `iris_with_ardupilot_9002`)。 对于每个新模型文件夹,都需要进行以下修改:
- 修改 `model.sdf` 文件中的 `model name` 为新的名称。
- 修改 `model.sdf` 文件中的 `` 标签,将其指向新的模型