使用Dronekit控制无人机,DroneKit配置

2023-05-16

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
#如果没有pip ,先安装python-pip
#如果用的是Anaconda,需要把第三方包从Ubuntu自带的地方移到Anaconda下,先删掉,然后直接在普通用户下pip install
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平台上运行它。
  1. 下载示例,获取DroneKit-Python示例源代码到本地计算机上
git clone http://github.com/dronekit/dronekit-python.git

二. 安装SITL,测试Donekit

这里我采用源码安装,参考链接:https://www.ncnynl.com/archives/202106/4257.html

  1. 安装依赖
sudo apt-get update
sudo apt-get install git
sudo apt-get install gitk git-gui
  1. 下载ardupilot
git clone https://github.com/ArduPilot/ardupilot//这里一般下载速度非常慢 可以的话翻墙解决
cd ardupilot
git submodule update --init --recursive//更新程序子模块

…见参考链接

  1. 安装MAVProxy和pymavlink
pip install --upgrade pymavlink MAVProxy --user
  1. 升级mavproxy组件。运行
pip install -U mavproxy

三、连接于获取数据

对于PX4 系统仿真提供的接口是:

127.0.0.1:14540

对于Ardupilot 系统仿真提供的接口是

127.0.0.1:14551

四、执行飞行任务

将搭建好的仿真环境MAVProxy,与已经和与飞控建立好通信的DroneKit两者进行结合,完成了整个的模拟仿真过程。

在MAVProxy的仿真环境基础上,运行之后,继续增加输出一个连接的节点,供dronekit连接
步骤如下:

  1. 运行仿真
cd ~/ardupilot
sim_vehicle.py -v ArduCopter -f gazebo-iris  -m --mav10 --map --console -I0

2.增加节点,用于连接

output add 127.0.0.1:14551
  1. 在/home/dou/dronekit-python/examples 里面新建.py文件,例如hello.py
vim hello.py

Python Ubuntu下如何创建编辑python文件并运行
https://jingyan.baidu.com/article/11c17a2c4a5d47b546e39d98.html

  1. 在保存目录下使用指令vim新建py文件 。指令 【vim 文件名.py】
  2. 进入编辑模式。进入py文件显示后,首先按下键盘字母键“I”键进入“Insert”模式。
  3. 编辑python功能。在进入插入模式后,即可编辑函数功能。
  4. 保存python文件。完成编辑后,按“Esc”退出键,然后输入“:wq”对编辑内容进行保存。返回后可看到目录下新生成了文件。
  5. 运行python文件。使用指令python即可运行该文件。

