资源预览内容
第1页 / 共72页
第2页 / 共72页
第3页 / 共72页
第4页 / 共72页
第5页 / 共72页
第6页 / 共72页
第7页 / 共72页
第8页 / 共72页
第9页 / 共72页
第10页 / 共72页
亲,该文档总共72页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
PX4 Pixhawk 程序研究笔记 编译环境建立编译环境建立 参考链接:http:/pixhawk.org/dev/toolchain_installation_win 1、首先确保电脑安装了 Java 运行环境。 2、下载并安装 PX4 Toolchain,链 接:http:/pixhawk.org/firmware/downloads#px4_arm_toolchain 3、在开始菜单中选择:PX4 Toolchain - PX4 Software download 来获取一个 初始软件设置。它会在安装路径下(默认为 C:px4)下载如下文件夹: px4 Firmware PX4 firmware (for all modules), includes MAVLink NuttX The NuttX Real Time Operating System (RTOS) libopencm3 Optional: Open Source Cortex Mx library, used only in the bootloaders Bootloader Optional: Bootloaders, does normally not need to be touched 4、配置 Eclipse,开始菜单 - 所有程序 PX4 Toolchain - PX4 Eclipse 默认的 workspace 路径是刚好正确的: New Makefile Project with Existing Code: 选择 Cross GCC,并指定文件夹位置为:“c:px4Firmware”。 打开右边的 “Make Target” 并点击 “New Make Target”: 你应当创建如下 Targets: archives builds the NuttX OS all builds the autopilot software (depends on archives) distclean cleans everything, including the NuttX build clean cleans only the application (autopilot) part upload px4fmu-v1_default uploads to PX4FMU v1.x boards upload px4fmu-v2_default uploads to PX4FMU v2.x boards 编译方法: 参考链接:http:/pixhawk.org/dev/flash_px4fmu_win 1、双击 distclean; 2、双击 archives; 3、双击 all; 4、 双击 upload px4fmu-v1_default (PX4) 或 upload px4fmu-v2_default (Pixhawk) 来上传固件。 注意:只有在 Nuttx 更新或者改变时才需要进行”distclean“和”archives“。如 果你只是编辑了 PX4 的程序, 最便捷的办法是直接运行 upload px4fmu-v1_default (PX4)或 upload px4fmu-v2_default(Pixhawk)来编译并上传固件。 Eclipse 使用使用技巧技巧 1、 选中一个函数, 鼠标不动, 0.5 秒后会弹出一个悬浮框显示该函数的定义, 双击该框,会出现滑动条,这时可以使用这个框看此函数的全部定义。以上操作 可以由“F2”键代替。 2、选中一个函数,按“F3”直接跳转到该函数的定义处,而不是通过一个悬 浮框显示。 板载软件结构板载软件结构 PX4 自动驾驶仪软件可分为三大部分: 实时操作系统、 中间件和飞行控制栈。 1. NuttX 实时操作系统 提供 POSIX-style 的用户操作环境(如 printf(), pthreads,/dev/ttyS1,open(),write(),poll(),ioctl(),进行底层的任务调度。 2. PX4 中间件 PX4 中间件运行于操作系统之上,提供设备驱动和一个微对象请求代理 (micro object request broker, uORB)用于驾驶仪上运行的单个任务之间的异步通 信。 3.PX4 飞行控制栈 飞行控制栈可以使用 PX4 的控制软件栈,也可以使用其他的控制软件,如 APM:Plane、APM:Copter,但必须运行于 PX4 中间件之上。 PX4 飞行控制栈遵循 BSD 协议, 可实现多旋翼和固定翼完全自主的航路点飞 行。采用了一套通用的基础代码和通用的飞行管理代码,提供了一种灵活的、结 构化的方法, 可以用相同的航路点和安全状态机来运行不同的固定翼控制器或旋 翼机控制器。 其板载程序结构图如下: 参考链接: http:/pixhawk.org/dev/architecture 上图中每个框表示一个概念上的任务(task) 。图中不是所有模块都是默 认使能的,一些模块是冗余的,比如当姿态控制(attitude control)活动时,位 置控制 (position control) 是不活动的。 浅灰色的框表示作为主模块 (main blocks) 接口的关键外设。图中许多模块被作为单独的任务(tasks)来完成的,不同任务 间通过“inter process communication”来通信。 源程序文件源程序文件说明说明 本章列举源程序中各个文件夹、各个 C、CPP 文件以及头文件的作用。 src/lib/geo/geo.c 该文件定义的所有与地球坐标系相关的函数(geo: geodesic,测地学的) 。提供了与经纬度、地图坐标、坐标系翻转等相关 的函数。 src/lib/launchdetection 中包含了自动降落相关的程序。 src/modules/commonder 文件夹包含了所有的与地面站相关的命令: commonder.cpp 为主要程序,同时该文件夹中还包含了加速度计校准、 空速计校准、磁罗盘校准、遥控器校准等程序。 src/modules/uORB 中包含了与 uORB 相关的程序。 src/modules/px4iofirmware 中包含了 STM32F103 那个单片机的源程序, 它编译后的结果将作为 ROM 存储在 FMU(STM32F427)单片机的固件 中,位于程序文件系统的 etc/extras/px4io-v2_default.bin 中。 src/modules/dataman 中包含了与数据管理相关的函数。 src/systemcmds/param 包含了与系统参数相关的程序,这些参数包含机 架类型、各种 PID 以及各种设置等参数。 src/ROMFS/px4fmu_common/init.d 包含了系统其中的各种脚本,其中最 下面的“rcS”为主脚本,系统流程启动以它为准,同时它内部还会不断调 用其他子脚本(如 rc.sensors 脚本,对应各种传感器,其调用命令为: sh /etc/init.d/rc.sensors) 。通读“rcS”脚本文件,即可明白 PX4 的启动和运 行流程 进程间通信(进程间通信(uORB) 参考链接:http:/blog.arm.so/docs/183-0503.html uORB 是 Pixhawk 系统中非常重要且关键的一个模块,它肩负了整个系统的 数据传输任务, 所有的传感器数据、 GPS、 PPM信号等都要从芯片获取后通过uORB 进行传输到各个模块进行计算处理。 uORB 的架构简述:uORB 全称为 micro object request broker (uORB),即“微 对象请求代理器” ,实际上 uORB 是一套跨进程的 IPC 通讯模块。在 Pixhawk 中, 所有的功能被独立以进程模块为单位进行实现并工作。 而进程间的数据交互就由 为重要,必须要能够符合实时、有序的特点。 Pixhawk 使用 NuttX 实时 ARM 系统, 而 uORB 对于 NuttX 而言,它仅仅是 一个普通的文件设备对象,这个设备支持 Open、Close、Read、Write、Ioctl 以及 Poll 机制。 通过这些接口的实现,uORB 提供了一套“点对多”的跨进程广播通 讯机制, “点”指的是通讯消息的“源” , “多”指的是一个源可以有多个用户 来接收、处理。而“源”与“用户”的关系在于,源不需要去考虑用户是否可以 收到某条被广播的消息或什么时候收到这条消息。 它只需要单纯的把要广播的数 据推送到 uORB 的消息“总线”上。对于用户而言,源推送了多少次的消息也不 重要,重要的是取回最新的这条消息。 uORB 实际上是多个进程打开同一个设备文件,进程间通过此文件节点进行 数据交互和共享。 uORB 的系统实现: uORB 的实现位于固件源码的 src/modules/uORB/uORB.cpp 文件, 它通过重载 CDev 基类来组织一个 uORB 的设备实例。并且完成 Read/Write 等功能的重载。 uORB 的入口点是 uorb_main 函数,在这里它检查 uORB 的启动参数来完成对应 的功能,uORB 支持 start/test/status 这 3 条启动参数,在 Pixhawk 的 rcS 启动脚 本中,使用 start 参数来进行初始化,其他 2 个参数分别用来进行 uORB 功能的 自检和列出 uORB 的当前状态。 在 rcS 中使用 start 参数启动 uORB 后, uORB 会创建并初始化它的设备实例, 其中的实现大部分都在 CDev 基类完成。这个过程类似于 Linux 设备驱动中的 Probe 函数,或者 Windows 内核的 DriverEntry,通过 init 调用完成设备的创建, 节点注册以及派遣例程的设置等。 * 下面是官网资料 * 参考链接:http:/pixhawk.org/dev/shared_object_communication 进程(process)/程序(application)间通信(如将传感器信息从传感器 app 传送到姿态滤波 app)是 PX4 程序结构的核心部分。进程(process,在此处被称 作 nodes)通过被命名的总线(buses,在此处被称作 topic)交换信息。在 PX4 中,一个 topic 只包含一种信息类型,比如,vehicle_attitude 这个 topic 将一个 包含姿态结构体(roll、pitch、yaw)的信息传送出去。Nodes 可以在 bus/topic 上 publish(发布)一个信息(即发送数据) ,也可以向一个 bus/topic subscribe (订阅)信息(即接收数据) 。它们(Nodes)并不知道它们在跟谁通信。一个 topic 可以面向多个 publishers(发布者)和多个 subscribers(订阅者) 。这种方式 可以避免死锁问题,在机器人中很常见。为达到有效率,在 bus/topic 中,永远 只有一个信息被传送,没有保持队列之说(即新来的信息会覆盖之前的信息,不 存在有一串信息排队的情况) 。 这个发布/订阅 (publisher / subscriber)机制是通过微对象请求代理(micro object request broker,简称 uORB)来实现的。 系统已存的 topics 通过 Doxygen 工具自动生成了文档,其链接为: https:/pixhawk.ethz.ch/docs/group_topics.html 下面是关于 p
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号