Pixhawk无人机扩展教程(3)---树莓派安装Dronekit及读取飞控数据

摘自:https://mp.weixin.qq.com/s?__biz=Mzg2NDI0MzU5NA==&mid=2247484380&idx=1&sn=dd6d3915852f5f2813a1c62095a7641e&chksm=ce6d1939f91a902f0f27c0b341c05535b7954dd0d1a33a82dcf859e7d635f17171fbdc373254&scene=21#wechat_redirect

Pixhawk无人机扩展教程(3)---树莓派安装Dronekit及读取飞控数据

原创 CJKK 苍穹四轴DIY 2020-02-08

前面的2篇教程分别介绍了树莓派在飞行器上的安装ubuntu-mate系统的安装及基本设置。现在我们可以使用笔记本ubuntu终端通过ssh命令远程连接树莓派。这篇教程介绍在树莓派上安装Dronekit,以及如何使用Dronekit编写自己的第一个脚本读取飞控数据。

 

先了解一下Dronekit是什么?


Dronekit也叫DroneKit-Python,是一个用于控制无人机的Python库。允许开发人员创建在机载电脑上运行的应用程序,并使用低延迟链接与ArduPilot飞控通信。可以显着增强自动驾驶性能,为飞行器增加更多智能,以及执行计算密集或时间敏感的任务(例如,计算机视觉,路径规划或3D建模)。除了DroneKit-Python以外,还有DroneKit-Android以及DroneKit-Cloud的API供不同的开发者使用。API通过MAVLink与飞控通信。它提供对连接飞控的遥测,状态和参数信息的编程访问,并实现任务管理和对飞行器运动和操作的直接控制。

相比之下,Dronekit比搭建ros来控制无人机更容易上手一些。

对于Dronekit,PX4(原生固件)被支持的较少,目前不可以进行模式切换。而对Ardupilot(APM固件)支持的比较多,可调用的函数也比较多。

 

一、安装Dronekit


  1. 飞行器接上电池,检查树莓派和飞控是否正常启动,树莓派和笔记本是否连接到同一个路由器。具体请参考前面两篇教程 树莓派在飞行器上的安装 和 ubuntu-mate系统的安装及基本设置

  2. 笔记本端通过ssh命令连接树莓派;

     

    Pixhawk无人机扩展教程(3)---树莓派安装Dronekit及读取飞控数据

     

  3. 输入cd切换到根目录;

  4. 首先安装pip和python-dev:

    sudo apt-get install python-pip python-dev

     

     

    Pixhawk无人机扩展教程(3)---树莓派安装Dronekit及读取飞控数据

     

  5. 输入以下命令安装DroneKit:

    sudo pip install dronekit

     

    官方文档上,就是以上两个简单命令就能安装。但实际安装时,会出现以下错误:

    Running setup.py install for lxml ... error

     

    Compile failed: command 'arm-linux-gnueabihf-gcc' failed with exit status 1

    错误内容是ARM交叉编译工具无法安装。

 

如果你也遇到相同的警报,执行下面的命令:

sudo apt-get install libxml2-dev libxslt1-dev zlib1g-dev python-py

 

顺利的话,Dronrkit就能安装成功了,如下所示:

 

Pixhawk无人机扩展教程(3)---树莓派安装Dronekit及读取飞控数据

 

二、编写测试代码