代码如下,具体为升高10m,往前30s,往右飞30s,然后切换模式,关闭连接。参考官方代码,验证了其可行性,暂时未进行修改,后面将针对自己任务进行控制。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
"""
© 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
 
 
# 通过本地的14551端口,使用UDP连接到SITL模拟器
connection_string = '127.0.0.1:14551'
print('Connecting to vehicle on: %s' % connection_string)
# connect函数将会返回一个Vehicle类型的对象,即此处的vehicle
# 即可认为是无人机的主体,通过vehicle对象,我们可以直接控制无人机
vehicle = connect(connection_string, wait_ready=True)
 
# 定义arm_and_takeoff函数,使无人机解锁并起飞到目标高度
# 参数aTargetAltitude即为目标高度,单位为米
def arm_and_takeoff(aTargetAltitude):
    # 进行起飞前检查
    print("Basic pre-arm checks")
    # vehicle.is_armable会检查飞控是否启动完成、有无GPS fix、卡曼滤波器
    # 是否初始化完毕。若以上检查通过,则会返回True
    while not vehicle.is_armable:
        print(" Waiting for vehicle to initialise...")
        time.sleep(1)
 
    # 解锁无人机(电机将开始旋转)
    print("Arming motors")
    # 将无人机的飞行模式切换成"GUIDED"(一般建议在GUIDED模式下控制无人机)
    vehicle.mode = VehicleMode("GUIDED")
    # 通过设置vehicle.armed状态变量为True,解锁无人机
    vehicle.armed = True
 
    # 在无人机起飞之前,确认电机已经解锁
    while not vehicle.armed:
        print(" Waiting for arming...")
        time.sleep(1)
 
    # 发送起飞指令
    print("Taking off!")
    # simple_takeoff将发送指令,使无人机起飞并上升到目标高度
    vehicle.simple_takeoff(aTargetAltitude)
 
    # 在无人机上升到目标高度之前,阻塞程序
    while True:
        print(" Altitude: ", vehicle.location.global_relative_frame.alt)
        # 当高度上升到目标高度的0.95倍时,即认为达到了目标高度,退出循环
        # vehicle.location.global_relative_frame.alt为相对于home点的高度
        if vehicle.location.global_relative_frame.alt >= aTargetAltitude * 0.95:
            print("Reached target altitude")
            break
        # 等待1s
        time.sleep(1)
 
# 调用上面声明的arm_and_takeoff函数,目标高度10m
arm_and_takeoff(10)
 
# 设置在运动时,默认的空速为3m/s
print("Set default/target airspeed to 3")
# vehicle.airspeed变量可读可写,且读、写时的含义不同。
# 读取时,为无人机的当前空速;写入时,设定无人机在执行航点任务时的默认速度
vehicle.airspeed = 3
 
# 发送指令,让无人机前往第一个航点
print("Going towards first point for 30 seconds ...")
# LocationGlobalRelative是一个类,它由经纬度(WGS84)和相对于home点的高度组成
# 这条语句将创建一个位于南纬35.361354,东经149.165218,相对home点高20m的位置
point1 = LocationGlobalRelative(-35.361354, 149.165218, 20)
# simple_goto函数将位置发送给无人机,生成一个目标航点
vehicle.simple_goto(point1)
 
# simple_goto函数只发送指令,不判断有没有到达目标航点
# 它可以被其他后续指令打断,此处延时30s,即让无人机朝向point1飞行30s
time.sleep(30)
 
# 发送指令,让无人机前往第二个航点
print("Going towards second point for 30 seconds (groundspeed set to 10 m/s) ...")
# 与之前类似,这条语句创建了另一个相对home高20m的点
point2 = LocationGlobalRelative(-35.363244, 149.168801, 20)
# simple_goto将目标航点发送给无人机,groundspeed=10设置飞行时的地速为10m/s
vehicle.simple_goto(point2, groundspeed=10)
 
# 与之前一样,延时30s
time.sleep(30)
 
# 发送"返航"指令
print("Returning to Launch")
# 返航,只需将无人机的飞行模式切换成"RTL(Return to Launch)"
# 无人机会自动返回home点的正上方,之后自动降落
vehicle.mode = VehicleMode("RTL")
 
# 退出之前,清除vehicle对象
print("Close vehicle object")
vehicle.close()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用Dronekit控制无人机,DroneKit配置 的相关文章

随机推荐

  • Centos7.7安装vncserver虚拟网络控制台

    虚拟网络控制台 xff08 VNC xff09 是一个图形桌面共享软件 xff0c 允许您使用键盘和鼠标远程控制另一台计算机 系统环境 服务端 xff1a Centos7 7 Minimal客户端 xff1a Windows10客户端VNC
  • C语言实现TCP通信

    如果想要自己写一个服务器和客户端 xff0c 我们需要掌握一定的网络编程技术 xff0c 个人认为 xff0c 网络编程中最关键的就是这个东西 socket 套接字 socket 套接字 xff1a 简单来讲 xff0c socket就是用
  • 详细的 win10+VS+Cuda10 环境配置,图文

    为完成CUDA 和OPEN CL的任务 xff0c 这两天配置了基于WIN10和VS2012 2015的环境 发觉网上很多配置CUDA的都是老版本 xff0c 而且过程过于繁琐 xff0c 我重新整理并分享之 我分了3篇记录 xff0c 另
  • Pytorch基础知识(13)对抗样本

    在前面的章节中 xff0c 我们已经看到了深度学习模型在解决各种计算机视觉任务方面的强大能力 我们在不同的数据集上训练和测试多个模型 现在 xff0c 我们将把注意力转向这些模型的健壮性 在本章中 xff0c 我们将介绍对抗样本 对抗样本是
  • ubuntu18.04修改docker0的IP

    当docker的IP与宿主机的IP在同一网段时候 xff0c 会产生错误 xff0c 例如同为172 17 直接修改 etc docker daemon json文件 xff0c 重启时候还是报错 查看docker日志 xff0c 可以看到
  • Flask 项目中使用 bootstrap

    flask 的插件中有一个 flask bootstrap 项目 但是用起来不怎么方便 如果大家感兴趣的话 还是直接在项目中引入 bootstrap flask 项目的目录结构 项目名称 app static span class hljs
  • MediaPipe基础(9)手指计数

    本文实现手指计数 xff0c 可以实现0 5的计数 链接 xff1a https span class token punctuation span span class token operator span pan span class
  • OpenCV基础(19)使用 OpenCV 和 Python 检测 ArUco 标记

    在本教程中 xff0c 您将学习如何使用 OpenCV 和 Python 检测图像和实时视频流中的 ArUco 标记 1 使用 OpenCV 和 Python 检测 ArUco 标记 在本教程的第一部分 xff0c 您将了解 OpenCV
  • 目标跟踪(7)使用 OpenCV 进行简单的对象跟踪

    1 简述 目标跟踪的过程是 1 获取对象检测的初始集 例如边界框坐标的输入集 2 为每个初始检测创建唯一的ID3 然后跟踪每一个在视频中移动的对象 xff0c 保持唯一ID的分配 此外 xff0c 对象跟踪允许我们为每个跟踪对象应用唯一 I
  • 基于OpenCV的轮廓检测(1)

    1 目标 理解什么叫做轮廓学习如何寻找轮廓以及可视化轮廓找出轮廓的不同特征 xff0c 如面积 周长 质心 边框等将看到许多与轮廓相关的函数 2 什么叫做轮廓 轮廓可以简单地解释为连接所有连续点 xff08 沿着边界 xff09 的曲线 x
  • 自动驾驶数据标注技术:如何解决数据标注难题?

    自动驾驶数据标注技术是现代自动驾驶汽车发展过程中必不可少的一部分 xff0c 因为它能够提高自动驾驶汽车的性能 xff0c 确保其安全性和准确性 然而 xff0c 数据标注的难题也给自动驾驶汽车的发展带来了挑战 下面是关于自动驾驶数据标注技
  • 在mac m1上安装docker并在浏览器启动Ubuntu环境

    目录 一些前言 xff08 说明我要这样做的原因 xff0c 很啰嗦 xff0c 建议直接跳过 xff09 安装docker用docker启动ubuntu的环境在ubuntu中安装qt5qt5bug解决qt5卸载 一些前言 xff08 说明
  • 【3D打印机】原来配置Marlin2.0这么简单,别说我没告诉你。

    96 96 可能由于各人的打印机款式不同 xff0c 某些参数没有出现在文中 xff0c 但是只要你完全看完本指南 xff0c 就可以理解Marlin是如何工作的 xff0c 我相信在此基础上 xff0c 你在固件中找到哪些不同配置并不困难
  • Ubuntu18.0 PX4+ROS+MAVROS+Gazebo仿真环境搭建

    Ubuntu18 0 PX4 43 ROS 43 MAVROS 43 Gazebo仿真环境搭建 PX4 xff1a 更新git 连接VPN下载安装 xff0c https docs px4 io master en dev setup bu
  • PX4 APM ROS MAVROS Gazebo之间关系

    https www cnblogs com yilangUAV p 14476923 html 1 PX4与APM 参考 https bbs amovlab com forum php mod 61 viewthread amp tid 6
  • MAVROS机外(offboard)控制例程

    PX4与ROS各部分的关系 Simulator仿真器 xff08 Gazebo xff09 xff1a 模拟真实飞行 xff0c 即模拟计算出真实飞行时的传感器状态 xff0c 包括GPS xff0c IMU xff08 惯性测量单元 xf
  • 罗素“杀死了”康托尔

    英国数学家罗素提出的著名的 罗素悖论 xff0c 直接证明了作为数学大厦基础的 集合论 是有问题的 xff0c 这也导致了 集合论 的发现者康托尔一次又一次的经历着罗素的劫难却也解决不了这个问题 xff0c 最终死在了自己工作的哈佛大学精神
  • px4与gazebo的多无人机编队仿真 offboard模式

    转载 原文链接 xff1a https blog csdn net weixin 43409270 article details 114703341 多机仿真 1 修改launch文件 在 PX4 Autopilot launch目录下
  • ubuntu18.04的APM环境搭建过程

    ubuntu18 04的APM环境搭建过程 配置APM环境结合gazebo软件进行仿真Ardupilot之Mavros实现Ros节点控制 配置APM环境 官方文档 https ardupilot org dev docs building
  • 使用Dronekit控制无人机,DroneKit配置

    DroneKit Python是一个用于控制无人机的Python库 DroneKit提供了用于控制无人机的API xff0c 其代码独立于飞控 xff0c 单独运行在机载电脑 xff08 Companion Computer xff09 或