logo资料库

树莓派4B与Pixhawk4飞控之状态读取.pdf

第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
资料共4页,全文预览结束
树莓派树莓派4B与与Pixhawk4飞控之状态读取 飞控之状态读取 树莓派树莓派4B与与Pixhawk4飞控之状态监控读取 飞控之状态监控读取飞控配置树莓派配置程序代码总结 先看看装备,上节就说了,这树莓派的壳子我喜欢 历经九九八十一难,终于把树莓派和Pixhawk4飞控接通了,中间尝试了多种方法,四处碰壁,期间借鉴了微信公众号苍穹四轴中的大部分内容,结合Dronekit官网和 Ardupilot官网的内容,还有知乎大佬李德杰的帖子、大佬DarrenChan陈驰的帖子,使得连接成功,记录一下,方便日后查看,也方便日后学习的老弟少走弯路。这里用的是 一个相对简单一些的python写成的库dronekit,大家可以了解一下 还是上结果图看下,读取的状态 飞控配置 飞控配置 首先连接地面站,因为调试过程多个地面站也尝试了一遍,MP地面站的话就在配置调试->全部参数树->搜索serial2->baud改成921,PROTOCOL=2(这里我看其他帖子写改 成1,但我看官方是改成2,都尝试了一下我这里是2)->写入参数->重启飞控即可 如果用QGC的话,在载具设置->参数->搜索serial2->设置baud=921600,protocol=MAVLINK2->保存重启飞控即可
树莓派配置 树莓派配置 树莓派要的东西很多,我这用的是最新的树莓派4,感觉还挺好,但不知道是不是太强大了造成的不稳定,经常崩机,系统重装了好几次,心累的不行。 系统安装的是官方提供的Raspbian Buster with desktop,大约1G左右,也尝试过400MB的Raspbian Buster Lite,但是后来不知道怎么连wifi而告终,不过用不带桌面的是真 的快,后来发现,wifi应该可以通过sudo raspi-config 下的wifi来配置,还没尝试,以后有时间试一下。 装好系统后,初步设置我连到自家电视设置的,无屏幕教程网上有不少,有屏幕的远程操作看我上一篇的帖子。 首先进行树莓派系统的设置 sudo raspi-config 进入设置界面,选择5 interface options,选择P6 serial,先no在yes,保存重启。 还有一种方法是在树莓派桌面下run有个raspi设置,选择serial_login-disabled,serial_interface-enabled。 设置完成后进入终端: 配置如下: sudo apt-get update sudo apt-get upgrade python应该是自带,也装一下,万一没有呢 sudo apt-get install python-pip python-dev 这一步要装一下,要不然提示报错 sudo apt-get install libxml2-dev libxslt1-dev zlib1g-dev python-py 安装dronekit 这一步可能会花费较长时间,需要耐心等待一下 sudo pip install dronekit 这样基本就完成了,然后就是连接问题 参照官网给的连接图 在树莓派有供电的情况下,5v不用连接,只需要一个地,一个T,一个R,树莓派引脚如下图,也可以使用ttl转usb进行配置,可以参考苍穹四轴中的内容,我用usb没有配置 成功,
基本差不多了,我的连接图给大家参考一下 程序代码 程序代码 环境配置完成后,基本就是写代码进行通信了,我这里用linux使用ssh进行的控制,也尝试过用windows10的VNs进行控制,结果都是不错的,延时都不高,vns可以看到远 程的桌面新手可以尝试一下,相关配置跟前面讲到的ssh一样,开启后,输入ip及密码就可以登录操作。 远程连接树莓派,上一章提到了详细过程 接下来写connect.py程序 cd touch connect.py sudo vim connet.py 这里vim是一个编辑器,没安装的话会提示安装即可,操作方法为 输入i开始写入,输入esc退出写入状态,:wq保存并退出,这就够了 复制以下内容进文本,尝试能否连接并输出文本: from dronekit import connect vehicle = connect('/dev/serial0', wait_ready=True, baud=921600) print "Autopilot Firmware version: %s" % vehicle.version 运行程序 python connect.py 如果可以连接,就可以继续更改一下内容,进行飞控状态的监控了 from dronekit import connect vehicle = connect('/dev/serial0', wait_ready=True, baud=921600) print("\nGet all vehicle attribute values:") print(" Autopilot Firmware version: %s" % vehicle.version) print(" Major version number: %s" % vehicle.version.major) print(" Minor version number: %s" % vehicle.version.minor) print(" Patch version number: %s" % vehicle.version.patch)print(" Release type: %s" % vehicle.version.release_type())
print(" Release version: %s" % vehicle.version.release_version()) print(" Stable release?: %s" % vehicle.version.is_stable()) print(" Autopilot capabilities") print(" Supports MISSION_FLOAT message type: %s"%vehicle.capabilities.mission_float) print(" Supports PARAM_FLOAT message type: %s" % vehicle.capabilities.param_float) print(" Supports MISSION_INT message type: %s" % vehicle.capabilities.mission_int) print(" Supports COMMAND_INT message type: %s" % vehicle.capabilities.command_int) print(" Supports PARAM_UNION message type: %s" % vehicle.capabilities.param_union) print(" Supports ftp for file transfers: %s" % vehicle.capabilities.ftp) print(" Supports commanding attitude offboard: %s" % vehicle.capabilities.set_attitude_target) print(" Supports commanding position and velocity targets in local NED frame: %s" % vehicle.capabilities.set_attitude_target_local_ned) print(" Supports set position + velocity targets in global scaled integers: %s" % vehicle.capabilities.set_altitude_target_global_int) print(" Supports terrain protocol / data handling: %s" % vehicle.capabilities.terrain) print(" Supports direct actuator control: %s" % vehicle.capabilities.set_actuator_target) print(" Supports the flight termination command: %s" % vehicle.capabilities.flight_termination) print(" Supports mission_float message type: %s" % vehicle.capabilities.mission_float) print(" Supports onboard compass calibration: %s" % vehicle.capabilities.compass_calibration) 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) print(" Attitude: %s" % vehicle.attitude) print(" Velocity: %s" % vehicle.velocity) print(" GPS: %s" % vehicle.gps_0) 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(" Groundspeed: %s" % vehicle.groundspeed) vehicle.close() 总结总结 总体来说,dronekit的配置比ros等更方便一些,配置过程发现,dronekit中好像包括了mavlink等插件,后面会继续进行学习,我这边也遇到了不少问题,树莓派开机就崩还 没找到是哪里的问题,间歇性树莓派能搜到wifi却连接不上等问题, 慢慢学习,继续了解,今天没有学单片机,也没有学tensoflow,上午配了一遍环境,下午又重新配了一 遍,对整个过程有了新的了解和体会。接下来准备就是控制程序的编写,加油吧,小老弟。 作者:小老弟哟
分享到:
收藏