RXDlwE 发表于 2020-7-4 19:13:24

Pixhawk无人机扩展教程(7)---SITL+MP/QGC运行

这节教程介绍SITL仿真如何结合Missionplanner和QGC地面站运行。并且在上次代码的基础上增加部分内容,让无人机按照我们的要求来飞行。
Missionplanner是Ardupilot固件(APM固件)使用的地面站;QGC是PX4固件使用的地面站,目前已经支持Ardupilot固件的运行。我们使用的是Ardupilot(APM)固件,因此两个地面站都可以结合SITL仿真观察飞行情况。
本节教程中,QGC地面站是安装在与SITL仿真软件一起的笔记本电脑上的,而MP地面站是安装在另外一台笔记本电脑上的。因此要注意连接IP地址的区别。

首先,将树莓派无人机接上电池,确保笔记本,MP地面站电脑和树莓派都在同一个局域网内,然后使用ssh命令连接树莓派。

一、SITL仿真+MP运行

笔记本端:


[*]
启动SITL仿真

cd ~/ardupilot/ArduCopter

sim_vehicle.py --console --map
[*]
使用output add命令,增加树莓派的IP:

output add 192.168.1.7:14550
[*]
再使用output add命令,增加MP地面站的IP:

output add 192.168.1.5:14551

树莓派端:

[*]
运行示例代码:

cd test

python example2.py
[*]
运行如下:

http://static.video.qq.com/TPout.swf?vid=wxv_1249776256376274945&1314.swf


二、SITL仿真+QGC运行
运行前,请先安装好QGC地面站。QGC可以在Windows,Linux,Mac等系统上安装运行。仿真启动后,QGC默认情况下会自动连接,比较简单。演示如下:

http://static.video.qq.com/TPout.swf?vid=wxv_1249823578057506818&1314.swf

三、在example2代码的基础上,增加部分功能
前面教程中编写的example2代码,飞行路径是指定的GPS航点。如果我们在不知道到GPS经纬度情况下,或则在室内GPS无法定位的情况下,想让无人机按我们的要求进行前、后、左、右方向的控制飞行,怎么办呢?那就需要使用下面的函数:
Dronekit通过调用函数send_body_ned_velocity方法,可以实现不同方向的指定运动。
def send_body_ned_velocity(velocity_x, velocity_y, velocity_z, duration=0):

    msg = vehicle.message_factory.set_position_target_local_ned_encode(

      0,       # time_boot_ms (not used)

      0, 0,    # target system, target component

      mavutil.mavlink.MAV_FRAME_BODY_NED, # frame Needs to be MAV_FRAME_BODY_NED for forward/back left/right control.

      0b0000111111000111, # type_mask

      0, 0, 0, # x, y, z positions (not used)

      velocity_x, velocity_y, velocity_z, # m/s

      0, 0, 0, # x, y, z acceleration

      0, 0)

    for x in range(0,duration):

      vehicle.send_mavlink(msg)

      time.sleep(1)

# 让无人机向左飞行,速度10m/s,飞行时间10秒,延迟(duration)10秒这样拐角更方正.

# x表示前后方向,y表示左右方向,z表示垂直高度方向

velocity_x = 0

velocity_y = -10

velocity_z = 0

duration = 10

send_body_ned_velocity(velocity_x, velocity_y, velocity_z, duration)

time.sleep(10)

#让无人机向前飞行,速度10m/s,飞行时间10秒

velocity_x = 10

velocity_y = 0

velocity_z = 0

duration = 10

send_body_ned_velocity(velocity_x, velocity_y, velocity_z, duration)

time.sleep(10)

#也可以用下面这种格式:让无人机向右飞行,速度10m/s,飞行时间10秒

send_body_ned_velocity(0,10,0,10)

time.sleep(10)

#最后让无人机向后飞行,速度10m/s,飞行时间10秒,这样无人机就飞出一个正方形

send_body_ned_velocity(-10,0,0,10)

time.sleep(10)


将以上代码加入,如下图所示:







以后我们就可以通过这个函数,控制无人机在任何方向上的运动。

结合仿真运行如下:

http://static.video.qq.com/TPout.swf?vid=wxv_1249845821944791041&1314.swf

至此我们基本了解了使用Dronekit外部控制无人机飞行的方法,并结合SITL仿真查看到运行效果。在实际使用中,大家还需要根据项目的具体要求,结合官网的API来编写代码。只有在多次操作以后才能熟练运用。Dronekit-python API参考:Dronekit API
在以后的教程中,我们还要与大家共同探讨加入摄像头、光流、激光雷达等设备,通过OpenCV等对回传视频进行识别,让无人机的飞行更加有趣和智能!请大家继续关注!



[*]


页: [1]
查看完整版本: Pixhawk无人机扩展教程(7)---SITL+MP/QGC运行