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
-
飞行器接上电池,检查树莓派和飞控是否正常启动,树莓派和笔记本是否连接到同一个路由器。具体请参考前面两篇教程 树莓派在飞行器上的安装 和 ubuntu-mate系统的安装及基本设置
-
笔记本端通过ssh命令连接树莓派;
-
输入cd切换到根目录;
-
首先安装pip和python-dev:
sudo apt-get install python-pip python-dev
-
输入以下命令安装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就能安装成功了,如下所示:
二、编写测试代码
安装好Dronekit,接下来我们需要测试树莓派与飞控是否能正常通讯获取浮空数据。
-
首先在树莓派根目录下新建一个名为test的文件夹用于存放测试代码文件。和使用windows系统存放文件一样,不过这是用命令操作,新手可能不太习惯,命令:mkdir ,输入以下命令:
mkdir -p ~/test
可以输入 ls 命令,查看是否新建好这个文件夹,如下所示:
-
通过cd命令切换到test文件夹下,创建名为connect.py的文件,测试树莓派能否连接飞控:
cd test
touch connect.py
-
可以输入 ls 命令,查看是否新建好这个文件,如下所示:
-
用 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无人机扩展教程(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语句脚本,请将路径切换到脚本所在文件夹以下,否则会报错。)
成功运行后,会显示如下信息:
说明树莓派通过Dronekit读取到了目前飞控的数据:系统警报、固件版本、姿态数据、电池电量、解锁状态、当前飞行模式等等。这样就成功运行了第一个DroneKit-Python脚本。
连接到多个飞控
通过多次使用connect函数连接到不同的地址,即可在同一个代码文件内连接到多个飞控。
每次调用connect,都会返回一个Vehicle类的对象。通过控制这些对象,即可在同一份代码中控制多架无人机。
DroneKit-Python API参考
https://dronekit-python.readthedocs.io/en/latest/automodule.html#
注意:新手进行ubuntu系统下操作命令,因系统及使用习惯的不同,或多或少都会遇到一些问题,不同的安装方式,遇到的问题不尽相同。大家在遇到错误提示后,可根据错误提示百度或则谷歌一下相关信息,或则到相关网站及论坛,基本都会找到处理问题的方法。
总结:通过以上操作,我们成功安装了Dronekit,并编写了代码测试了树莓派与飞控能够正常通讯。以后的教程我们将编写一个脚本,控制pixhawk无人机飞行。并且介绍如何通过仿真SITL模拟飞行,验证自己编写代码的正确性,从而减少实际飞行中的失误,敬请期待!