配置使用ROS版本为Neotic
1 配置
1.1 加载固定翼无人机编队跟踪控制工程文件
cp -r ~/XTDrone/coordination/fixed_wing_formation_control ~/catkin_ws/src
1.2 加载一些用到的功能包
sudo apt-get install ros-noetic-serial #根据自己的ROS版本修改
sudo apt-get install libpcap-dev
sudo apt-get install ros-noetic-velocity-controllers
sudo apt-get install ros-noetic-gazebo-msgs
1.3 安装一些必要的依赖
cp -r ~/XTDrone/sitl_config/gazebo_ros_pkgs ~/catkin_ws/src #若已在基础配置中完成则忽略此步骤
cp -r ~/XTDrone/sitl_config/ugv/* ~/catkin_ws/src
cp -r ~/XTDrone/sitl_config/gazebo_plugin/velodyne ~/catkin_ws/src
1.4 将launch文件装入PX4的launch文件夹中
cd ~/catkin_ws/src/fixed_wing_formation_control/launchfile
cp fixed_wing_formation_control.launch ~/PX4_Firmware/launch
1.5 在/catkin_ws/devel/include下创建一个功能包fixed_wing_formation_control,并将/catkin_ws/src/fixed_wing_formation_control/headerfile中的头文件拷贝到创建的fixed_wing_formation_control中。
mkdir -p ~/catkin_ws/devel/include/fixed_wing_formation_control
cd ~/catkin_ws/src/fixed_wing_formation_control/headerfile
cp Formation_control_states.h FWcmd.h Fw_cmd_mode.h Fw_current_mode.h Fwmonitor.h FWstates.h Leaderstates.h ~/catkin_ws/devel/include/fixed_wing_formation_control
备注:一定要先执行这个一步之后再编译,否则会出现如下报错:
1.6 编译
cd ~/catkin_ws
catkin build
编译的过程中可能会出现如下报错:
错因分析:task_main.cpp文件中的参数“airspeed“与Leaderstates. msg文件中的参数名不同。
解决方法:
a.打开Leaderstates. msg文件,检查参数名是否为:air_speed,如下图所示。
b.打开task_main.cpp文件,将173行的代码中的airspeed修改为air_speed,然后保存,如下面两张图所示。
c.修改完成后再次编译
cd ~/catkin_ws
catkin build
出现下图所示的情况,则说明编译成功。
2 启动仿真
2.1 借助bash文件一键启动
cd ~/catkin_ws/src/fixed_wing_formation_control/scripts/
bash multi_uav_sim_ba_3vtol.sh
这个过程中可能出现如下报错:
2.1.1 报错1:
错因分析:
这个问题是由于ROS在Noetic版本中xacro包的路径有所变化导致的。launch文件中尝试使用xacro来生成URDF时,指定的路径不正确。Noetic版本中,xacro命令行工具的路径应该是/opt/ros/noetic/lib/xacro/xacro
。
也就是说ROS neotic中/opt/ros/noetic/share/xacro下没有xacro.py
而是在opt/ros/noetic/lib/xacro/xacro中,如下两张图所示。
解决方法:
打开fixed_wing_formation_control.launch,将其中的xacro.py中的.py去掉后并保存,具体修改位置如下两图所示。文件路径:/home/ray/PX4_Firmware/launch
2.1.2 报错2
错因分析:#!/usr/bin/env python用的是pyhton2,而neotic用的是python3。
解决办法:将/home/ray/catkin_ws/src/catvehicle/src下的所有py文件中的#!/usr/bin/env python修改为#!/usr/bin/env python3并保存即可。如下列几张图所示。
2.1.3 报错3:
错因分析及解决方法:说明gazebo进程已经被占用,需要输入如下两条命令关闭之前的gazebo进程。
killall gzserver
killall gzclient
2.1.4 再次启动仿真:
cd ~/catkin_ws/src/fixed_wing_formation_control/scripts/
bash multi_uav_sim_ba_3vtol.sh
正常启动后的效果如下图所示:
2.2 启动QGC地面站
进入你的QGC地面站的安装位置,然后在该文件在中打开终端,输入以下命令即可打开地面站。
./QGroundControl.AppImage
如果进去的界面如下:
这可有能是你的rcS文件中的参数未正确设置,详见PX4飞控EKF配置 · 语雀 ,检查你的rcS文件的参数是否设置如下:
# 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
修改并保存后,再次重启gazebo仿真和QGC地面站。
正常打开后的界面如下:
2.3 借助QGC首先在旋翼模式下实现升空
备注:以下的每一步操作,每个无人机都需要进行。
2.3.1 解锁
按照下列顺序的图片中红框位置依次点击或滑动来解锁无人机。
2.3.2 利用takeoff分别起飞各个无人机
按照下列顺序的图片中红框位置依次点击或滑动来起飞无人机。
2.3.3 达到预定起飞高度后,切换为固定翼模式
按照下列顺序的图片中红框位置依次点击来切换无人机模式。
切换完成后,无人机开始盘旋,效果如下图所示。
2.4 切换为offboard模式
在后三个窗口根据提示按数(数字间有空格)切换offboard模式并选择固定翼无人机编队队形,如果切换不成功可以尝试多切换几次。
输入示例:1 2 然后再按回车即可
但是,当0号机切换为offboard模式之后出现了如下报错,而后就自动降落了。
报错可能原因如下:
在QGroundControl (QGC) 地面站中,出现 "Failsafe enabled: No manual control stick input" 的提示意味着无人机进入了失效保护(Failsafe)模式,原因是未检测到手动控制杆的输入信号。这通常表示遥控器与无人机之间的通信中断,或者遥控器未发送控制信号。
至此,配置结束,剩下的教程可参考官方教程。
备注:目前“Failsafe enabled: No manual control stick input“这个问题还没有解决,后续解决后会及时更新,如果有会的大佬可以私信交流。
参考:固定翼无人机编队跟踪无人车 · 语雀