模吧

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

2189查看 | 0回复

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

[复制链接]
发表于 2020-7-4 19:13:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
这节教程介绍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

  • 运行如下:




二、SITL仿真+QGC运行

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



三、在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)



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

Pixhawk无人机扩展教程(7)---SITL+MP/QGC运行 无人机,仿真,电池,固件,地面站 作者:RXDlwE 4841

Pixhawk无人机扩展教程(7)---SITL+MP/QGC运行 无人机,仿真,电池,固件,地面站 作者:RXDlwE 9698

Pixhawk无人机扩展教程(7)---SITL+MP/QGC运行 无人机,仿真,电池,固件,地面站 作者:RXDlwE 1186

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

结合仿真运行如下:



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






您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|关于模吧|APP下载|广告报价|小黑屋|手机版|企业会员|商城入驻|联系我们|模吧 ( 冀公网安备13080502000084号 )

© 2013-2020 Moz8.com 模吧,玩出精彩!