- 博客(15)
- 资源 (1)
- 收藏
- 关注
原创 云台/稳定器/无人机姿态控制之欧拉角与四元数控制优缺点分析
然后再做坐标转换,变成基于机体坐标系的目标转速b_pitch_rate,b_roll_rate,b_yaw_rate。对于云台/稳定器来说,采用四元数控制需要仔细斟酌了,优点和缺点都很明显,且云台的业务逻辑比无人机要复杂很多,各种工作模式与姿态相互掺杂,如果采用四元数需要对四元数的旋转理解比较透彻才行。2. 对于旋转类型的业务,如:非正交姿态(roll 不是 0° ,90°, 180°)情况的旋转实现较为复杂,如果:云台/稳定器的全跟随业务,要计算出目标姿态角比较麻烦。所以对MCU有要求。
2023-10-23 15:09:21
966
2
原创 从零开始做手机云台/稳定器
最近完成手机云台/稳定器的产品化,特意记录整个手机云台的开发过程 (内容持续细化中...)一. 电机驱动篇硬件描述: 直流无刷电机,7对极,控制板mcu为stm32f0。驱动方式: FOC 控制,驱动板采样两路电流,并配置有编码器。网上针对FOC的控制文章较多,做起来也不难,在这里主要记录驱动编写的过程及关键点。1. 首先是编码器的问题,手头的AS5600 编码器,采用SP...
2018-09-17 15:13:28
19399
24
原创 linux备忘录之- wifi网络通讯数据流程(重点80211)
记录数据从网卡(无线)驱动到用户层的函数调用过程。前置一些数据结构和操作函数:struct sk_buff 结构 和dev_alloc_skb 函数 ,网上有人对他进行了详细描述,一下为拷贝网上的描述:sk_buff结构的成员skb->head指向一个已分配的空间的头部,即申请到的整个缓冲区的头,skb->end指向该空间的尾部,这两个成员指针从空间创建之后,就不能被修改。skb->
2016-10-24 17:26:34
2247
2
原创 APM 姿态抗风(干扰 突变) 优化处理
问题描述:将amp 移植到stm32 平台后,loop执行频率 可以达到400hz,且可以使用卡尔曼滤波,飞行效果还可以,但gps 定点飞行时发现:有突变风的时候机体容易出现轻微摇晃,和大僵的对比,小动作明显多些,感觉没法接受。同样的情况,在室内飞行时,飞机容易发生加速平移,加大积分参数后加速平移现象可以得到有效抑制,但新的情况:出现不稳定气流时,机体同样出现轻微摇晃,小动作频繁。经过数据
2016-05-11 20:57:37
5417
3
原创 APM源码分析之 油门跟踪
这篇文章的目的是跟踪从遥控到电机输出的过程,已定高模式为例。代码结构油门电机输出AP_Motors:: set_throttle: _rc_throttle.servo_outAP_Motors::output()->output_armed()->_rc_throttle.calc_pwm():_rc_throttle.radio_out油门量计算(定高模式)targ
2015-08-15 20:45:02
4231
原创 APM源码分析之 主流程
程序主流程 AP_HAL_MAIN(main 函数定义) hal.init(0, NULL)(执行 HAL_AVR_APM2::init) scheduler->init 调度模块初始化uartA->begin(115200, 128, 128) 启动串口 rcin->init 输入初始化 rcout->init 输出初始化
2015-08-15 11:08:59
6075
3
原创 APM源码分析之 姿态控制
姿态数据:AP_AHRS_DCM ahrs(ins, barometer, gps) 读取处理传感器后的姿态数据AP_InertialSensor_MPU6000 ins惯性传感器陀螺仪定时调用_poll_dataà _read_data_transaction 函数,通过spi读取加速度 通过 update 函数 填充 AP_InertialSensor::_acc
2015-08-15 11:07:38
11302
1
原创 最新 tp的逆向
废话少说,在这里聊聊新tp 与旧tp 的区别在结构上区别很大,旧版本是直接通过服务接口加载,而新版本是先通过服务接口加载一个母驱动,然后再将经过加密的驱动代码从ring3下载到ring0.细节方面:1.母驱动有代码校验功能,双机调试时,任何断点都会导致99999999错误,这个校验函数很容易就能找到。2.会在好几个地方检测 KdEnteredDebugger 变量,如果发现KdEn
2014-03-02 13:15:10
2068
原创 扒光tp后的一些感想
完成对tp的跟踪后有一些感触tp不愧为游戏保护中的软柿子,它对自己的保护除了反调试之外,就是汇编花指令了(我称他代码混淆),对我个人来说,最麻烦的就是他的代码混淆了,经历过他两种完全不同的混淆方式,最开始的比较简单,就是一大段循环,循环的出口就是要调用的函数,规律很好找,每次跳出循环时esi edi 寄存器的值都一样,当时就笑骂腾讯的人弱智,后来他们把代码混淆的方式改变了,我没有发现特别容易明
2013-11-12 16:32:16
1634
原创 扒光TP
本文章纯属技术交流,拿来主义勿进 (以下所提供的代码偏移现在肯定已经变化了)本部分采用暴力干掉tp所有的保护措施,实际辅助运行不会采用这种方法第一步: 我们首先要做的是保证双机调试能顺利进行,我用的是两台机机器通过串口调试(大部分人喜欢用虚拟机双机调试,我还是觉得2台机器方便,呵呵)tp 限制双机调试有2个办法的:1 调用KdDisableDebugger,禁止调试,并且检测系
2013-11-12 14:48:31
2759
1
原创 基础几何算法
<br />1. 直线段相交判断<br />根据算法导论上介绍,判断线段相交分为2步,第一步是快速判读,根据2条线段最小矩形是否相交判读,线段是否可能相交。<br />第二不是利用叉积,比如P1,P2 Q1,Q2,是2条线段的4个坐标计算其叉积(P1-Q1)X(Q2-Q1) ,(P2-Q1)X(Q2-Q1),如果2个 <br />叉积值符号一致,说明它们在线段Q1 Q2的同一侧,肯定不会相交,反之就会相交。<br />在实际使用中,一般都没什么问题,但有时候会出现判读失误。不得不重新研究一下,发现,基本线段
2013-11-12 12:03:58
649
原创 自定义 序列化3
<br />现在开始做序列化的读,也即是反序列化,本来为没个序列化的类设计了2个序列化接口函数:<br />//序列化接口<br /> virtual void GetObjectData(CJSerializationInfo* info) {}<br /> virtual void DeSerializationObjectData(CJSerializationInfo* info) {}<br />可突然发现,其实DeSerializationObjectData是没必要存在的,在.net中,每个对
2013-11-12 12:03:28
550
原创 自定义 序列化2
今天可以开始步入序列化的实质阶段了,定义CSerialization作为序列化的入口(持续更新中)class EXPORTED_JHMF CSerialization{public: class ObjectSerializationInfo { public: CJString Name; juint32 TypeID; juint32 Valuetypeid; }; class ObjectSerializationInfos { public: ObjectSerializationInf
2013-11-12 12:03:08
677
原创 自定义 序列化1
<br />使用过微软framework 的人对他的序列化肯定印象深刻,方便性真是没得说了。之前用C#做过一套绘图系统,图形的保存,以及保存后的版本兼容性基本上没费什么时间。后来发现,其实序列化在其他方面应用很多,比如通讯,我只要定义好链路帧格式,其他应用内容都可以交给序列化来做,非常的方便。现在的系统,基于c/c++ 跨平台。这么重要的基础功能也不想基于他看第3方控件。仔细研究了下framewok的序列化机制,决定自己实现。<br />首先,要定位功能,肯定没办法和framework比,毕竟基础和能力在那
2013-11-12 12:02:51
755
原创 QT 开发之旅1
第一天的工作图形编辑器使用多文档结构,所以需要在使用MDI窗口,查了下QT多文档的实现,比较简单:首先建立主窗口MainWindow : public QMainWindow。为了实现MDI,必须创建QWorkspace 对象在构造函数中实现代码 m_workSpace = new QWorkspace; setCentralWidget(m_workSpace); this->setWindowState(Qt::WindowMaximized);这样就可以了。然后定义图形页
2013-11-12 12:02:11
878
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人