XTDrone-多无人机编队-配置教程

发布于:2024-06-19 ⋅ 阅读:(229) ⋅ 点赞:(0)

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的速度不宜过快。

参考:多无人机编队 · 语雀


网站公告

今日签到

点亮在社区的每一天
去签到