我在ubuntu 编译qt5桌面系统编译的qt程序.可以在树莓派上直接运行吗

安全检查中...
请打开浏览器的javascript,然后刷新浏览器
< 浏览器安全检查中...
还剩 5 秒&一般情况下,我们用Qt编译出来的程序是要依赖于系统Qt库的,也就是这个程序移到别的没有安装Qt库的系统上是不能使用的。会提示缺少&&库文件之类的错误。这就是动态编译的结果。
但是如果我们想编译一个程序,这个程序在发给别人后,他们可以直接打开,而不需要特别地去先安装Qt库,那就需要采用静态编译了。
在Linux下如何静态编译Qt程序呢?
首先需要先安装静态编译的Qt,也就是静态编译Qt程序首先是需要一个静态编译安装的Qt
1、下载源安装程序,如 qt-x11-opensource-src-4.5.1.tar.gz
2、解压到某一目录
3、cd 进入解压后的目录,命令:
./configure -static -release -qt-zlib -qt-gif -qt-libpng -qt-libmng -qt-libjpeg -nomake demos -nomake examples -qt-sql-sqlite -prefix /usr/local/Trolltech/Qt-4.5.1_static&&
参数-static 指的是要采用静态编译Qt的方法
参数-release指的是只编译release版本的库
参数-qt-zlib -qt-gif -qt-libpng -qt-libmng -qt-libjpeg 是更好确定Qt编译出的程序能在目前不知的系统下运行。
参数-nomake demos -nomake examples 指的是不编译demos和examples
参数-qt-sql-sqlite 如果没有这个参数,configure的时候,可能会提示sqlite 有问题而中止。
参数 -prefix /usr/local/Trolltech/Qt-4.5.1_static 指明静态编译的Qt安装的目录,命名Qt-4.5.1_static是为了区别动态编译安装的Qt,因为如果没有这个参数,安装时会覆盖之前动态编译安装的Qt(如果有的话)。
4、没问题后
5、make没问题后再&
sudo make install
6、增加(或改变)环境变量:
在你home目录下你的的名字的目录中,在.profile文件中追加(或改变)如下环境变量:(为Qt设置一些特定的环境变量,这个很重要!.profile文件是隐藏的,可在你的名字目录下,按Ctrl+H显示所有文件查看到)
QTDIR=/usr/local/Trolltech/Qt-4.5.1_static/&&&&&PATH=$QTDIR/bin:$PATH&&&&&MANPATH=$QTDIR/doc/man:$MANPATH&&&&&LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH&&&&&export QTDIR PATH MANPATH LD_LIBRARY_PATH&&&&QTDIR=/usr/local/Trolltech/Qt-4.5.1_static/&&PATH=$QTDIR/bin:$PATH&&MANPATH=$QTDIR/doc/man:$MANPATH&&LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH&&export QTDIR PATH MANPATH LD_LIBRARY_PATH&&&
8、在终端测试一下qmake
成功的话,下来用qmake编译出的Qt程序就是采用静态编译的。这时你会发现,静态编译出来的程序大小变大了相当多。
静态编译与动态编译的区别
  动态编译的可执行文件需要附带一个的动态链接库,在执行时,需要调用其对应动态链接库中的命令。所以其优点一方面是缩小了执行文件本身的体积,另一方面是加快了编译速度,节省了系统资源。缺点一是哪怕是很简单的程序,只用到了链接库中的一两条命令,也需要附带一个相对庞大的链接库;二是如果其他计算机上没有安装对应的运行库,则用动态编译的可执行文件就不能运行。、
  静态编译就是编译器在编译可执行文件的时候,将可执行文件需要调用的对应动态链接库(.so)中的部分提取出来,链接到可执行文件中去,使可执行文件在运行的时候不依赖于动态链接库。所以其优缺点与动态编译的可执行文件正好互补。
