[pixhawk笔记]5-uORB消息传递】的更多相关文章

本文主要内容来自于:https://dev.px4.io/en/tutorials/tutorial_hello_sky.html,并对文档中的部分问题进行更正. 本文假设已经建立好开发环境并能正确编译,关于编译过程,可参见本人博客中的[pixhawk笔记]1-编译过程. 程序员学习一门语言时第一个例子一般是学习怎么写一个“Hello World”,本文中的简单程序就是类似于该功能,能够让读者搞明白如何实现一个px4程序. 最小程序进入Firmware/src/examples/目录,在px4_…
本文主要内容翻译自官方文档:https://dev.px4.io/en/middleware/uorb.html 在前一篇笔记中使用uORB完成消息传递,实现了一个简单示例程序,本文将对uORB进行系统学习. uORB是一种异步发布(publish)/订阅(subscribe)机制的消息API,该机制用于在线程/进程之间通信.uORB在其他程序启动之前自动启动,因为其他很多程序依赖于他. 使用uorb start命令启动它,可以使用uorb_tests开始单元测试. 加入一个新主题可以在msg/…
本文中将结合代码.文档及注释,给出uORB执行流程及关键函数的解析,由于uORB的机制实现较为复杂,所以本文主要学习如何使用uORB的接口来实现通信.回到上一篇笔记中的代码: #include <px4_config.h> #include <px4_tasks.h> #include <px4_posix.h> #include <unistd.h> #include <stdio.h> #include <poll.h> #inc…
在Effective Objective-C 2.0 – 52 Specific Ways to Improve Your iOS and OS X Programs一书中,tip 11主要讲述了Objective-C中的消息传递机制.这也是Objective-C在C的基础上,做的最基础也是最重要的封装. Static Binding And Dynamic Binding C中的函数调用方式,是使用的静态绑定(static binding),即在编译期就能决定运行时所应调用的函数.而在Obje…
通过半物理仿真,可以在不试飞的情况下对飞控的软硬件进行部分验证,下面结合文档对半物理仿真环境的搭建和运行进行学习.先跑起来再说. Pixhawk支持多轴和固定翼的仿真,多轴用jMavSim,固定翼用XPlane或者FlightGear. 本文主要学习用jMavSim进行多轴仿真的. 官网教程给出的是先打开jMavSim进行连接,再打开QGC,但是前提是你已经在QGC里设置好了Pixhawk,所以本文从设置开始. 打开QGroundControl按官网教程需要设置,笔者发现用QGC做四轴的HIL仿…
前一篇学习了uORB,用于px4中各个模块的进程间通信,下来学习MAVLink,用于飞控和地面站之间的通信.教程中主要给出了使用MAVLink的发送和接收消息的方法.完整的MAVLink消息列表见该网页. 创建一个自定义MAVLink消息假设存在/msg/ca_trajectory.msg定义了ca_trajectory的uORB主题.(笔者下载到的代码中没有自定义的ca_trajectory主题)如果没有,自行在/msg文件夹下面添加ca_trajectory.msg,笔者添加内容如下(该内容…
本文主要内容翻译自:https://dev.px4.io/en/concept/architecture.html 总体架构: PX4代码由两层组成:PX4飞行栈和PX4中间件.其中,前者是一套飞行控制软件,后者是一套通用的机器人中间件,可以支持任意类型的自主机器人. PX4代码具有很强的通用性,所有类型的机架(实际上包括船和地面车辆等)可以使用同一套代码库,同时其追求模块化,具有以下特点: 所有的功能都被拆分为可更换的组件 通过异步消息传输来实现通信 系统可以处理多种类型的负载 处于模块化考虑…
本文翻译自px4官方开发文档:https://dev.px4.io/en/concept/flight_modes.html  ,有不对之处,敬请指正. pixhawk的飞行模式如下: MANUAL(手动模式) 固定翼/车/船 MANUAL(手动模式):飞手控制输入直接到输出混控器 STABILIZED(增稳模式):飞手控制作为俯仰和滚转角度指令和手动的偏航指令(角度or速率?) 多轴 ACRO(特技模式):飞手输入直接到滚转.俯仰和偏航速率指令,油门直接到输出混控器 RATTITUDE(觉得是…
好久没有编译过PIXHAWK了,由于项目需要,又买了一个pixhawk2,由于每次编译都会出现新的问题,这次写帖子将过程记录下来. 环境:WIN10+Ubuntu16.04 64位(VMware Workstation 12 Pro虚拟机). 基本按照pixhawk的Devguide里面给的步骤,将遇到的问题和解决方法给出,希望能帮助到遇到这些问题的同学. 使用下列命令将用户加入dialout用户组: sudo usermod -a -G dialout $USER 然后,下载并运行工具链安装脚…
先说为什么须要Handler: Android的主线程又叫UI线程,用于处理与UI相关的时间.Android仅仅同意在主线程中改动UI组件,当我们在其它线程中须要改动UI界面时.就须要发送消息到主线程,再由主线程来处理UI的改动事件. 在UI线程中运行耗时操作或网络操作,否则会抛出ANR ("Application Not Responding")异常或NetworkOnMainThreadExceptionwill异常. 在这些时候.我们用Handler来进行消息的传递和处理. 以下…
由于项目需要做基于Simulink的PX4二次开发,在Windows下面做,所以需要在Windows下查看PX4的代码,故写该文档,记录环境安装和配置过程.按照该网页安装工具链:Windows Installation Instructions. 安装后用工具链中的eclipse查看代码,由于只是在windows下面查看代码,而固件开发还是在ubuntu下面做,所以只安装工具链,不安装驱动也可以.笔者的系统是win10 64位,但是安装了工具链之后,发现安装eclipse打开会报java运行环境…
该文是 objc_msgSend消息传递学习笔记 – 对象方法消息传递流程 的基础上继续探究源码,请先阅读上文. 消息转发机制(message forwarding) Objective-C 在调用对象方法的时候,是通过消息传递机制来查询且执行方法.如果想令该类能够理解并执行方法,必须以程序代码实现出对应方法.但是,在编译期间向类发送了无法解读的消息并不会报错,因为在 runtime 时期可以继续向类添加方法,所以编译器在编译时还无法确认类中是否已经实现了消息方法. 当对象接受到无法解读的消息后…
Akka学习笔记系列文章: <Akka学习笔记:ACTORS介绍> <Akka学习笔记:Actor消息传递(1)> <Akka学习笔记:Actor消息传递(2)> <Akka学习笔记:日志> <Akka学习笔记:测试Actors> <Akka学习笔记:Actor消息处理-请求和响应(1) > <Akka学习笔记:Actor消息处理-请求和响应(2) > <Akka学习笔记:ActorSystem(配置)> &l…
内容摘要:Android Handler消息传递机制的学习总结.问题记录 Handler消息传递机制的目的: 1.实现线程间通信(如:Android平台只允许主线程(UI线程)修改Activity里的UI组件,而实际开发时会遇到新开的线程要改变界面组件属性的情况,这时就要有一种办法通知主线程更新UI).Handler消息传递机制可用于线程间传递消息. 2.实现消息的异步处理. 机制的实现:(工作原理涉及Handler.Looper.Message(消息).MessageQueue(消息队列):代…
PX4/Pixhawk的软件体系结构主要被分为四个层次 应用程序的API:这个接口提供给应用程序开发人员,此API旨在尽可能的精简.扁平及隐藏其复杂性 应用程序框架:这是为操作基础飞行控制的默认程序集(节点) 库:这一层包含了所有的系统库和基本交通控制的函数 操作系统:提供硬件驱动程序.网络.UAVCAN和故障安全系统   uORB(Micro Object Request Broker,微对象请求代理器)是PX4/Pixhawk系统中非常重要且关键的一个模块,它肩负了整个系统的数据传输任务,所…
首先,让我们来看几个内建函数 (cons x y),作用是把x和y绑定成一个序对 (car z),作用是提取z序对的第一个元素 (cdr z),作用是提取z序对的第二个元素 容易看出,这个东西有点类似OO语言里的类,car和cdr是get方法,x和y是成员变量. 但是,但是! 函数式的编程方式,居然可以利用过程来实现这三个函数!实在是不可思议 下面具体看看实现的过程 (define (cons x y) (lambda (m) (m x y))) (define (car z) (z (lamb…
首先参考了以下几篇博客 博客1:https://zhuanlan.zhihu.com/p/25198079 博客2:http://blog.csdn.net/oqqenvy12/article/details/52035127 博客3:http://blog.csdn.net/whyscience/article/details/52424364 1. 开始还傻傻的装git,其实不必,其实PX4 Toolchain Installer已经集成了git. 2. 装好环境编译出现以下错误,不知所措·…
什么是Handler 之前说过了,Android不允许主线程(MainThread)外的线程(WorkerThread)去修改UI组件,但是又不能把所有的更新UI的操作都放在主线程中去(会造成ANR),那么只能单独启动一个子线程(WorkerThread)去处理,处理完成之后,将结果通知给UI主线程,子线程和主线程的通信就用到了Handler. Handler.Looper和MessageQueue的基本原理 先看一下他们的职责: Handler——处理者,负责发送以及处理Message. Me…
Spark存储管理(读书笔记) 转载请注明出处:http://www.cnblogs.com/BYRans/ Spark的存储管理 RDD的存放和管理都是由Spark的存储管理模块实现和管理的.本文从架构和功能两个角度对Spark的存储管理模块进行介绍. 架构角度 从架构角度,存储管理模块主要分为以下两层: 通信层:存储管理模块采用的是主从结构来实现通信层,主节点和从节点之间传输控制信息.状态信息. 存储层:存储管理模块需要把数据存储到硬盘或者内存中,必要时还需要复制到远端,这些操作由存储层来实…
一◐ java概述                                                                                        1.1 Java的不同版本:J2SE.J2EE.J2ME的区别                                                  1998年12月,SUN公司发布了Java 1.2,开始使用“Java 2” 这一名称,目前我们已经很少使用1.2之前的版本,所以通常所说的Ja…
最开始使用CI框架的时候,就打算写一个CI源码阅读的笔记系列,可惜虎头蛇尾,一直没有行动.最近项目少,总算是有了一些时间去写一些东西.于是准备将之前的一些笔记和经验记录下来,一方面权作备忘,另一方面时刻提醒自己:借鉴和学习才有出路,忘记过去意味着背叛! 基本术语说明 在本文开始之前,有必要对文中反复出现的术语做一个简单的说明,如果你对这一部分已经熟谙,完全可以略过.本文中反复出现和提及的术语包括: 前端控制器(Front Controller): 用于集中控制用户的所有请求的组件,将用户的请求发…
<Linux内核设计与实现>课本学习笔记 By20135203齐岳 一.Linux内核简介 Unix内核的特点 Unix很简洁,所提供的系统调用都有很明确的设计目的. Unix中一切皆文件,对数据和设备的操作都是通过一套相同的系统调用接口进行的. Unix内核和相关的系统工具都是用C语言编写成的. Unix进程创建非常迅速. Unix提供了一套简单而稳定的进程间通信原语. Unix现在已经发展为一个支持抢占式多任务.多线程.虚拟内存.换页.动态链接和TCP/IP网络的现代化操作系统. 操作系统…
背景 WCF这个词语一直不陌生,以前也使用过多次在实际的项目中,但是一直没有时间来做个系统的学习,最近抽点时间,看看 蒋金楠的<WCF全面解析>学习下,顺带做些笔记,如有错误,欢迎各路大神指正. 本章意在对Windows通信编程涉及到的相关词汇进行一个大概的理解不深究. 参考:http://baike.baidu.com/view/1140438.htm?fr=aladdin(不得不说百度百科,维基百科等资料很丰富),<WCF全面解析>. WCF介绍 Windows Communi…
继续学习windows 中和线程有关系的数据结构: ETHREAD.KTHREAD.TEB 1. 相关阅读材料 <windows 内核原理与实现> --- 潘爱民 2. 数据结构分析 我们知道,windows内核中的执行体层负责各种与管理和策略相关的功能,而内核层(微内核)实现了操作系统的核心机制.进程和线程在这两层上都有对应的数据结构.我们先从执行体层的ETHREAD开始. 一.  ETHREAD ETHREAD(执行体线程块)是执行体层上的线程对象的数据结构.在windows内核中,每个进…
摘要:DBus作为一个轻量级的IPC被越来越多的平台接受,在MeeGo中DBus也是主要的进程间通信方式,这个笔记将从基本概念开始记录笔者学习DBus的过程 [1] DBus学习笔记一:DBus学习的一些参考资料[2] DBus学习笔记二:什么是DBus?[3] DBus学习笔记三:DBus的一些基本概念 一些基本概念的解释和翻译:http://blog.mcuol.com/User/AT91RM9200/Article/12816_1.htmhttp://www.cnblogs.com/wzh…
React笔记 React 数据决定DOM 以往的做法是通过JS去操作DOM 将数据填充 JSX Jsx javascript xml HTML的结构组装到js中 jsx使用style的时候 不能直接使用style="" 而是通过{} 的方式 style={{width: this.state.ele_w, height: this.state.ele_h}} React生命周期 每一个功能可以认为是一个React组件 不可变的设置为 property 可变的设置为state 一个组件…
原创文章,转载请注明:Linux内核学习笔记-1.简介和入门 By Lucio.Yang 部分内容来自:Linux Kernel Development(Third Edition),Robert Love,陈莉君等译. 1.操作系统和内核简介 Linux内核是自由公开软件,使用GNU的General Public License(GPL)第二版作为限制条款.大多数软件许可证决意剥夺你共享和修改软件的自由.相比之下,GNU通用公共许可证试图保证你共享和修改自由软件的自由. 通常一个内核负责响应中…
AKKA学习笔记总结 01. AKKA 1. 介绍: Akka基于Actor模型,提供了一个用于构建可扩展的(Scalable).弹性的(Resilient).快速响应的(Responsive)应用程序的平台. 2. Spark中的RPC 目前大多数的分布式架构底层通信都是通过RPC(进程间通信)实现的,比如Hadoop项目的RPC通信框架,但是Hadoop在设计之初就是为了运行长达数小时的批量而设计的,在某些极端的情况下,任务提交的延迟很高,所有Hadoop的RPC显得有些笨重. Spark…
学习android的intent,将其中的一些总结,整理的笔记记录于此. intent是一个消息传递对象,可以在不同组件间传递数据.Activity,Service,Broadcast Receiver中都会用到. 参考链接 https://developer.android.com/guide/components/intents-filters.html?hl=zh-cn#Receiving https://www.tutorialspoint.com/android/android_int…
内容来源:高成珍.钟元生<Android编程经典案例>学习笔记 表格布局——TableLayout 表格布局以行和列的方式来管理界面的布局,但并不能明确声明包含几行几列.可通过TableRow来增加行,然后再在其中添加其他控件 表格的常用属性: android:collapseClolumns---------隐藏指定的列 android:shrinkColumns:----------压缩指定的列 android:stretchColumns----------扩展指定的列 android:…