配置与控制不同的无人机
多旋翼飞行器
现在的outdoor3.launch是车辆的仿真,搜索rover(车辆),发现有四个地方出现了rover,对应修改,这里修改成solo
由于地面高度较高,需要把launch文件中初始z位置设为1
sdf的value也得完全修改 <arg name="sdf" value="solo_stereo_camera"/>
cd ~/PX4_Firmware/launch/
gedit outdoor3.launch
<?xml version="1.0"?>
<launch>
<!-- MAVROS posix SITL environment launch script -->
<!-- launches Gazebo environment and 2x: MAVROS, PX4 SITL, and spawns vehicle -->
<!-- vehicle model and world -->
<arg name="est" default="ekf2"/>
<arg name="world" default="$(find mavlink_sitl_gazebo)/worlds/outdoor3.world"/>
<!-- gazebo configs -->
<arg name="gui" default="true"/>
<arg name="debug" default="false"/>
<arg name="verbose" default="false"/>
<arg name="paused" default="false"/>
<!-- Gazebo sim -->
<include file="$(find gazebo_ros)/launch/empty_world.launch">
<arg name="gui" value="$(arg gui)"/>
<arg name="world_name" value="$(arg world)"/>
<arg name="debug" value="$(arg debug)"/>
<arg name="verbose" value="$(arg verbose)"/>
<arg name="paused" value="$(arg paused)"/>
</include>
<!-- solo_0 -->
<group ns="solo_0">
<!-- MAVROS and vehicle configs -->
<arg name="ID" value="0"/>
<arg name="ID_in_group" value="0"/>
<arg name="fcu_url" default="udp://:24540@localhost:34580"/>
<!-- PX4 SITL and vehicle spawn -->
<include file="$(find px4)/launch/single_vehicle_spawn_xtd.launch">
<arg name="x" value="0"/>
<arg name="y" value="0"/>
<arg name="z" value="1"/>
<arg name="R" value="0"/>
<arg name="P" value="0"/>
<arg name="Y" value="0"/>
<arg name="vehicle" value="solo"/>
<arg name="sdf" value="solo_stereo_camera"/>
<arg name="mavlink_udp_port" value="18570"/>
<arg name="mavlink_tcp_port" value="4560"/>
<arg name="ID" value="$(arg ID)"/>
<arg name="ID_in_group" value="$(arg ID_in_group)"/>
</include>
<!-- MAVROS -->
<include file="$(find mavros)/launch/px4.launch">
<arg name="fcu_url" value="$(arg fcu_url)"/>
<arg name="gcs_url" value=""/>
<arg name="tgt_system" value="$(eval 1 + arg('ID'))"/>
<arg name="tgt_component" value="1"/>
</include>
</group>
</launch>
<!--the launch file is generated by XTDrone multi-vehicle generator.py -->
启动仿真程序
cd ~/PX4_Firmware
roslaunch px4 outdoor3.launch
然后启动通信脚本,solo代表子机型,0代表飞机的编号
cd ~/XTDrone/communication
python multirotor_communication.py solo 0
再启动键盘控制脚本,solo代表子机型,1代表飞机的个数,vel代表速度控制。虽然多旋翼飞行器提供了速度控制和加速度控制两种键盘控制方式,但手动控制速度比较方便,加速度控制在后面的高级运动规划任务中比较有用。
cd ~/XTDrone/control/keyboard
python multirotor_keyboard_control.py solo 1 vel
对于多旋翼飞行器,Offboard控制起飞很容易,给一个大于0.3m/s的期望z向速度即可,因此可以不使用Takeoff模式(按键中的v),Takeoff模式的相关参数(起飞高度,起飞速度)需要在rcS设置,比较麻烦。
不知道为什么下图红框部分描述的不对,应该是控制无人机上升下降的速度的
应该是 increase/drcrease upward velocity
通过修改一下路径的代码可以改正 /XTDrone/control/keyboardmultirotor_keyboard_control.py
修改后如下图所示
不断按i把期望z向速度加到0.3m/s以上,然后按b切到offboard模式,再按t解锁即可起飞,飞到合适的高度后,按s即可实现悬停。
固定翼飞行器
固定翼飞行器的配置与仿真启动方法与多旋翼飞行器类似,不过由于固定翼需要较大的空间,我们换用outdoor2.launch(需要修改里面的机型)。
注意:1.plane下面没有子类,也没有速度控制和加速度控制之分。2.固定翼无人机请使用GPS定位,详情见PX4飞控EKF配置章节。
cd ~/PX4_Firmware/launch/
gedit outdoor2.launch
现在的outdoor2.launch是车辆的仿真,搜索rover,发现有四个地方出现了rover,只需对应改成需要的机型(plane)即可。特别注意sdf文件,由于同一种机型可能配备不同的传感器,所以sdf文件的命名会随之不同,您需要在~/PX4_Firmware/Tools/sitl_gazebo/models/文件夹下寻找所需的sdf文件(plane)。
<?xml version="1.0"?>
<launch>
<!-- MAVROS posix SITL environment launch script -->
<!-- launches Gazebo environment and 2x: MAVROS, PX4 SITL, and spawns vehicle -->
<!-- vehicle model and world -->
<arg name="est" default="ekf2"/>
<arg name="world" default="$(find mavlink_sitl_gazebo)/worlds/outdoor2.world"/>
<!-- gazebo configs -->
<arg name="gui" default="true"/>
<arg name="debug" default="false"/>
<arg name="verbose" default="false"/>
<arg name="paused" default="false"/>
<!-- Gazebo sim -->
<include file="$(find gazebo_ros)/launch/empty_world.launch">
<arg name="gui" value="$(arg gui)"/>
<arg name="world_name" value="$(arg world)"/>
<arg name="debug" value="$(arg debug)"/>
<arg name="verbose" value="$(arg verbose)"/>
<arg name="paused" value="$(arg paused)"/>
</include>
<!-- plane_0 -->
<group ns="plane_0">
<!-- MAVROS and vehicle configs -->
<arg name="ID" value="0"/>
<arg name="ID_in_group" value="0"/>
<arg name="fcu_url" default="udp://:24540@localhost:34580"/>
<!-- PX4 SITL and vehicle spawn -->
<include file="$(find px4)/launch/single_vehicle_spawn_xtd.launch">
<arg name="x" value="0"/>
<arg name="y" value="0"/>
<arg name="z" value="0"/>
<arg name="R" value="0"/>
<arg name="P" value="0"/>
<arg name="Y" value="0"/>
<arg name="vehicle" value="plane"/>
<arg name="sdf" value="plane"/>
<arg name="mavlink_udp_port" value="18570"/>
<arg name="mavlink_tcp_port" value="4560"/>
<arg name="ID" value="$(arg ID)"/>
<arg name="ID_in_group" value="$(arg ID_in_group)"/>
</include>
<!-- MAVROS -->
<include file="$(find mavros)/launch/px4.launch">
<arg name="fcu_url" value="$(arg fcu_url)"/>
<arg name="gcs_url" value=""/>
<arg name="tgt_system" value="$(eval 1 + arg('ID'))"/>
<arg name="tgt_component" value="1"/>
</include>
</group>
</launch>
<!--the launch file is generated by XTDrone multi-vehicle generator.py -->
启动仿真程序:
roslaunch px4 outdoor2.launch
启动通信脚本:0表示0号固定翼
cd ~/XTDrone/communication/
python plane_communication.py 0
启动键盘控制脚本:1表示一架固定翼
cd ~/XTDrone/control/keyboard
python plane_keyboard_control.py 1
固定翼需要用takeoff模式起飞。如果不希望有影子,可以吧Gazebo scene里的shadows关掉.
固定翼的offboard模式,通过设置航点位置,飞机会先飞到航点(setpoint)附近,然后盘旋。
注意:1.切Offboard之前先s,这样才会飞到航点盘旋,如果是按k,飞机会无动力滑翔。2.设置航点(setpoint)高度尽量超过20m,否则有可能撞地面。
推荐起飞流程:v起飞->t解锁->先设置航点位置然后o载入航点->s盘旋->b切换offboard模式
设置航点(0,0,21),盘旋效果演示:
(这里航机点是通过w/x,a/d,i/,控制输入的,一开始我还以为是直接输入数组,真是犯了愚蠢的错误)
设置航点(0,0,21),盘旋效果演示:
固定翼飞机盘旋效果
后面这一部分还没试过,另外下面提到的网址报错404打不开,哭T…T
也可以通过地面站设置航点,使用mission模式飞行一段时间后,再切到offboard模式。固定翼的航线规划有很多讲究,这里不再过多讨论,有兴趣的朋友可以自行查阅相关文献
着陆可通过land,mission和return三种模式进行,详见https://docs.px4.io/main/en/flying/fixed_wing_landing.html(这个网站404),不过PX4的官网可以打开https://docs.px4.io/main/en/,不知道里面的Flying-Manual Flying板块是不是就是404网站想要表达的
可垂直起降固定翼飞行器
VTOL的配置和其他机型一样,但是操作是所有机型里最麻烦的,因为它有两个模态,多旋翼模态和固定翼模态。这里我们以tailsitter(尾座式飞行器)为例,进行介绍。
outdoor2.launch对应修改成vtol
cd ~/PX4_Firmware/launch/
gedit outdoor2.launch
<?xml version="1.0"?>
<launch>
<!-- MAVROS posix SITL environment launch script -->
<!-- launches Gazebo environment and 2x: MAVROS, PX4 SITL, and spawns vehicle -->
<!-- vehicle model and world -->
<arg name="est" default="ekf2"/>
<arg name="world" default="$(find mavlink_sitl_gazebo)/worlds/outdoor2.world"/>
<!-- gazebo configs -->
<arg name="gui" default="true"/>
<arg name="debug" default="false"/>
<arg name="verbose" default="false"/>
<arg name="paused" default="false"/>
<!-- Gazebo sim -->
<include file="$(find gazebo_ros)/launch/empty_world.launch">
<arg name="gui" value="$(arg gui)"/>
<arg name="world_name" value="$(arg world)"/>
<arg name="debug" value="$(arg debug)"/>
<arg name="verbose" value="$(arg verbose)"/>
<arg name="paused" value="$(arg paused)"/>
</include>
<!-- tailsitter_0 -->
<group ns="tailsitter_0">
<!-- MAVROS and vehicle configs -->
<arg name="ID" value="0"/>
<arg name="ID_in_group" value="0"/>
<arg name="fcu_url" default="udp://:24540@localhost:34580"/>
<!-- PX4 SITL and vehicle spawn -->
<include file="$(find px4)/launch/single_vehicle_spawn_xtd.launch">
<arg name="x" value="0"/>
<arg name="y" value="0"/>
<arg name="z" value="0"/>
<arg name="R" value="0"/>
<arg name="P" value="0"/>
<arg name="Y" value="0"/>
<arg name="vehicle" value="tailsitter"/>
<arg name="sdf" value="tailsitter"/>
<arg name="mavlink_udp_port" value="18570"/>
<arg name="mavlink_tcp_port" value="4560"/>
<arg name="ID" value="$(arg ID)"/>
<arg name="ID_in_group" value="$(arg ID_in_group)"/>
</include>
<!-- MAVROS -->
<include file="$(find mavros)/launch/px4.launch">
<arg name="fcu_url" value="$(arg fcu_url)"/>
<arg name="gcs_url" value=""/>
<arg name="tgt_system" value="$(eval 1 + arg('ID'))"/>
<arg name="tgt_component" value="1"/>
</include>
</group>
</launch>
<!--the launch file is generated by XTDrone multi-vehicle generator.py -->
roslaunch px4 outdoor2.launch
cd ~/XTDrone/communication
python vtol_communication.py tailsitter 0
运行通信脚本后,会显示multirotor,这说明初始化是在多旋翼模态,我们也将以这种模态起飞。
然后启动控制脚本,这里的vel是说明多旋翼模态下我们使用速度控制。固定翼模态的控制方法与固定翼是一样的。
cd ~/XTDrone/control/keyboard
python vtol_keyboard_control.py tailsitter 1 vel
由于目前处于多旋翼模态,我们可以像控制多旋翼飞行器一样控制它。
在切换到固定翼模式前,需要发送合适的setpoint,切换模式后立刻发送loiter,然后飞机就会以固定翼模式飞到setpoint进行盘旋。
可垂直起降固定翼飞行器
无人车
无人车的配置与控制方法同上,需要注意只能控制前进速度(不能倒车)和转角。
cd ~/PX4_Firmware/launch/
gedit outdoor3.launch
roslaunch px4 outdoor3.launch
cd ~/XTDrone/communication
python rover_communication.py 0
cd ~/XTDrone/control/keyboard
python rover_keyboard_control.py 1
无人车