DroneKit-Python是一个用于控制无人机的Python库。DroneKit提供了用于控制无人机的API,其代码独立于飞控,单独运行在机载电脑(Companion Computer)或其他设备之上,通过串口或无线的方式经MAVLink协议与飞控板通信。
一、安装DroneKit(linux)
测试环境:ubuntu 18.04
参考链接:https://www.ncnynl.com/archives/202106/4256.html
sudo apt-get install python-pip python-dev
- 用pip来安装dronekit和dronekit-sitl
sudo apt install python-pip
pip install dronekit
pip install dronekit-sitl
- Dronekit 不支持Python3.0
- DroneKit-SITL 是一种模拟器,通过本地IP网络使用MAVLink进行通信。
- DroneKit-SITL目前仅为Mac,Linux和Windows提供x86二进制文件。您不能在像RaPi(树莓派)这样的ARM平台上运行它。
- 下载示例,获取DroneKit-Python示例源代码到本地计算机上
git clone http://github.com/dronekit/dronekit-python.git
二. 安装SITL,测试Donekit
这里我采用源码安装,参考链接:https://www.ncnynl.com/archives/202106/4257.html
- 安装依赖
sudo apt-get update
sudo apt-get install git
sudo apt-get install gitk git-gui
- 下载ardupilot
git clone https://github.com/ArduPilot/ardupilot//这里一般下载速度非常慢 可以的话翻墙解决
cd ardupilot
git submodule update --init --recursive//更新程序子模块
…见参考链接
- 安装MAVProxy和pymavlink
pip install --upgrade pymavlink MAVProxy --user
- 升级mavproxy组件。运行
pip install -U mavproxy
三、连接于获取数据
对于PX4 系统仿真提供的接口是:
127.0.0.1:14540
对于Ardupilot 系统仿真提供的接口是
127.0.0.1:14551
四、执行飞行任务
将搭建好的仿真环境MAVProxy,与已经和与飞控建立好通信的DroneKit两者进行结合,完成了整个的模拟仿真过程。
在MAVProxy的仿真环境基础上,运行之后,继续增加输出一个连接的节点,供dronekit连接
步骤如下:
- 运行仿真
cd ~/ardupilot
sim_vehicle.py -v ArduCopter -f gazebo-iris -m --mav10 --map --console -I0
2.增加节点,用于连接
output add 127.0.0.1:14551
- 在/home/dou/dronekit-python/examples 里面新建.py文件,例如hello.py
vim hello.py
Python Ubuntu下如何创建编辑python文件并运行
https://jingyan.baidu.com/article/11c17a2c4a5d47b546e39d98.html
- 在保存目录下使用指令vim新建py文件 。指令 【vim 文件名.py】
- 进入编辑模式。进入py文件显示后,首先按下键盘字母键“I”键进入“Insert”模式。
- 编辑python功能。在进入插入模式后,即可编辑函数功能。
- 保存python文件。完成编辑后,按“Esc”退出键,然后输入“:wq”对编辑内容进行保存。返回后可看到目录下新生成了文件。
- 运行python文件。使用指令python即可运行该文件。
代码如下,具体为升高10m,往前30s,往右飞30s,然后切换模式,关闭连接。参考官方代码,验证了其可行性,暂时未进行修改,后面将针对自己任务进行控制。
"""
© Copyright 2015-2016, 3D Robotics.
simple_goto.py: GUIDED mode "simple goto" example (Copter Only)
Demonstrates how to arm and takeoff in Copter and how to navigate to points using Vehicle.simple_goto.
"""
from __future__ import print_function//首先我们需要明白该句语句是python2的概念
//那么python3对于python2就是future了,也就是说,在python2的环境下,超前使用python3的print函数。
import time
from dronekit import connect, VehicleMode, LocationGlobalRelative
connection_string = '127.0.0.1:14551'
print('Connecting to vehicle on: %s' % connection_string)
vehicle = connect(connection_string, wait_ready=True)
def arm_and_takeoff(aTargetAltitude):
print("Basic pre-arm checks")
while not vehicle.is_armable:
print(" Waiting for vehicle to initialise...")
time.sleep(1)
print("Arming motors")
vehicle.mode = VehicleMode("GUIDED")
vehicle.armed = True
while not vehicle.armed:
print(" Waiting for arming...")
time.sleep(1)
print("Taking off!")
vehicle.simple_takeoff(aTargetAltitude)
while True:
print(" Altitude: ", vehicle.location.global_relative_frame.alt)
if vehicle.location.global_relative_frame.alt >= aTargetAltitude * 0.95:
print("Reached target altitude")
break
time.sleep(1)
arm_and_takeoff(10)
print("Set default/target airspeed to 3")
vehicle.airspeed = 3
print("Going towards first point for 30 seconds ...")
point1 = LocationGlobalRelative(-35.361354, 149.165218, 20)
vehicle.simple_goto(point1)
time.sleep(30)
print("Going towards second point for 30 seconds (groundspeed set to 10 m/s) ...")
point2 = LocationGlobalRelative(-35.363244, 149.168801, 20)
vehicle.simple_goto(point2, groundspeed=10)
time.sleep(30)
print("Returning to Launch")
vehicle.mode = VehicleMode("RTL")
print("Close vehicle object")
vehicle.close()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)