XTDrone提供了6架、9架和18架无人机编队构型,您可以根据您的电脑性能选择无人机数量,本示例以9架无人机为例。(备注:本人使用的是Ubuntu20.04,ROS版本为Noetic,Python版本3…)
1.首先,需要生成3×3阵列的iris的launch文件
cd ~/XTDrone/coordination/launch_generator
python3 generator.py
2.将生成出来的launch文件复制到PX4固件的launch文件夹
cp ~/XTDrone/coordination/launch_generator/multi_vehicle.launch ~/PX4_Firmware/launch/
说明:由于默认生成的launch文件使用的是带有双目相机的iris,大量双目相机的数据生成很耗时,而本编队并不需要双目相机,因此最好将生成的launch文件中的iris_stereo_camera都替换为iris后,再放入到~/PX4_Firmware/launch中,然后启动仿真。
3 修改EKF的输入
给9个iris提供位姿信息,注意这里使用的是Gazebo位姿真值,因为只有这样,它们的局部位置(local_position)才是在统一的坐标系下。注意这里不能使用GPS定位(仿真里的GPS的局部坐标系以无人机起飞点为原点,使得不同的无人机的坐标系不统一),需要修改EKF的输入,具体修改如下。
3.1 输入如下命令打开rcS文件
gedit ~/PX4_Firmware/build/px4_sitl_default/etc/init.d-posix/rcS #PX4 1.13版本
# PX4 1.11版本
# gedit ~/PX4_Firmware/ROMFS/px4fmu_common/init.d-posix/rcS
3.2 具体修改内容
# 以下是所需修改部分,修改完后的结果
# GPS used
#param set EKF2_AID_MASK 1
# Vision used and GPS denied
param set EKF2_AID_MASK 24
# Barometer used for hight measurement
#param set EKF2_HGT_MODE 0
# Barometer denied and vision used for hight measurement
param set EKF2_HGT_MODE 3
3.3 删除原参数配置文件
重启仿真前,需要删除上一次记录在虚拟eeprom中的参数文件,否则仿真程序会读取该参数文件,导致本次rcS的修改不能生效。
4 启动多机PX4仿真
cd ~/PX4_Firmware/
roslaunch px4 multi_vehicle.launch
5 建立通信,通信脚本设置
5.1 通信脚本设置
gedit ~/XTDrone/communication/multi_vehicle_communication.sh
#!/bin/bash
iris_num=0
typhoon_h480_num=0
solo_num=3
plane_num=3
rover_num=3
standard_vtol_num=0
tiltrotor_num=0
tailsitter_num=0
# 上面是需要按照所启动的无人机的数量进行相应的修改
vehicle_num=0
while(( $vehicle_num< iris_num))
do
python3 multirotor_communication.py iris $vehicle_num&
let "vehicle_num++"
done
vehicle_num=0
while(( $vehicle_num< typhoon_h480_num))
do
python3 multirotor_communication.py typhoon_h480 $vehicle_num&
let "vehicle_num++"
done
vehicle_num=0
while(( $vehicle_num< solo_num))
do
python3 multirotor_communication.py solo $vehicle_num&
let "vehicle_num++"
done
vehicle_num=0
while(( $vehicle_num< plane_num))
do
python3 plane_communication.py $vehicle_num&
let "vehicle_num++"
done
vehicle_num=0
while(( $vehicle_num< rover_num))
do
python3 rover_communication.py $vehicle_num&
let "vehicle_num++"
done
vehicle_num=0
while(( $vehicle_num< standard_vtol_num))
do
python3 vtol_communication.py standard_vtol $vehicle_num&
let "vehicle_num++"
done
vehicle_num=0
while(( $vehicle_num< tiltrotor_num))
do
python3 vtol_communication.py tiltrotor $vehicle_num&
let "vehicle_num++"
done
vehicle_num=0
while(( $vehicle_num< tailsitter_num))
do
python3 vtol_communication.py tailsitter $vehicle_num&
let "vehicle_num++"
done
注意:需要以python3来运行.py文件!!!
5.2 建立通信
cd ~/XTDrone/communication
bash multi_vehicle_communication.sh
出现上述效果则说明通信建立成功
6 给9个iris提供位姿信息。
cd ~/XTDrone/sensing/pose_ground_truth
python3 get_local_pose.py iris 9
7 使用键盘控制所有无人机起飞(注意要飞的高一些,防止编队过程中有的无人机触地)
cd ~/XTDrone/control/keyboard
python3 multirotor_keyboard_control.py iris 9 vel
8 无人机悬停后(飞到一定高度后按s键),键盘按g键,进入leader-follower模式,然后启动多机协同脚本。
启动run_formation.sh前,先将其内部的pyhton命令改为python3
#!/bin/bash
python3 leader.py $1 $2 &
python3 avoid.py $1 $2 vel &
uav_id=1
while(( $uav_id< $2 ))
do
python3 follower.py $1 $uav_id $2 &
let "uav_id++"
done
cd ~/XTDrone/coordination/formation_demo
bash run_formation.sh iris 9
然后用利用multirotor_keyboard_control.py,按数字1或2或3键即可切换队形了,如下面的视频展示所示(由于无人机起始位置设置不同,您所看到的环境背景可能与视频不一样)。此外,还可以通过控制leader的速度,使得整个队形同步运动或在行进中变换队形,注意由于编队控制有最大速度/加速度限制,leader的速度不宜过快。
参考:多无人机编队 · 语雀