原帖地址:
http://blog.csdn.net/small_qch/article/details/6748712
Views(...) Comments()当前位置: >
树莓派2B、树莓派3的Qt交叉编译环境搭建
来源:装机员┆发布时间: 15:51┆点击:
装机员为您提供的文章咨询供您阅读,如何使用的方法对您有帮助也请您举手之劳分享给您身份的人。
实验室项目需要用Qt在树莓派上开发一个用户交互界面。虽然树莓派的硬件配置随版本更新不断提升,但是还是无法满足直接在树莓派上进行Qt开发,所以首先要做的事情就是搭建交叉编译环境。
下面开始搭建步骤:
实验平台:树莓派2B(后来在树莓派3上进行了实验,除了raspbian镜像文件不同以外,其他文件不变,验证了该方案可行。)
1.准备文件(下载方式后加)
-raspbian-wheezy.zip
cross-compile-tools-master.zip
gcc-4.7-linaro-rpi-gnueabihf.tbz
qt-everywhere-opensource-src-5.4.1.tar
qt-opensource-linux-x86-5.4.1.run
这里如果不是有对更新的版本需求,还是建议严格按照上述给出的版本下载所需文件,否则可能会出问题。
百度网盘下载:& 提取密码:1em5
--------------------------------------分割线 --------------------------------------
树莓派入门教程图解PDF版&
如何在树莓派 2 运行 Ubuntu Snappy Core&
在(Raspberry Pi)树莓派上安装NodeJS&
Raspberry Pi 树莓派上安装Weston
用于Raspberry Pi 的Linux 操作系统已经可用
Raspberry Pi(树莓派)试用小记
Raspberry Pi(树莓派)的安装、配置IP及软件源等入门
--------------------------------------分割线 --------------------------------------
2.搭建环境
VMware Workstation 12 Pro下建立的Ubuntu虚拟机,版本为32位的12.04LTS。(试过64位的系统安装32位库支持的方法,但最终没有跑通,所以建议使用32位的Ubuntu)
3.在Ubuntu系统的主文件夹下新建文件夹命名opt,将准备好的文件放入opt文件夹并解压。
4.挂载树莓派镜像
$sudo mkdir /mnt/rasp-pi-rootfs
$sudo mount -o loop,offset=5-05-05-raspbian-wheezy.img /mnt/rasp-pi-rootfs
(1)loop,offset 之间,不能出现空格。
(2)offset该等于多少?可以执行以下命令查看
$sudo fdisk -l -raspbian-wheezy.img
执行结果:
Device Boot& & & Start& & & End& & & & Blocks& & Id&
-raspbian-wheezy.img1& & & & & & 8192& & & 122879& & 57344& & c&
W95 FAT32 (LBA)
-raspbian-wheezy.img2& & & & & & 122880& & 6399999& & & Linux
offset=(512* 122880) ,这样就不会出错了。
5.编译qtbase
$sudo apt-get install g++
$cd ~/opt/cross-compile-tools
$sudo ./fixQualifiedLibraryPaths /mnt/rasp-pi-rootfs/ ~/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-gcc
$cd ~/opt/qt-everywhere-opensource-src-5.4.1/qtbase
$./configure -opengl es2 -device linux-rasp-pi-g++ -device-option CROSS_COMPILE=~/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf- -sysroot /mnt/rasp-pi-rootfs -opensource -confirm-license -optimized-qmake -release -reduce-exports -make libs -no-pch& -make tools -prefix /usr/local/qt5pi -hostprefix /usr/local/qt5pi
(执行时间较长)执行至这一步的执行结果:
$make -j 4
$sudo make install
$for MODULE in qtimageformats qtsvg qtscript qtxmlpatterns qtdeclarative qtsensors qtgraphicaleffects qtlocation qtserialport qttools qtquick1 do& cd $MODULE;& /usr/local/qt5pi/bin/qmake .;& make -j4;&& cd ..; done
(以上三个命令的执行时间较长,请耐心等待。执行结束后截图)
6.Qt交叉编译成功,烧写新的树莓派镜像
首先将树莓派的TF卡通过读卡器插入电脑
$cd ~/opt/
$sudo umount /mnt/rasp-pi-rootfs
可以用$sudo fdisk &l命令查看TF卡在Ubuntu系统下挂载情况
博主使用的是16G的TF卡,可以看到的挂载地址为/dev/sdb。所以烧写命令如下:
$sudo dd bs=4M if=-raspbian-wheezy.img of=/dev/sdb
执行烧写命令以后,终端窗口是没有详细显示烧写过程的,所以只要慢慢等待就可以了。
烧写完成后会有相关信息显示:
以上就是装机员给大家介绍的如何使用的方法了,如何使用的方法到这里也全部结束了相信大家对如何使用的方法都有一定的了解了吧,好了,如果大家还想了解更多的资讯,那就赶紧点击吧。
本文来自装机员如需转载请注明!
不知道有没朋友跟我一样是 Ubuntu 和 Windows 双系统?今天有朋友问到我,当他从 Ubuntu 系统重新启动到 Windows 时,会发
装机必备软件
装机员系统之家提供、、最新,专为装机修机员奉上最好的、系统、U教平台
请勿发布违反国家法律法规的内容,会员观点不代表本站立场.本站发布的系统与软件仅为个人学习测试使用,请在下载后24小时内删除,不得用于任何商业用途,
否则后果自负,请支持购买微软正版软件! 如侵犯到您的权益,请及时通知我们,我们会及时处理。查看: 11816|回复: 102
【新人贴】树莓派飞控、无人机物联网节点,已经能飞了,有视频
本帖最后由 crossa 于
22:31 编辑
QQ群:,欢迎加入,共同学习
========================================================================================================
如题。没图,先放出程序吧,然后贴一个地面站的图凑个数,陆续更新
飞控程序,基于px4firmware,重写了PPM&&Decode程序,树莓派7号针脚输入,最多支持8通道。
输出采用 pca9685模块,使用12BIT的筒子们有福了。
顺便说一句,关于实时性的问题,只要你的在树莓派上构建好px4firmware的本地编译环境,实时性就不是问题,
只要使用root身份或者sudo 启动飞控程序,就是实时模式运行了,并且是抢占式的。飞控内的任务变成了任务队列。
mpu9250 模块(spi模式)
ms5611& &模块(i2c模式)
pca9685 模块(i2c)
12V转5V&&电源模块
5V隔离模块
最终目标:利用树莓派,做一个飞控和一体化的东西
关于px4的介绍,看这儿
打算基于ARM和Linux系统上用开源程序构建飞行器的,可以放弃APM了。
具体图过两天再更新。
顺便说一句,px4用起来比APM好用不少,比较轻,更新发布起来也比APM快,最重要的是,这玩意飞行稳定性好,故障率低。
======================
6楼放出了程序整合方法
7楼更新了地磁和加速度计校准演示
8楼更新了遥控输入校准演示
34楼更新了最新进度
IMG_958.jpg (143.93 KB, 下载次数: 56)
23:16 上传
==================================今日进度更新==================================================
1.四轴基本组装完毕
2.飞控辅助的电路板缺一组电源线,找不到合适的,原来买的电源线质量太差。
3.飞控供电部分已经基本调试过,5V2A稳压,器件、主机、PWM输出,全部分开供电,使用PCB隔离模块
4.串口、i2c扩展,采用xhs254插口。
5.加速计直接贴在小树莓派上。
6.向px4官方提交了部分树莓派飞控的代码,用于支持单机树莓派的某些修改已经并入官方固件。
7.还需要调试i2c设备,以及pca9685的 pwm输出
8. 遥控输入、PWM输出,需要移植到drvier framework 框架内,这是px4官方专门为posix类系统写的驱动框架
IMG_922.jpg (124.92 KB, 下载次数: 65)
00:50 上传
IMG_934.jpg (102.95 KB, 下载次数: 53)
00:50 上传
IMG_039.jpg (119.42 KB, 下载次数: 65)
00:50 上传
IMG_043.jpg (108.69 KB, 下载次数: 65)
00:50 上传
===========================================================================================================================================
今日继续更新
1.修改了电路板上器件的布局和走线
2.重新制作了一块辅助板。
3.树莓派改用使用5v3A ubec独立供电
c2.jpg (129.42 KB, 下载次数: 68)
09:35 上传
c1.jpg (295.49 KB, 下载次数: 59)
09:35 上传
c3.jpg (130.39 KB, 下载次数: 65)
09:35 上传
===============================================================================================
千万别用树莓派引脚直接输出pwm,能实现,但是隔离会成问题,用光耦的话,一个板子上很难处理,而且还需要额外的试验和计算。
市面上的PCA9685模块,驱动部分和通信控制部分开供电的,随便找个隔离模块就能把舵机驱动部分隔开。
MPU9250直接spi模式插在树莓派上,使用树莓派直接供电,通常是3.3V,也有使用5V的mpu9250。
遥控部分插在树莓派的GPIO.7&&和外围设备使用相同的供电方式
===============================================================================================
之前的草图有误。我不是搞电子行业出身的,有些东西理解不透撤
1. i2c器件的隔离,不建议用光藕,原因是双向通信,使用通信协议的器件,虽然用光藕也能实现隔离,但是体积不占便宜,需要的器件比较多,而且手工制作的话,相关的计算相当麻烦。直接用I2C隔离器件就行了,体积少制作简单
2. GPS的话,有的带I2C口,可以直接和HMC5883L相连接进行通信,这样就可以实现双罗盘了。
3. 如果不用I2C隔离器件,那么使用i2c总线的各个器件必须和pi共地。
4.目前我的I2C器件暂未隔离,因为一共就两个器件
===============================================================================================基本接工了,差试飞,不过不担心,毕竟只是pixhawk固件换到Linux下去运行而已==============================================
关于Linux下跑飞控,继续补充几点注意事项
1. 使用Linux系统,你可以把i2c设备,映射成内核模块驱动,但是千万不要核心算法放进内核模块,尽可能使用用户身份去执行,因为未打实时补丁的话,内核态执行一定是非实时,且不知道何时开始何时结束,所以必须以用户身份来执行。
2.一定要使用ROOT身份执行飞控程序,否则也无法变成实时状态。
3.自己修改的程序模块尽量别用pthread,要使用控制循环+队列来实现
================================================================================
前一阵子忙搬家,更新下进度! pca9685的现成模块是个大坑,i2c的通信方式,号称3~5V输入,但是当和spi模式的mpu9250协同工作时,频幅会有不匹配的问题,说好的5V能用,但是实际却不能用,频幅不匹配的情况下,MPU9250给震傻了。不过终于解决了!因为谁也想不到会是工作电压的问题!更新相关电路图!到此,所有基本器件都已经可以正常工作了,只不过我又要花时间重新制作电路板了
1. 稳压电路方面 C1=100Kpf,C2=150Kpf,C3=100uf,电感用100uh
2.PCA9685市面上的模块,蓝色那种,最好使用3~4V供电,这样就不会产生频幅不匹配的问题,PCA9685模块的VCC输入端,串联一个二极管后,串联1~2个电阻R1,大约是47~51K,也是300K+100K,前者电压大约能降到4V,后者能降到3.38V附近。PCA9685的V+,也请使用相同的供电。
至此,加速计、气压计、罗盘、PWM皆已正常工作,这个很恼人,折腾了2个多礼拜。硬是没想到是频幅不匹配。
====================================================================================================================
目前,我已经放弃Pi0,专用Pi3.&&pi0的话接口太少,外接设备太麻烦,性能也低了pi3太多,虽然比stm32不会差,但是有更好的硬件
为啥还要死守着pi0。pi3的性能应该不成问题。飞控占不满一个核。pxh控台全部启动完毕后再没有出现恼人的FIFO OVERFLOW。
p3.jpeg (173.2 KB, 下载次数: 64)
18:55 上传
res.png (52.94 KB, 下载次数: 62)
18:55 上传
pxh.png (45.67 KB, 下载次数: 70)
18:58 上传
==========================================================================================================
已经从串口供电,改为USB供电了,不再需要任何辅助器件了!
==========================================================================================================
折腾了一个月,给官方的DriverFramework 项目当了活雷锋了。
现在放出整合好的代码,
也可以直接使用
clone下来后 切换到 v1.5.5-rpi 分支即可进行编译
==========================================================================================================
之前胃出血住院了,麻烦,最近才刚缓过来,这周上海天天下雨,暂时懒得出去飞了,今天放出动力输出视频,至此,所有基本模块都以调试完毕,因为没有电流计,所以没有电量提示,后续会开发的
现在放出解锁视频
==========================================================================================================
今天天公作美,出太阳了,赶紧抓紧时间去飞。GPS好想忘记编译了,算了就飞稳定模式吧,等调整完试飞POSITION。pixhawk的position模式已经可以稳的一动不动了,我不担心树莓派表现会比pixhawk差,毕竟性能高出了数倍。
众所周知,对于会飞的人来说,其实多旋翼比6通道直升机难飞的多,不过,树莓派的飞控真心不错,因为稳定模式下,手感优于pixhawk,毕竟1000hz刷新不是盖的。
下面放出视频。Linux是不是不如rtos这种争论已经没意义了,因为这货经历了快20年的互联网环境的考验,从高并发到承受各种攻击,起码证明这货相对来说是稳定的,
但是很多rtos并没有在这样的环境里经受过考验,而且跑Linux的同时代硬件,大部分性能都很强悍,所以只要搞成抢占模式,实时性从来不是问题,
何况飞控还是异步的orb系统,计算速度快才是关键!
此次飞行配置 花牌3S2200 40C + 9045桨,飞行时间约总3~4分钟,Wi-Fi数传,没有装摄像头。降落后,电压表量了一下,还剩11.6V (充满是12.6)
=============================================================================================================
更新下GPS和PWM参数设定。GPS 采用M8N,通过USB接口与树莓派直接连接。
PWM设定需要修正,使用PPM输出的,futaba的遥控器,请根据下面的图修正参数,修正原则为 disarmd pwm 必须大于0,且小于油门最低值,PWM 最大值要小于油门最大值(推荐用油门最大值-100)
GPS.jpg (89.17 KB, 下载次数: 53)
22:22 上传
pilot.jpg (114.58 KB, 下载次数: 50)
22:22 上传
uav.jpg (120.66 KB, 下载次数: 49)
22:22 上传
参数.jpeg (117.19 KB, 下载次数: 46)
22:22 上传
====================================================================================================
最近太忙,所以耽搁了,离我长久以来的梦想又近了一步,我不指望一个能有10公里远的图传,因为我的飞机如果飞出10公里,怎么飞回来还是个麻烦问题。
所以先解决百米吧,wifi中继我还没有测试过,不过已经入手了一个室内能保证两百平方米信号的中继,估计室外距离也短不了,后续可以开发无线串口图传。
不过这样的手机端地面站也要配合修改才行了,先不管那么多,普通娱乐性质的飞行,也很少飞出十公里,大家买的很多图传有些也只有3,500米,甚至买的
飞机都飞不了太远。先不开发了,买成品,因为我想做9g舵机的云台,我的摄像头很轻,用市面上的云台只能配点金属条来配重了。
不说了,上图,手机充当地面站图像接收
6.jpeg (148.43 KB, 下载次数: 46)
22:57 上传
4.jpeg (146.93 KB, 下载次数: 41)
22:57 上传
1.jpeg (146.58 KB, 下载次数: 41)
22:57 上传
2.jpeg (134.04 KB, 下载次数: 42)
22:57 上传
3.jpeg (150.84 KB, 下载次数: 42)
22:57 上传
=======================================================================================
今天更新下最新的状况,S550脚架已经升级为龙门脚架,我买的这个机架因为底板孔位的问题,无法使用SK500的碳纤维脚架。
逛遍淘宝就找到一家任意S500的通用脚架, 感谢淘宝商家 “”,在他那儿我找到能用于10MM挂杆的脚架。
目前已经更新的配置如下
1. 飞行4200mah,25C,3S
4. 云台电池 2S 850MAH
整机重量1700g,接近1800g,但还没有到。预算充裕的推荐使用2810电机。考虑到各种因素,不再考虑升级成可长时间飞行的机器了。
机架.jpg (176.48 KB, 下载次数: 39)
07:58 上传
接下来释放出图传使用方法
1. 安装gstreamer
$ sudo apt-get install &^gstreamer-1.0*&
2. 树莓派下使用普通摄像头当图传的方法
对于不使用h264直接编码的摄像头:
$ gst-launch-1.0 v4l2src ! video/x-raw,width=1280,height=720 ! omxh264enc ! h264parse ! rtph264pay ! udpsink host=$1 port=5600
请将 $1 替换为 你的地面站IP地址,目前支持Android手机,Linux系统,苹果电脑不支持。
============================================================================================================
今天放出早晨试飞的视频,有条件的建议使用60fps摄像头,定点模式飞行,风力3到4,手机充当监视器,推荐使用懒人支架,这样就能轻松看监视了
目前使用的摄像头速度不是很理想,据测试, p分辨率下,有时只有9fps,640x480时,才有30fps,不过无视了,因为需要更好的效果买更好的工业摄像头就行了。
山狗毕竟需要额外的图传模块。 目前已经验证,可以通过mavlink相关的px4stream中间件,将图传和数传合二为一,使用数传来传输,目前暂不试验
============================================================================================================
目前px4已经更新到v1.6.0,我的代码也会跟着一起迭代,只是会慢一些,因为时间也有限,每次迭代一些刚需功能,下一版会更新的功能如下
1. 电流计功能,加入电量监控,这样就可以在低电量时,实现自动返回或降落
2. 声纳功能,目标是使用srf04,4.5元一个,经济实惠,直接通过树莓派来来控制,声纳外部驱动不整合入px4内。
3. i2c声纳功能,兼容APM的i2c声纳
4. sbus遥控输入功能
5. 非树莓派卡片电脑的移植
==============================================================================================
工具链配置文件已经更新,重申下安装方法
git clone git checkout v1.5.5-rpi
git submodule update --init --recursive
追加环境变量export AUTOPILOT_HOST=XXX.XXX.XXX #此处填写ip地址export RPI_TOOLCHAIN_DIR= #工具链目录,bin目录上一层export CROSS_COMPILE_PREFIX= # 工具链前缀export PATH=$RPI_TOOLCHAIN_DIR/bin:$PATH
#编译飞控固件,遇到子模块版本相关提示,默认选Ymake posix_rpi_cross_no_shield
===================================================================================================================
今日更新 sbus 驱动已经编写完毕,下载地址和使用说明看下面的链接,最大可以支持16通道,但是16通道的话每帧的间隔需要调整,因为我没有16通道的设备所以无法调适,但是默认支持8通道速度和精度也远远高于ppmdecode,系统资源占用很低。/crossa/raspx4-sbus-rc-in
下一步的话,先将px4向其他平台移植,最近收到了 云汉芯城 提供的 友善之臂 nano pi neo2,似乎可以做穿越机了,但是仍有不少问题要解决,这个板的发热量远远高于树莓派,回头要找厂家问下如何减少发热量。先上图
1.jpeg (153.24 KB, 下载次数: 42)
09:12 上传
2.jpeg (98.27 KB, 下载次数: 36)
09:12 上传
3.jpeg (151.5 KB, 下载次数: 33)
09:12 上传
4.jpeg (142.02 KB, 下载次数: 39)
09:12 上传
如上图所示,做个穿越机似乎不是不可以,但是目前还有问题需要解决,板卡的发热量,还有相应的MCU配置要缩水一下,因为体积有限万幸的是sbus驱动已经完成了,原本的ppmdecode依赖pigpio的,所以很难像其他平台移植,而且系统资源占用偏高,至少目前这个问题已经没有了
==================================================================================================================================
1. 为px4编写了linux下使用的sbus驱动
2. 为px4编写了linux下使用pca9685的驱动,可指定设备号,可以设定马达数量
3. 为px4编写了linux下使用的ADS1115,
5. 编写了通用的交叉工具链配置文件,这些不用担心navio的垄断了,非树莓派也可以跑
6. nanaopi neo2辅助板制作中
7. 程序待测试
nano2.jpeg (156.9 KB, 下载次数: 36)
14:17 上传
nano3.jpeg (120.29 KB, 下载次数: 41)
14:17 上传
nano1.jpg (191.15 KB, 下载次数: 35)
14:17 上传
3.3V 供电改为外接,不再一来卡片电脑供电
==============================================================================================================================
最新进度更新
1.nano pi 辅助板制作完成
2.程序等待调试
3.针对Sbus encoder,需要编写一个在命令行内设置电调形程的程序
finish1.jpeg (134.37 KB, 下载次数: 32)
21:19 上传
finish3.jpeg (78.51 KB, 下载次数: 39)
21:19 上传
finishi2.jpeg (182.63 KB, 下载次数: 41)
21:19 上传
nano pi neo2有3个串口,1个i2c,1个spi,程序待调试,如果试飞顺利,那么,我建议大家使用大机架的话,考虑nano pi m1,因为
nano pi m1 多一个i2c口,可安装双向电流监控器 INA219,这个东西和PCA9685不能在同一个i2c接口上。
因为nano pi默认有3个串口,所以,如果带电脑出门的话,可以利用无线数传操作pxh控制台或者飞控里的Linux系统了。
============================================================================================================================================
今日进度更新
1. nano pi的系统,使用的是主线的UBUNTU,很奇怪,速度居然不满,一改我对Ubuntu的印象,因为Ubuntu曾经很快。64位的处理器,64位的系统,这个绝对是碾压树莓派的
2. 直观的对比下体积。
目前,px4已经在nano pi上跑起来了,气压计和加速计工作正常,这版我不打算使用摄像头,因为是做成有休闲用的小飞行器的,甚至不打算用地面站。
这个版本的改动较大,首先要控要改为sbus了,用sbus的有福了。PPM在NANO pi上个坑,SBUS在树莓派上是个坑,这下好了平衡了。
接下来放上调试的视频
=================================================================================================================今日更新
1. futaba s.bus驱动完成,这是目前为止,Linux下首个开源的,容易用的futaba s.bus驱动,台式机上也可以用,macos下不可以,甚至macos下的虚拟机也不可以。因为必须支持termbit方式传输,还是推荐用Linux,至此,nano pi的遥控输入驱动算是写解决了。接下来就是完整的整合起来测试,并且等官方修复一些px4的bug了,同样的,我会在全部完成后,向官方提交代码
之前的部分,已经被融合到navio的驱动里去了,也不知道他们怎么想的。不废话,先上图
1.用的是最便宜的SBUS编码器,没办法,我的遥控器是以前玩直升机留下的存货。sbus,ppm一个都没有。。。所以,必须借助辅助的设备
linux_sbus2.jpeg (138.19 KB, 下载次数: 38)
02:05 上传
2. Sbus转串口,以前张凯奇的帖子里面已经说过了,此处不赘述,反正bing上一搜一把,无非做个倒向,100K的通信速率
linux_sbus3.jpeg (206.64 KB, 下载次数: 39)
02:05 上传
3. 全部数值均已进行转换,和PPM输出方式得到的结果基本一致。
linux_sbus.png (92.14 KB, 下载次数: 31)
02:05 上传
因为这次把SBUS驱动整合到px4内,所以,无需外部输入模块了,并且可以正常发布failsafe和rc loss事件,支持16通道,但是默认只开8通道 (我也没有16通道的设备)
数字通道不开放(因为我也没有,没办法测试)
================================================================================================================================================
今天更新下最新的进度
1. 飞行器已经组装完成,还差一根电源线
2. 此次的飞行器,按照练习机来打造,不加装摄像头,最多再加装个GPS
3. 此次的飞行系统运行在nanopi上
4. 飞控固件已经升级为64位
5. nanopi支持动态CPU频率调节,最低频率140MHZ,请注意: 4核140MHZ,远远快过560MHZ单核。
6. nanopi可以自行引出USB,此次因不使用太多USB估不引出
7.使用Rtl 8188cus充当数传
3.jpeg (116.84 KB, 下载次数: 25)
00:02 上传
2.jpg (106.61 KB, 下载次数: 27)
00:02 上传
1.jpg (153.91 KB, 下载次数: 32)
00:02 上传
附上之前启动px4进行调试的视频
此次待试飞完毕后,代码先不更新,会和px4官方稳定版固件同步释出
需要64位工具链的请看这儿:
已经升级到GCC linaro版本的6.3 ,此工具链中包含两个工具链,一个32位的cortex A53工具链,树莓派可用,一个64位的cortex A53 ,nano pi可用,其实树莓派也可以用,只是编译出来的程序必须跑在64位系统上,但是官方尚未释出64位系统
============================================================================================================================================
关于Linux实时补丁的问题,我在这儿重申一遍。
经实践得出结论:
1.只需要有抢占式任务管理,无需实时补丁
2.对于px4来说,任何实时补丁,都会导致不稳定因为需要手工指定irq和权重,相当于把树莓派变成了一个大号单片机,这是个愚蠢的行为。因为高性能硬件下,即使异步的,只要保证时间片抢占的够多,就能保证所谓实时性。即时,因为线程队列的巡检也是一个固定的周期,内核里可以设定的。所以,高速硬件上打了实时补丁,不光不会增加稳定性,反而还会带来调试的麻烦,甚至会可能会出现一个进程卡住,其他任务阻塞的情况(很多不懂系统的家伙,经常把这条说反了)如果要玩大号单片机,也没关系,不过如果是这样,我当初直接就不用做了。在任何一个Linux系统里,内核里的模块默认就是实践不严格的,异步与无阻塞,是稳定和性能妥协的产物。
3. 不打实时补丁时,Linux的进程切换,并不会因为一个进程卡住而切不回来,只要不是互斥锁,本身就是非阻塞的,同样的,px4的所有内部程序模块,都在同一个进程里,orb通信方式本来就是异步通信,没有考虑时序的必要,只要保证采样到数据不太旧就可以(事实上是能保证的)
4. 任何一个应对高并发的系统,都不会去屁颠屁颠的打上一个实时补丁(参考服务器端,这一领域对于硬件工程师来说,大部分都没接触过,甚至完全都没概念,飞控这点负载,除了视觉、深度这类以外,目前就没有能让系统跑的气喘吁吁的),实际上强行加个时序进去,一旦某个进程卡住了,发生死锁,可能整个系统就有崩溃的可能。
6.不要去拿ucos这类做对比,这就好比用DOS和UNIX类系统比
以上,就是对于为什么这个飞控什么实时补丁都没打的原因,不要去看手动模式飞的如何,手动模式下,就算用pixhawk,飞起来也不能可能比没有飞控的6通直升机舒服。
祝大家周末飞行愉快
========================================================================================================================================
关于nano pi我要说一下
nano pi可以使用主线的ubuntu,系统官方已经提供了,整体过的去,但是官方wiki上的uboot相关资料和官方github上的uboot程序代码是对应不上的,
没法用,想要移植就费力了,已经向官方提出了,看他们是否理会,反正这个板我也没花钱,如果官方不愿意在这个方面做好,
那么我接下来会暂时回到树莓派zero。
一片树莓派要比nanopi neo2贵不少,但是从来不缺销量,其中的差距恰恰就是 树莓派在生态支持上下的功夫,国内的厂家只知道卖货
而且又卖的不是很好,作为用户,我们也不差那几十块钱,我在淮海路上查理士吃个午饭,少说都要30了,魔都的房价最便宜都没有低于3万一平的
用了这些东西,谁会在乎那几十元差价。如果生态不做好,即使树莓派比nanopi贵100元,我相信树莓派依然会卖的比这个好,这不是硬件好坏的问题,
没有相关的支持,硬件就是堆不知道干啥的电路。
以上就是国内厂商的思维上的差距。还好这个板不是我掏钱买的。
==========================================================================================================上面的话说完后,友善之臂终于在6月30日更新了文档,提的意见有用,就是好厂商。
友善之臂的默认内核跑飞控是有问题的,需要修改进程管理模式,并重新编译,这个方法也适用于其他系统,以及自己构建的最小系统
task.png (29.49 KB, 下载次数: 20)
08:43 上传
304428CF-351F-4748-AFDE-C246B7CE55BA.png (29.62 KB, 下载次数: 23)
08:43 上传
task3.png (29.63 KB, 下载次数: 24)
08:43 上传
1. 将内核改为低延迟桌面模式(抢占式任务管理),相当于软实时
2. 下面那个250HZ相当于是线程队列的巡检周期,可以调到300HZ,甚至更高,只要你的硬件可以承受
有以上两点保证,就可以完美跑px4了。4核A9,70%的运行速度,用这种模式,已经能保证1000hz刷新了
================================================================================================================================================
今天公布下最新进展
1. 目前的nanopi的项目暂时搁置,编写的程序,移回树莓派继续使用。nanopi不够稳定,在修改i2c通信速率重新编译内核后并升级后,spi设备莫名消失了。暂时放一放。
2. 已完成的驱动程序移回树莓派。
3. 山狗SJ4000摄像头,Linux系统下有驱动,支持720p 60fps
4. 以完成的版本,已转让给相关单位,用于研发安防用。
5. 电池监控已经找到了除ADS1115之外的最便捷解决方案。
1.jpg (175.26 KB, 下载次数: 13)
12:36 上传
2.jpg (168.47 KB, 下载次数: 12)
12:36 上传
======================================日更新===================================================
Nano pi暂时放一放了,因为之前做好的那台转让了,所以只好再做一台,这次有重大更新
1.之前做的那部分已经合并入px4firmware 官方,编译配置文件名字为posix_rpi_cross_no_shield,相应飞行配置文件为px4_no_shield.config
2.这一版有了重大更新,因为已经可以支持sbus输入,所以可以不再使用ppm驱动了,支持 rc loss后自动返航功能了,支持failsafe,CPU整体使用率降低到1%以下
3.固件同步更新为 v1.6.5
4.电池监控还没时间调试代码,总之调完会放出,
5.双地磁计(其实也可以双加速计,mpu9250+mpu6500)6.新版的pca9685,使用0x60起始地址,请自行短接pca9685模块的地址设定引脚
等不及想尝鲜的,自行下载master版本代码 ,
尝鲜版本的DriverFramework,请从我的分枝上下载
具体编译教程不放了,编译配置文件为 posix_rpi_cross_custom.cmake
version.png (27.09 KB, 下载次数: 8)
22:11 上传
top.png (36.21 KB, 下载次数: 6)
22:11 上传
qgc.png (163.72 KB, 下载次数: 8)
22:11 上传
晒晒新版山寨机
new1.jpeg (200.92 KB, 下载次数: 8)
22:26 上传
new4.jpeg (230.85 KB, 下载次数: 5)
22:26 上传
(29.62 KB, 下载次数: 23)
08:43 上传
(270.67 KB, 下载次数: 9)
22:26 上传
很给力!这代码能不能飞固定翼?
不容易阿,楼主加油!
楼主有进度吗
楼主有进度吗
有,组装阶段,正在等零件。还缺点小铜柱
这一楼,更新一下程序的安装方法。px4的程序在树莓派上编译速度非常慢,建议在pc端进行编译,基本2~3分钟即可完成,若在树莓派下进行编译,可能需要半小时以上
推荐使用Linux环境进行编译。不推荐MAC环境。主要原因是,mac环境下除非手工一步步制作交叉工具链,使用ct-ng或者 buildroot就别想了,很多意想不到的文件,光static link的问题接解决不了。
PX4固件整合的步骤
1. 先从px4firmware官方,下载固件源代码
#&&mkdir -p ~/src#&&cd ~/src#&&git clone #&&cd Firmware#&&git submodule update --init --recursive& &//这一步很重要,此处会初始化所有的子模块的代码,并更新到相应版本
#&&git checkout v1.5.5& & //截至我写这个帖子,px4firmware更新到了1.5.5版本
2.下载交叉工具链接
此工具链接使用gcc-4.9 linaro版本,目前我的交叉编译配置文件依此工具链制作
3.下载我修改的PCA9685和遥控输入的代码。
# git clone&&
我的遥控输入代码使用PPM Encode方式输入,通过数枚派P1_7引脚进行输入,最多同时支持8个通道,使用共享内存方式进行数据通信。
4.将我的代码先复制到px4目录下
# cp -rf&&raspberry-pi-px4firmware/*&&src/Firmware/
5.设置交叉工具链接环境变量
export RPI_TOOLCHAIN_DIR=&此处填写你的地址&& &# 注意,默认的交叉编译器须存放在 $RPI_TOOLCHAIN_DIR/bin 目录下
6.使用交叉工具链接编译整合好的px4
# cd src/Firmware
# make posix_rpi_cross_single
7.编译后,会在Firmware目录下生成一个posix_rpi_cross_single_build的目录,将此目录上传至 树莓派
8.启动px4固件程序
a.先确定你的树莓派使用了网络链接,且地面站电脑和树莓派在同一个网段内,在不使用串口收发的情况下,飞控固件会通过udp进行广播。
b.进入posix_rpi_cross_single_build目录,在src下面有个px4的执行文件,以root身份启动即可
# sudo src/px4 posix_configs/px4_rpi.config&&//此条命令以非守护进程模式启动飞控,若使用了实时Linux内核,那么此方式启动,即为实时模式,cpu占用率较大,可忽略,因为单片机上裸机跑程序时,很多都不是多任务系统,不存在cpu占用率的概念。使用实时内核可突破250HZ刷新速率限制。
c.启动地面站程序。px4firmware,对应的地面站程序为QGroundControl,若要使用地面站进行数据校准,必须使用QGroudControl,而不可使用misson planer或APM planer,因为,后两者只能显示px4firmware运行状态。
====================================================================================================================
PPMDecode程序安装
1. 先在树莓派上 安装pigpio
#sudo apt-get install pigpio
1.下载PPMDecode代码,并进行编译
#git clone
#cd raspberry-pi-ppm-rc-in
#make install
2.启动PPM解码工具
# nohup&&ppmdecode -P&&
3.将接收PPMEncode的输出的PWM线,插接到 树莓派 p1_7,&&如要使用其他引脚 ,请自行修改代码并,重新编译安装
================================================================================================================================
地面站安装须知
1.QGroundControl支持WIN/LINUX/MAC/ANDROID/iOS,但是,android端的,须翻墙,通过google play下载,要么下载源代码自行编译
2.在Unix类系统环境下使用QGC,请安装Qt5.5.1且只能使用此版本,否则地面站无法正常工作(不能校准传感器,也不能用串口数传进行连接)
================================================================================================================================
以上就是px4固件支持原生树莓派的方法,等一阵子放原理图和安装图,新买的四周上周六到的货。还需要制作一块洞洞板,用来安放模块,并且需要做一些简单的供电设计,
以及模块间的隔离。某些代码可能需要修改,来兼容raspbian环境下的设备号
考虑到便携性。我考虑用树莓派3作为地面站。
本帖最后由 crossa 于
15:38 编辑
此楼更新一下三轴加速计调试视频,真正的spi模式。MPU9250包含地磁计,所以无需罗盘了
本帖最后由 crossa 于
23:11 编辑
今天更新一下遥控器输入程序的相关资料。
我写的驱动程序,需要配合PPMEncode使用,必须使用8通道的接收机,8个通道插满,如果使用6通道接收机插在8通道编码器上,有两个通道的的数据帧会被错开,导致通道错位。
目前,不支持S.BUS,主要原因是我没有S.BUS的设备,所以没法编写驱动程序。
不说了,上视频。下一次的话,我会更新飞行器组装以及动力输出的相关资料,全部工程完工后,我会更新出相应的系统镜像,直接下载回去就能用了
再秀一下整体的CPU占用率,别嫌高,其实不高,pi zero依然是一代pi的bcm2708,不能和A53比,但是比stm32已经绰绰有余,而且已经使用了实时内核的Linux,px4固件内部都是按照nuttx一样的任务队列来运行的
22-29-55 的屏幕截图.png (188.25 KB, 下载次数: 71)
22:32 上传
=====================================================================================================
之前胃出血住院了,麻烦,最近才刚缓过来,这周上海天天下雨,暂时懒得出去飞了,今天放出动力输出视频,至此,所有基本模块都以调试完毕,因为没有电流计,所以没有电量提示,后续会开发的
现在放出解锁视频
(188.34 KB, 下载次数: 61)
22:32 上传
这个是何必呢? Linux 不适合干实时特别强的东西。
飞控实时部分裸奔给个 STM32 的 CPU 就完全够用了。
那个 zero 来做图像处理还差不多。
本帖最后由 crossa 于
12:25 编辑
这个是何必呢? Linux 不适合干实时特别强的东西。
飞控实时部分裸奔给个 STM32 的 CPU 就完全够用了。
这里指出大家观念上的误区。
1.所谓Linux 实时性不强,是针对未打过实时补丁的东西来说。
2.当打过实时补丁后,以root身份运行的,才能进入到实时模式,且为抢占式运行,raspbian系统的内核,已经做了这方面优化,如果自己去build内核,就需要打实时补丁后,把内核设置低延迟抢占式,才可当实时内核用,因为内核默认编译配置是按照服务器系统内核来设定的,非抢占式。
3.一旦使用了实时模式,就可以把原来刷新频率限制给突破,这点我确信,因为见过老外的资料
4.stm32所谓实时性,是建立在裸机跑程序的前提下,要么就是用nuttx,变成任务队列的形式
5.我用的不是APM固件,而是px4的固件,这套固件里的大部分实时要求高的东西,已经变成了和nuttx一样的任务队列,就因为实时的,所谓,在终端上看才有那么高的cpu占用率,基本上任务队列被移植到Linux上了,大家之前误解,基本都建立在Linux下运行ArudPilot的基础上。
6.如果你要实现简单图像传输,网络甚至丰复杂功能,stm32做起来很累。
7.大部分熟stm32的家伙,不熟Linux,这是现实,他们很多人也不熟悉上面几点
8.我已然在老外的视频里见过Linux方案的飞行器,老外搞的,比stm32只好不差,而且能实现的东西也更多。商品化的飞控,太贵,参考 navio 和 pxfimi ,价格能买好多pixhawk,自己搭建的话,价格比pixhawk低不少,但是能用同样的程序。
9.老外的树莓派成品飞控,也用我现在的弄的固件,典型例子 pxfmini,navio。
至于飞控程序,之前坛子里有人移植了 ardupilot,弄了个raspilot,那个哥们的问题就在于没去用实时内核。
即使使用stm32的方案,我可这么说,我有个pixhawk,刷ArduPilot和px4firmware,同样的pid参数,稳定性后者优于前者。
如果stm32方案,想搭载更高级的功能,没有arm很麻烦,必须通过串口把mavlink协议输出到arm机上,才能通过mavproxy转到网上,而且Linux下程序资源丰富程度有目共睹。
ArudPilot官方的网站上有相应介绍,
这个是何必呢? Linux 不适合干实时特别强的东西。
飞控实时部分裸奔给个 STM32 的 CPU 就完全够用了。
实时性问题,不用担心。因为这玩意也可以实时的,当初很人多没搞清楚里面猫腻。
我前面帖子已经说过,即使打了实时补丁,内核也必须调整为抢占式,且必须以root身份运行,才是实时的。
我现在用的已然是跑实时内核了,所有任何和nuttx一样,是队列。这个很容易搞。
之前有个树莓派的跑ArduPilot的方案,并没有用实时内核。
顺便说居,很多人对这个东西不熟悉。层进过好几个飞控群,大部分做飞控,就是拖模块,不懂系统的居多
stm32方案的缺点也很明显,就是只能做飞控,要沟通,还要靠arm。
用树莓派的好处,显而易见,可以跑更多的程序
本帖最后由 crossa 于
12:14 编辑
这个是何必呢? Linux 不适合干实时特别强的东西。
飞控实时部分裸奔给个 STM32 的 CPU 就完全够用了。
关于实时性,我补充几条
1.内核必须打实时补丁,且必须使用低延迟配置,重新编译,如果是raspbian系统,可忽略,因为只要是去年之后的系统,自带的内核已经是做了这些处理了。
2.以px4firmware为例子,必须root身份启动,或者sudo方式启动,否则程序启动时,会提示没有使用实时模式。
3.坛子里用树莓派做飞控露过脸的我基本都主动联系过,主要问题很简单,之前有两位,系统没我那么熟悉,更别谈实时补丁,所以很多事情我知道从他们那儿参考不了太多的,他们在没有打实时补丁的情况下,就拿出去飞了。
4.我现在用的固件,已经用了任务队列了。成品的飞控早就有了,navio算出的早的,pxfmini也是,我不太想用这些,原因是捆绑的东西太多,而且国内不容易买到,只能海淘
顺便说句,我现在这个只差最后pwm输出部分了,其实程序早写好了,没测试而已,使用pca9685输出的话,没悬念,唯一问题只是体积,激进一点的话甚至可以树莓派直接输出,有相应的内核驱动,不过考虑到系统以后的移植,还是乖乖用模块吧。
等这一把弄完,我会从头移植一个最小系统,专门跑飞控。这个不复杂
实时性问题,不用担心。因为这玩意也可以实时的,当初很人多没搞清楚里面猫腻。
我前面帖子已经说过,即 ...
Linux 就算用了实时 patch,也不能和裸奔的 stm32 比。这个还是差挺多的。关键是 PX4 在 Linux 是以用户空间来跑的
不是核心驱动。这种
Linux 实时那个 project 已经停止开发了,关键还是没有人真正
关心 Linux 下面类似单片机那种实时性,比较鸡肋。
这个还是几年前的旧消息了。
PX4 拿 stm32 跑就够了,也跑很好,你还有什么和飞控相关
的额外程序要跑?拿Linux 能跑起来和能有比较好性能还是
有不少区别的。
Linux 就算用了实时 patch,也不能和裸奔的 stm32 比。这个还是差挺多的。关键是 PX4 在 Linux 是以用户 ...
这个我得说几句
1.首先说内核态,不是不可以,但是要考虑到一点,内核态的话,就需要做成内核模块,因为内核模块的更新必须和内核同步更新,如果内核更新,模块必须重新编译,还不如用户态来的简单,再说本身是以root身份运行的,和使用普通用户身份运行也不是一回事。
2.用户态不影响太多的,否则也不会有 pxfmini 和 navio这类Linux方案的飞控了,他们只是把驱动做成了内核驱动而已。
3.关于性能问题,说实话,目前为止,除了老外的视频,貌似没几个人见过Linux的飞控方案在跑,不是因为没有,我之前已经说了,是国内玩得转的不多,自然能看到的就不多,进了好几个群都在玩stm32
4.关于实时内核补丁,现在都用官方的,一直在出, ,可以看一下,基本连4.9内核的补丁都有,这东西也没停过。
5.nuttx的work_quee ,在Linux下已经有实现了,所以这就是我不担心实时性的原因。
6.关于实时性的比较,这个不好说,因为之前坛子上出现树莓派的飞行器,都没有使用实时补丁,更不用说使用什么身份来运行了,之前有个带飞行视频的帖子,我跟人家联系过,很多东西该处理都没有处理。
关于额外的程序,这里我不得不说的东西。
如果你用stm32,地面站的图形处理你就麻烦了, 但是用Linux方案的话,实现图像传输更轻更简单
树莓派自身有usb接口,可以用usb摄像头,也可以用csi接口摄像头,因为图传被2.4G ,5.8G 网卡替代了,所以只需要开一个gstreamer的进程,把图像通过UDP方式转发到广播地址上,地面站就能显示图像了。
这是目前最简单的方式,不需要额外图传,不需要额外设备。最关键的是,这类和网络搭边事,是Linux的强项,stm32飞控,去搞gstreamer肯定要死人的,外挂一个树莓派的话,虽然有gstreamer,但是额外带了设备上天了。
我见过的大部分方案,都是裸跑,有的连nuttx都不愿意去碰的。
AdruPilot 官网上,有个类似的东西,飞了老远,图像延时低于0.5秒
我在家里的网络环境下也试过,速度非常不错。把pi变成 网络节点就行了。
本帖最后由 crossa 于
15:27 编辑
Linux 就算用了实时 patch,也不能和裸奔的 stm32 比。这个还是差挺多的。关键是 PX4 在 Linux 是以用户 ...
问题的关键,其实不在于LINUX,而在于任务怎么调度,给多少时间片给高优先级程序。
仔细看一下px4firmware的nuttx驱动部分,一样是任务队列。那么问题来了
nuttx也是多任务系统,肯定也不同于单任务跑,那么任务按队列顺序来执行的时候,操作系统自身不可能一直是挂起的状态。
pixhawk只要刷了px4firmware的固件,一定是有nuttx,不可能是单独一个程序在板子上直接跑
所以,问题的关键就来了,就是Linux 的下,如何确保px4固件抢占式运行。
如果按照内核的默认配置,这一点你就别想了,因为默认运行模式是为服务设计的,为的就是长时间不重启,不崩溃而设计的,所以基本上这几年服务器领域里,基本上没有windows什么事,嵌入式领域里,也慢慢清一色linux了,要么就是nuttx。
那么必然是要把打完实时补丁,然后变成抢占任务模式,增加程序的运行时间分配来增加实时性。
之前坛子上的案例我看了,我可以确定的是,那俩都没打实时补丁。而且我说过打了实时补丁未必真的是按抢占式来运行了,也就是说未必确保实时,道理很简单,默认的飞控程序,只需要读写i2c和spi设备,这个用默认的那个pi用户就能读写,普通用户也可以
但是用普通用户身份启动的话,是不开启抢占的模式的,要增确保实时性,必须用root身份运行飞控程序,就像我之前发的帖子里的东西,几乎飞控占用了大部分系统资源,这才是正常的。所以我可以这么说,之前坛子里的例子,没有太大参考价值。
等我弄玩了看。如果我弄出来,发觉和以前人家弄的不一样,那么事情就很明白了。
至于Linux的实时补丁,说实话,从来没停过
你给我看那个帖子的时候,是Linux3.17的内核,现在同样的,内核实时补丁都出到4.9了
还是那句话,同样是树莓派+Linux 方案的 pxfmini,skyjack,以及navio能在天上飞得不错,而且都是跑得px4firmware,单个树莓派反而跑不好,我就比较怀疑了。
stm32的方案,其实好处也是有的,不是实时性,而是价格(stm32f4除外,那个和树莓派一个价,而且程序调通,能用,也不会比树莓派简单多少,不然不会有人买pixhawk了)。
如果以后的板子,cortex a和conrtex m 核心能放在一个板上,问题就简单了,解决通信问题就行了。因为简单动作 stm32单片机绝对够用了,复杂功能交给arm来处理。
之前帖子一直在审核,在这儿我说一说树莓派能额外做的事。
我上面几个视频里,演示过,我没有数传,我是靠wifi充当通信的。
在有tcp/ip 网络的情况下,图传很容易解决,因为Linux系统下有gstreamer,可以直接把视频流以UDP方式广播到地面站,地面站里就能显示,wifi虽然距离近,但是不表示没有远距离的解决办法。
而且这个streaming,延时非常小,对于树莓派这样的玩意来说,也不占用多少系统资源,但是对于stm32来说,不依赖外部的设备是很吃力的。但是对于树莓派来说,这是小菜一叠的事
目前来看廉价方案,不超过百米的,2.4G凑合凑合,等5G开放了,估计这类方案不是问题了。我当年刚开始上网的时候,就一根电话线,高速网络无异于畅想,无线网络压根国内见不着设备呢,这些肯定都能解决的,时间问题而已。
关于图传:
老外的这个方案其实很顶用。
以未来趋势来看,无人机,应该是飞在天上的网络节点,是个会飞的服务器。
本帖最后由 crossa 于
15:47 编辑
Linux 就算用了实时 patch,也不能和裸奔的 stm32 比。这个还是差挺多的。关键是 PX4 在 Linux 是以用户 ...
唉,回复你的帖子又被审核了。。等放出来把。
关于实时性,简单地说,就是给多少时间片给前台程序。
Linux的实时补丁没停过,一直在更新。
用户模式最大的好处,就是不用担心升级内核后,驱动程序没了。因为Linux类系统的更新,时不时会伴随内核更新的,发行版的厂商,更新内核,修补内核bug也是常事,内核更新,驱动就要跟着内核版本号更新,重新编译。用了用户模式,就不考虑这个问题了
顺便说句,打了实时补丁,未必是表示运行程序就是实时模式,道理很简单,普通用户身份也能启动飞控程序的,但是不是实时的,这一点我已经验证过了
px4firmware在pixhawk上跑得时候,依赖nuttx的,问题是nuttx也是操作系统,任务调度的时候,自身不可能一直挂起。
所以这个Linux的实时性,到底怎么回事已经很清楚了,不光要有实时补丁,还要修改运行模式,重新编译内核。
所以之前坛子里的树莓派飞控案例,都不具备典型性,这些事他们都没去做,所以不用参考他们。默认的内核不是按抢占是任务来的,要弄成抢占的式的,必须重新编译内核。对于每个稍微熟悉点Linux的人来说,这个很easy。而且在去年之后的raspbian系统,已经把发行版自带内核优化成实时、抢占式任务了,不放心的话,自己重新编译下内核而已,10多分钟的事
关于额外的程序,就是我说的图像传输,我现在wifi当数传,距离虽近,但是不表示未来无法突破,5G的网络开放的话,这些估计都不是问题了。当年用电话线上网的时候,无线网都是天方夜谭呢。
wifi的话,Linux自带的gstreamer可以用借助UDP,把图像广播给地面站,而且这个图像延时少,速度快,还不占什么资源,如果stm32要干这个事,难,再买额外的模块吧,单个主机就算无需模块算力也不够
关于图传:
的 pxfmini,navio,erbrain,三个商业飞控,都是基于树莓派+Linux的方案,而且都是用了px4firmware,没道理同样的树莓派,用了近似的环境,单个机器却跑不好别说这个小众哈,主要是国内难买到,只能跨境
唉,回复你的帖子又被审核了。。等放出来把。
关于实时性,简单地说,就是给多少时间片给前台程序。
我的也被审核了。
瞎讨论哈,你说的内核升级驱动没了这个对 STM32 来说不是优势。
STM32 裸奔不会有单单升级内核一说。要刷就firmeare 一起刷。
另外用户进程也还是会碰到升级内核驱动没有了的问题。例如
你的 spi 如果是 module 的话,升级内核没有装 spi module,你
用户程序就打不开 spi 设备。
另外nuttx 那个也是比较 PX4 飞控比较弱的部分,你现在还
要换成更加复杂和不能保证时间的 Linux。Linux 不弱但是
不是特别适合做严格实时的东西。
你用RPi 做飞控比较大的问题是 RPi 没有 4 个硬件 PWM 输出。
你要用软件模拟 PWM 那就比较痛苦,不是很有保证。比较
慢的 LED 可以,马达 pwm 就不好搞。
图传没有必要放到和飞控一起一个核啊。wifi 图传还普遍比
模拟的慢。
我的也被审核了。
瞎讨论哈,你说的内核升级驱动没了这个对 STM32 来说不是优势。
STM32 裸奔不会有单 ...
继续讨论这个问题。
关于PWM输出,其实很简单,俩现成方案
1. 利用树莓派8个空余的引脚,实现内核级PWM,这个方案网上有个现成内核模块,但是就是像我跟你说的,那玩意只能支持到4.1 ,现在的系统普遍已经是4.4内核了,加上考虑到隔离,所以我没用这个方案
2.利用PCA9685 16路舵机模块,这个方案最快捷,而且我现在也是用这个方案,程序已经写完了。只是需要测试而已,如果纯粹驱动PCA9685的花,其实我早就搞定了,还搞了个副产品出来。
3.关于SPI&&和I2c的内核模块,专门为树莓派定制的raspbian系统一定会有这俩模块,否则就称不上嵌入式专用系统,自己编译的内核的话,更不可能少了这俩模块。
4.关于严格时间复杂性,现在的Linux下,经可以做到了。
是这样的,你在前台用用户身份启动飞控程序后,再用ssh再连接一个终端,打开top观察,你会发觉,px4的飞空程序和我的ppmdecode始终在顶端,
如果用的是传统的服务器上用的内核的話,这个东西就不是这样的,这俩进程的排序就会发生变化,top这玩意默认按资源消耗排序的。其实我现在这么一弄,这个Linux基本上跑成nuttx了,只是有些nuttx没有的特性而已
而且飞控的数据,也不是完全严格的时间复杂性,即用单片机,这个东西因为用了orb系统,相当于也是异步处理了。
5. stm32倒是有个明显的优势,就是长时间小计算量的工作,放在stm32上正好,然后再用i2c通信方式提交给飞控主机,你那个超声波其实这么弄就很好的,我那个虽然少一个单片机,但是额外会占用一些后台资源。
6.其实你别觉得这东西没搞头,这东西其实有很大的想象空间。目前,我用的只是 pi zero,这货和老pi一样,一个处理器的。但是新的pi3 b+&&是4核处理器,而且还是64位的,这就意味着浮点数小数点后长度又可以增加了
直接跑64位系统的话,对系统绝对有帮助,而且现在,按照我这个东西的环境设置,4个核里面,1个核跑飞控已经戳戳有余,剩下的3个核,基本可以跑其他东西了,比如视觉处理,ADBS之类。这个可比你那个APM想像空间大多了。
你要是有兴趣,咱们可以合作一把,我弄完了后,出个四核版本的飞行器。要知道,单片机单机模式跑程序,可不支持多CPU啊。不然为啥我要拼命拽着操作系统呢
我的也被审核了。
瞎讨论哈,你说的内核升级驱动没了这个对 STM32 来说不是优势。
STM32 裸奔不会有单 ...
15年前,我刚开始用Linux的时候,还是Linux的时候,还是Linux 2.4时代,那时候还能见到windows的服务器。UNIX还没有全死
15年后的今天,除了水果机,功能机,基本一水的android+linux。
以前我上学的时候,还能见到windows ce,现在不对了,windows 基本上只能在实验室的遗留设备和 消费级电脑上见到。
互联网领域更夸张,基本快见不到windows的服务器了,除非是棋牌游戏之类的特殊领域,所以说Linux当下,不用去考虑这伙好不好用,时间已经证明过了。
为啥 nuttx会出来,说白了也就是给stm32找个合适的系统,有系统,才能做更多以前没法的事。以前好一阵子,arm处理器没有mmu的,还专门搞了个缪C linux出来呢。
Linux下跑飞控不是终点,但是飞行器、其他设备有个系统估计是方向
汽车就是个会跑的服务器,飞行器就是个会飞的服务器。
我的也被审核了。
瞎讨论哈,你说的内核升级驱动没了这个对 STM32 来说不是优势。
STM32 裸奔不会有单 ...
关于wifi图传,我补充一点 ,他们用单片机加模块肯定慢,我见过老外和我用以一样的方式,0.5秒内的延迟,而且是隔了老远的。我估计5G网络一旦开放,这个领域要井喷的
因为这个玩意在一个有系统的机器上,传输一个图像,假设是720p,每秒30帧,单片机编码速度首先就没有树莓派来的快,在加上还要控制wifi。这玩意在树莓派上小菜一叠的事
顺便说句,我上贴提过,新的pi3可是64位的4核处理器,飞控撑死都占不满一个核
【站内推荐】 /2
(活动奖品更新完毕)
玩穿越机和航拍,有一样设备必不可少,那就是图传系统,相信大家都对此不陌生。现在有一款花费不到300元,就能立即拥有一套能够进行分屏显示的5.8G头戴式图传监视系统,同时还自带录像和拍摄功能。下面就请对这个设备感兴趣的朋友和我们一起来深入了解。}

我要回帖

更多关于 ubuntu 编译qt5 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信