Android Native发布广播Intent步骤和原理解析 最近出于工作需要,要在Native层发送广播,参考了网上的一些博客如下其中内容基本大同小异,但是由于Android版本的迭代,目前其中的代码具体来说已经不太适用,笔者这边调试了很久终于通了,本文主要用来记录一下整个调试过程,并且会尽可能说明原理以便读者自己实现。
push_back和emplace_back比较以及vector扩容 push_back和emplace_back比较以及vector扩容push_back和emplace_back的比较使用测试类测试过程将实体类对象传入将右值数字传入将实体类对象move()转右值之后传入vector扩容过程关于这部分内容,也是C++中的老生常谈的问题了,一些最基本的介绍这边也就不再进行了,着重对比一下两者的使用情况,然后再给出结论。C++中push_back和emplace_back的区别push_back和emplace_back的比较使用测试类class Person {
muduo网络库学习总结:基本架构及流程分析 muduo网络库学习:基本架构及流程分析基本架构Basic ReactorMutiple Reactor + ThreadPoolmuduo库的基本使用基本结构介绍EventLoop类Poller类Channel类TcpConnection类Acceptor类TcpServer类流程梳理之前一直在学习陈硕大佬的muduo库,一直考虑找个时间总结一下(不然没过多久全忘光了)。muduo库是一种基于Reactor模型的C++网络库,仅支持Linux平台,相关学习可以参考《Linux 多线程服务器端编程》。
传感器数据融合及姿态估计总结 数据融合及姿态估计总结1. 准备工作2. 原始数据3. 传感器直接估算姿态:3.1 加速度计和磁力计估算角度3.1.1 加速度计解算Roll和Pitch3.1.2 磁力计估算Yaw角参考资料本文主要介绍汇总了利用陀螺仪、加速度计和磁力计进行数据融合并由此实现姿态估算的一些方法,主要包括传感器直接结算、陀螺仪积分、互补滤波、Mahony滤波和EKF方法,每一部分的内容都是笔者亲自推导并且利用MATLAB编写代码实现过的,可以保证一定的准确性。在最后面笔者也都会附上自己参考的一些比较好的文章或者博客地址供
Ardupilot姿态控制详解(完结篇) 本文主要是对过去写的一些APM中姿态控制流程及函数博文的汇总。按照之前写的博文以及个人认为的学习顺序,给出APM姿态控制器的学习顺序如下:APM姿态旋转理论基础Ardupilot姿态控制器 PID控制流程(整定后的P控制器)详解APM的开方控制器sqrt_controllerArdupilot前馈及平滑函数input_euler_angle_roll_pitch_yaw解析Ardupilot倾转分离函数thrust_heading_rotation_anglesArdupilot四元数姿态控制
Ardupilot速率控制器rate_controller_run解析 Ardupilot速率控制器rate_controller_run解析PID速率控制器源码解析rate_controller_run()PID运算积分限制update_i()内容补充:函数中陀螺仪数据的获取rate_controller_run()在APM中是作为PID控制器将输入的期望角速率转换计算得到实际的电机控制指令的。下面将以Copter为例进行讲解。所有无人机的PID速率控制器都是在fast_loop()这个以400Hz频率运行的函数中被实时调用的。而update_flight_mode()
Ardupilot四元数姿态控制函数attitude_controller_run_quat解析 Ardupilot四元数姿态控制函数attitude_controller_run_quat解析源码解析细节讲解thrust_heading_rotation_angles()update_ang_vel_target_from_att_error()角度前馈量旋转解释姿态更新部分在开始阅读本文之前,建议可以先看一下前面几篇博文,当然你基础好直接看也是没事的~详解APM的开方控制器sqrt_controllerArdupilot倾转分离函数thrust_heading_rotation_angles
Ardupilot倾转分离函数thrust_heading_rotation_angles Ardupilot倾转分离函数thrust_heading_rotation_angles什么是轴角分离源码分析一些细节补充效果显示及进一步修改本文主要写一下自己对于APM倾转分离(轴角分离)函数的一些学习笔记及思考。ZING已经很好地分析了APM轴角分离函数,以下是我参考的他的一些博文。[飞控]姿态误差(四)-APM如何计算姿态误差[飞控]倾转分离(一)-APM的倾转分离竟然没有效果?[飞控]倾转分离(补充)-等效旋转矢量(轴角)与旋转矩阵后续分析过程会主要引用来自上面三篇,侵删。什么是轴角
Ardupilot前馈及平滑函数input_euler_angle_roll_pitch_yaw解析 Ardupilot前馈及平滑函数input_euler_angle_roll_pitch_yaw解析源码解析这个函数做了什么部分细节euler_accel_limit()input_shaping_angle()姿态变化率与机体角速度之间的关系本文将以input_euler_angle_roll_pitch_yaw()函数为例,讲解一下APM中的前馈及平滑控制函数,当然其余的类似input_euler_angle_roll_pitch_euler_rate_yaw()等等的函数也是类似的,当学习完这个
详解APM的开方控制器sqrt_controller 前言前面说过,sqrt_controller是对P项进行整定用途的,目的就是让P项的控制响应“软”下来,实际上就是一个经过改进的P控制器。读懂了sqrt_controller,那么你对APM的P控制器就了解得差不多了。仅讨论P控制器,sqrt_controller的作用就是设定一个量linear_dist,以这个量的正负值为分界线划分出一个线性区域范围,在这个范围内表示误差量还很小,遵循Kp*error计算方式输出控制量。超过linear_dist后,表明误差较大,此时不能由着误差单纯按照线性方式乘以
RoboWare Studio安装及ROS支持的IDE 一般官网都是进不去的,所以从下面这个链接下载对应版本RoboWare Studio deb下载地址下载完成后将文件拷贝到home目录下面,我这里下载的是roboware-studio_1.1.0-1514335284_amd64,打开终端输入sudo dpkg -i roboware-studio_1.1.0-1514335284_amd64.deb安装过程中出现用户协议按ESC键然后回车表示同意。如果出现“roboware-studio 依赖于 libgconf-2-4;然而: 未安装软件
APM姿态旋转理论基础 Ardupilot姿态控制器解析(二)—— 理论基础欧拉角阅读源码的过程中发现对于一些基础理论的掌握还是不够深,因此本篇先把一些理论知识部分汇总一下。本博文会持续更新修改,所有引用均会表明出处。欧拉角借一张已经被用烂了的图简单来说一下欧拉角的一些基本概念:欧拉角是利用3次独立的绕轴旋转运动来确定三维空间中的某一刚体姿态;欧拉角可以绕着固定轴(大地坐标系) 和 运动轴(机体坐标系) 两种类型的轴进行旋转,运动过程对于前者称为外旋,后者称为内旋;对于绕轴的顺序,科学界并没有明确的规定,实
Ardupilot姿态控制器 PID控制流程 APM的控制器主要分为attitude姿态控制器和pos位置控制器。这系列文章主要来讲一下姿态控制器内部的实现。本文主要目的是为了解析APM源码然后方便自己将其实现在自己的水下航行器控制器上的,因此将会以ArduCopter和ArduSub为例进行解析,其他无人机类型也是类似的,也可用作参考。一、PID姿态控制器1.1 Copter姿态控制官方原图在真正开始解析源码之前,可以看一下Ardupilot官方网站上开发者手册对于直升机姿态控制器的描述(虽然官方的文档已经很久没更新了,4.x版本之后的..
三维旋转、李群与李代数的一些知识点记录汇总 三维刚体运动、李群与李代数的一些知识点记录一、三维刚体旋转1.1 内积和外积1.2 旋转矩阵、变换矩阵和旋转向量1.2.1 旋转矩阵1.2.2 变换矩阵1.2.3 旋转向量1.3 欧拉角和四元数和姿态解算二、李群与李代数以下内容来源于《视觉SLAM十四讲》以及其他博文内容的汇总,所有出处均会表明。部分内容比较简略,因为写本文的目的是仅做自身学习记录用途,好记性不如烂笔头,方便自己回顾(之前都学过但是现在发现忘得差不多了...),当然如果对大家有帮助那再好不过。一、三维刚体旋转1.1 内积和外积
MAVLINK消息在Ardupilot中的接收和发送过程 MAVLINK消息在Ardupilot中的接收和发送过程SCHED_TASKupdate_receive()update_send()由于现在网上很多的都是APM旧版本的解释,因此把自己的一些学习所得记录下来。截至写博客日期(2020/10/21),本文APM版本为4.0(针对各种车辆的)。SCHED_TASK关于MAVLINK消息在APM中的初始化过程,在之前的博文里面已经写过了:MAVLINK在Ardupilot中的初始化过程。建议先阅读一下,虽然写得不是很完整,但还是能理一下思路的,后面
向Ardupilot中添加新的飞行模式(以ArduSub为例) 本次以ArduSub为例介绍如何向APM固件中添加新的飞行模式以方便后续开发,其他车辆类型操作相似,本篇也可用作参考。参考资料:Adding a New Flight ModeCreating newflight mode in Ardusub首先在ardupilot/ArduSub/文件路径下,新建一个用于添加新的飞行模式的文件control_newMode.cpp。然后,向内部添加代码如下:#include "Sub.h"bool Sub::newmode_init(){ retur
QGC添加自定义组件和发送自定义MAVLINK消息 QGC添加自定义组件并且发送自定义MAVLINK消息一、添加自定义组件1.1 在飞行界面添加组件1.2 实现组件事件1.3 在MOCK模拟链接中实现验证1.4 验证本文实现版本:QGC:Stable_V4.0;QT:5.12.6。下载和安装方式这边就不再赘述。侵删。一、添加自定义组件1.1 在飞行界面添加组件在QGC开发者文档中说明飞行视图的界面实现在FlightDisplayView.qml文件中在FlightDisplayView.qml文件中添加如下,可以在ToolStrip下
SITL Simulation with Mavros 参考资料:Simulating Manual Control using MavrosArduSub S.I.T.LArdupilot SITL Simulator (Software in the Loop)本文简单来说明一下Ardusub在SITL下面配合MAVROS的仿真过程。SITL的相关基础操作和基本命令大伙就自己去看一下官方文档吧。MAVROS的安装这里就不再说了,详情可以看这篇:最新mavros详细安装教程(亲测可行)首先进入到ArduSub路径下cd ardupilot/A