|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
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)
将以上代码加入,如下图所示:
以后我们就可以通过这个函数,控制无人机在任何方向上的运动。
结合仿真运行如下:
至此我们基本了解了使用Dronekit外部控制无人机飞行的方法,并结合SITL仿真查看到运行效果。在实际使用中,大家还需要根据项目的具体要求,结合官网的API来编写代码。只有在多次操作以后才能熟练运用。Dronekit-python API参考:Dronekit API
在以后的教程中,我们还要与大家共同探讨加入摄像头、光流、激光雷达等设备,通过OpenCV等对回传视频进行识别,让无人机的飞行更加有趣和智能!请大家继续关注!
|
| |