po上我使用到的硬件和开发环境
px4硬件:某宝销量最高的pixhawk套件(主机,gps+指南针,数传,pwm转pmm,安全开关,蜂鸣器,电源转换接头)
遥控器:某国产神器
开发环境:虚拟机vm12+ubuntu14
ps:此文章只针对纯代码分析,关于那些个飞机类型啦,硬件什么的我就不多说了,这个得自己去亲身体验才行,切不可贸然飞行,这个还是很危险的!!!!!
还有就是什么Git,Linux,make什么的也不会多说,毕竟只是工具属性。
获得更好支持可以访问http//:px4.io 我知道的大部分来自这个网站。
**************************************************************************************************************/
前面说到px4是基于Nuttx实时操作系统上开发的,那么Nuttx系统是怎么样的呢?px4又是怎么在Nuttx上运行的呢?本篇文章就向大家讲解一下Nuttx实时操作系统的使用。
首先将你的px4硬件同电脑连接(通过usb即可),并按照我在px4原生源码学习(1)所提到的那样,将px4同虚拟机内的ubuntu系统连接上。
切换到px4源码目录
cd Firmware/Tools
运行pythone脚本,同Nuttx的shell通信
./mavlink_shell.py /dev/ttyACM0
我在运行这个python脚本的时候出现了一些问题,可能是脚本中用到了python 的组件pipe,所以你去安装pipe组件,安装组件的时候还是会出问题,你把那个问题百度一下安装缺少的依赖包,再去安装pipe就可以了
如果一切正常你应该可以看到以下画面:
熟悉linux的朋友应该能够猜出这是什么,对!这就是一个类似于linux的shell,因为他是Nuttx的shell,所以叫Nuttx shell,简称nsh。它的作用和其它操作系统的命令行没什么区别,都是用来对系统进行操作用的,敲击相应的命令,完成对应得任务,是一个很好的用户界面(知道操作系统的强大了吧!这是个在stm32上跑的系统,他还自带shell!),所以看px4代码千万不要有单片机main(),init(),while(1)的思维,要站在操作系统层面看待px4。
下面我就具体来讲讲这个nsh的使用:
用过shell的朋友,肯定会想到我先打个help试试:
从截图(截图并不完整)中我们可以看到我们输入help后的结果
首先是这些:
一看就知道了,这是nsh的命令,用过linux的应该很快就知道这些命令的意义了,像什么ls,cd,pwd,echo,rm啦都是在linux上经常使用的命令。事实上在Nuttx系统中这些命令的功能和在其他类Unix系统中是差不多的(因为确实有些命令功能不是那么强大,有些许不同)。如果有些命令你觉得功能不是很清楚,可以通过查看Nuttx实时操作系统的官网中Nuttx shell手册,查看详细功能(全英文)
po上地址:http://nuttx.org/doku.php?id=documentation:nuttshell
拉到网页最下面可以看到索引。
那么Builtin App又是什么鬼呢?
其实就是Nuttx的一些内建程序,这些程序中大部分是px4团队为飞控写的控制程序(所以px4飞控不是一个单独的程序,而是由这几十个程序构成,每个程序功能明确!)
下面我们就随便挑一个程序讲讲,比如ver,这是个判断硬件版本的程序。
在nsh界面中输入ver,可以看到下面的输出,说我们缺少运行所带的参数,让我么输入相应参数
我们就在输入:ver hw ,它就会输出板子的硬件版本
你可以试试其它程序,过程都是一样的,有的要带参数,有的不要,可以试试看,不会出什么问题的。
还有一个比较重要的东西,我觉得我应该交代一下,就是Nuttx的文件系统,我们可以通过命令来查看Nuttx系统中有哪些文件。
nsh界面输入:ls
可以看到输出了4个文件夹,因为篇幅原因,我就不过多讲解了,主要讲讲这四个文件夹是做什么用的
dev文件夹下面是被系统抽象出来的驱动,你通过cd命令进去看,可以看到里面的文件都是对应硬件的名字,这也就是第二篇所讲的一切皆文件,通过读取这些文件就可以获取传感器和其它I/O设备的数据了。
etc文件夹是用户的是一些配置文件,和一些执行脚本(nsh执行的脚本),里面还有一些很重要的东西,后面我会讲到。
fs文件夹下面一个重要的文件夹就是microsd,这个就是px4硬件上的那张内存卡,他就被系统挂载在/fs/microsd下。
obj文件夹下面是px4团队为Nuttx开发的一个类似于操作系统进程通信的东西,就是那个uorb(这个我也会在后面单独介绍一下,目前还不是很了解),你目前可以把里面的文件理解是用来供不同进程间通信的文件就好(类似于linux的管道文件)。
下一篇我将讲解如何为Nuttx编写一个我们程序猿入门一个平台的都会编写的程序。