安装好Dronekit,接下来我们需要测试树莓派与飞控是否能正常通讯获取浮空数据。

  1. 首先在树莓派根目录下新建一个名为test的文件夹用于存放测试代码文件。和使用windows系统存放文件一样,不过这是用命令操作,新手可能不太习惯,命令:mkdir ,输入以下命令:

    mkdir -p  ~/test

    可以输入 ls 命令,查看是否新建好这个文件夹,如下所示:

     

    Pixhawk无人机扩展教程(3)---树莓派安装Dronekit及读取飞控数据

     

  2. 通过cd命令切换到test文件夹下,创建名为connect.py的文件,测试树莓派能否连接飞控:

    cd test

    touch connect.py

     

  3. 可以输入 ls 命令,查看是否新建好这个文件,如下所示:

     

    Pixhawk无人机扩展教程(3)---树莓派安装Dronekit及读取飞控数据

     

  4. 用 vim编辑文件:

    sudo vim connect.py

    将以下代码复制到文件中:

     

    from dronekit import connect

     

    # Connect to the Vehicle (in this case a UDP endpoint)

    vehicle = connect('/dev/ttyUSB0', wait_ready=True, baud=921600)

     

    # vehicle is an instance of the Vehicle class

    print "Autopilot Firmware version: %s" % vehicle.version

    print "Autopilot capabilities (supports ftp): %s" % vehicle.capabilities.ftp

    print "Global Location: %s" % vehicle.location.global_frame

    print "Global Location (relative altitude): %s" % vehicle.location.global_relative_frame

    print "Local Location: %s" % vehicle.location.local_frame    #NED

    print "Attitude: %s" % vehicle.attitude

    print "Velocity: %s" % vehicle.velocity

    print "GPS: %s" % vehicle.gps_0

    print "Groundspeed: %s" % vehicle.groundspeed

    print "Airspeed: %s" % vehicle.airspeed

    print "Gimbal status: %s" % vehicle.gimbal

    print "Battery: %s" % vehicle.battery

    print "EKF OK?: %s" % vehicle.ekf_ok

    print "Last Heartbeat: %s" % vehicle.last_heartbeat

    print "Rangefinder: %s" % vehicle.rangefinder

    print "Rangefinder distance: %s" % vehicle.rangefinder.distance

    print "Rangefinder voltage: %s" % vehicle.rangefinder.voltage

    print "Heading: %s" % vehicle.heading

    print "Is Armable?: %s" % vehicle.is_armable

    print "System status: %s" % vehicle.system_status.state

    print "Mode: %s" % vehicle.mode.name    # settable

    print "Armed: %s" % vehicle.armed    # settable

     

     

    Pixhawk无人机扩展教程(3)---树莓派安装Dronekit及读取飞控数据

  5. 保存代码并退出(如何保存编辑操作请参考《Pixhawk无人机扩展教程(2)》)

    以上代码涵盖了大部分的无人机状态,通过执行以上代码就能读取当前飞控状态参数。

     

    注意:不要急着执行以上脚本。可能提示权限不够出错。需要赋予USB0端口权限,以下逐步介绍。

     

三、赋予端口权限


确认树莓派与飞控已经通过数据线连接好,输入以下命令查看端口:

ls /dev/ttyUSB*

 

如果显示:

/dev/ttyUSB0

说明树莓派已经有USB0端口连接

 

然后输入以下命令,赋予端口权限

sudo chmod 666 /dev/ttyUSB0

(注意:此命令是暂时的,每次系统,重启以后,又得重新运行这个命令,下面介绍一下永久改写USB口读写权限的方法。)

 

永久改写USB口读写权限的方法


1.运行命令,如下图所示:

ls usb -vvv

 

记录"idVendor"和"idProduct"后面的两个编码。

 

2.创建新的udev规则:

sudo vim /etc/udev/rules.d/myusb0.rules

 

3.在文件中输入以下代码:

SUBSYSTEMS=="usb",ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523",GROUP="users", MODE="0666"

 

其中idVendor和idProduct改成上图中得到的编码。

 

4.重新加载udev规则,运行以下命令:

sudo udevadm control --reload

 

四、测试连接


输入以下命令:

cd test

 

python connect.py

 

(注意:执行python语句脚本,请将路径切换到脚本所在文件夹以下,否则会报错。)

 

成功运行后,会显示如下信息:

Pixhawk无人机扩展教程(3)---树莓派安装Dronekit及读取飞控数据

 

说明树莓派通过Dronekit读取到了目前飞控的数据:系统警报、固件版本、姿态数据、电池电量、解锁状态、当前飞行模式等等。这样就成功运行了第一个DroneKit-Python脚本。

 

 

连接到多个飞控


 

通过多次使用connect函数连接到不同的地址,即可在同一个代码文件内连接到多个飞控。

 

每次调用connect,都会返回一个Vehicle类的对象。通过控制这些对象,即可在同一份代码中控制多架无人机。

 

DroneKit-Python API参考

https://dronekit-python.readthedocs.io/en/latest/automodule.html#

 

注意:新手进行ubuntu系统下操作命令,因系统及使用习惯的不同,或多或少都会遇到一些问题,不同的安装方式,遇到的问题不尽相同。大家在遇到错误提示后,可根据错误提示百度或则谷歌一下相关信息,或则到相关网站及论坛,基本都会找到处理问题的方法。

 

总结:通过以上操作,我们成功安装了Dronekit,并编写了代码测试了树莓派与飞控能够正常通讯。以后的教程我们将编写一个脚本,控制pixhawk无人机飞行。并且介绍如何通过仿真SITL模拟飞行,验证自己编写代码的正确性,从而减少实际飞行中的失误,敬请期待!

 

 

 

 


Pixhawk无人机扩展教程(3)---树莓派安装Dronekit及读取飞控数据

 

 

上一篇:JS中的实例对象与 new 命令


下一篇:P28 抽象类与开闭原则