大疆A3、N3、M100飞控ONBOARDSDK二次开发经验分享

2023-05-16

开发流程

步骤一:选择开发方式

先去大疆的开发者网站(https://developer.dji.com/)看资料,我选择的是ONBOARD SDK stm32(图一)
图1

步骤二:观看官方资料

首先要看下Documentation以及API Refence里面的资料(图二),里面介绍了怎么进行二次开发以及大部分API的用法。
图2

步骤三:下载对应软件及代码

根据自己的选择,去Downloads里的ONBOARD SDK下载例程代码以及DJI Assistant 2(图三)。
图3

步骤四:注册获取开发ID和KEY

下载完代码跟软件后,可以看下DoJI voumnion中的Software Setup (图四),需要在开发者网站里面注册一个OSDK application ID and Key pair。
图4

步骤五:将ID与KEY写进代码

打开下载的代码,点击Activate.cpp,将自己的注册的ID跟Key填进去(图五),那么,软件部分其实已经准备好了。
图5

步骤六:硬件连接,使能API控制,写入订阅信息频率

接下来就是准备好STM32F407的板子(如果没有该型号,请自己移植下代码)。按照Documentation 中的Hardware Setup,连接对应的接口。官方例程中是采用串口三与N3飞控进行通讯,串口二与电脑上位机通讯。串口二与电脑通讯,飞控初始化等出现任何问题可以在电脑端看到。因为我使用的板子串口三的接收用作DBUS(硬件取反了),所以我把串口反过来用了。串口二用于与N3通讯,串口三用于与电脑通讯。飞控与板子连接好以后,打开电脑DJI Assistant 2软件,将N3飞控与电脑端连接,在DJI Assistant 2软件,选择机型配置参数等,这个就不说了,自己百度,有很多教程。看下Documentation中的Software Setup,有教程说明怎么配置API模式(图六),使能API控制,并且需要选择你要订阅的信息的频率。
图6
可以看下我的代码,我订阅的一些信息是50HZ的,所以我订阅的信息就在这个软件选择了50HZ。

步骤七:连接上位机,跑官方例程,观看现象

官方代码中的main.cpp中,通过switch选择你要试的例程(图七),
图7
然后此时可以将下载的代码下载至板子中,打开DJI Assistant 2中的模拟器(图八),
图8
可以看到飞机按照预设的轨迹进行飞行。例如官方例程(图九),飞机在虚拟器中会自动起飞距地面1.2米,然后往右边方向飞行6米,再向前飞行6米,然后在回到原始位置并且降落。
图9
飞机飞机如果测试到这里都没问题,那么恭喜你,可以开始做室内定位了。做定位之前,一定要把资料看一下,看下例程的代码是怎么写的,自己花点时间写一下自己想实现的功能,然后可以在模拟器中看飞行效果,模拟器的飞行效果跟实际是差不多的,所以每次写了新东西,需要现在模拟器试试,不要直接上飞机试。

步骤八:光流选型

要做室内定位,那就要去买光流模块以及激光模块。光流模块的话建议不熟悉光流算法的同学购买匿名的光流模块。这款光流已经融合了高度以及加速度计陀螺仪,数据比较好,用起来比较方便。光流数据主要用来水平定位,而激光高度数据要用来修正飞机飞行的高度,因为室内纯气压计定高是不稳。具体实现过程代码已经写明了注释。如果想自己融合光流数据的同学可以购买JL3285A、优象或者PMW3901,具体是实现过程就是使用陀螺仪的角速度数据与光流的像素数据进行融合,使得在原地摇晃光流时,可以用陀螺仪的数据去把光流的数据抵消掉,再把高度的信息加进去融合,将最终的像素变化信息转化为实际cm单位,再将该数据与地理坐标系的加速度计进行融合。这样可以使得飞机在飞行的时候,下方有车子经过不会严重干扰到。

定位思路

  1. 定高思路:室内纯气压定高的话,因为室内的气压不是很稳定,特别是在飞机飞行的过程中,桨叶的风容易干扰到气压计,导致数据突变,出现飞行高度不稳定的现象。GUIDANCE是采用双目加超声波的方法实现的,我们这里采用的是激光,也可以使用市面上的其他的高度传感器。读取激光的高度,油门回中的时候记住此时激光高度。然后使用PID进行闭环控制,将最终的结果控制飞机的垂直速度(使用SDK中的垂直速度控制API)。为了避免飞机飞过一些不平坦的地方,飞行高度变化太过于剧烈,可以使用激光高度的变化率,当变化过大时,削弱激光修正高度的系数,并且当重新稳定的时候再次确定高度。

  2. 定点思路:从光流模块中,可以得到光流的速度数据,可以通过定时器计算前后二次数据的时间间隔,然后将速度进行积分,得到距离,再将速度以及距离进行闭环控制,将最终的结果当飞机的目标角度传入API中。另外,在飞行过程中关掉光流的作用,当遥控杆子回中的时候,把目标速度变为0,此时不要外环位置环的作用,可以达到刹车稳定的目标。当刹车后速度在一个小范围内,就重新加入位置环,并且把目前的位置当为目标位置。

注意:不一定要使用光流,也可以试试其他方法。例如沈老师的vins开源算法+Realsense+manifold2.
网址 https://zhuanlan.zhihu.com/p/59646674

SDK开发注意事项

  1. STM32的板子初始化后要先等待一段时间,可以在初始化中加延时,或者等飞控成功启动再给板子上电,否则通讯会不成功。
  2. 之前出现过飞控的控制权被抢回去,自己还不知道,所以大家需要给飞机装个灯或者其他东西,进入SDK模式的时候,可以通过亮灯的形式来提醒飞手。同样需要写一个功能,就是可以通过掰动遥控杆子进入或退出SDK模式,当自己写的东西出错的时候,遥控可以立马夺回板子的控制权。
  3. 在给飞控增加新功能时,要注意一定要在模拟器中先验证一下,不能直接拿飞机飞行验证。(在模拟器中,如果不进入SDK模式,是默认GPS定位的。比如自己写了光流定位的代码,可以掰动摇杆进入SDK模式,此时因为飞机的定位信息来自光流模块的信息,而不是模拟器中虚拟的GPS信息,所以模拟器中的飞机会慢慢飘走,并且飞行过程不会刹车。你可以手动移动一下真实的飞机,那么此时光流就会有移动的数据,模拟器中的飞机就会朝你移动的反方向一直移动,当你把真实的飞机移动回原来的位置,那么虚拟器中的飞机就会停下来,这样说明定位思路是正确的,才可以拿出去外面试试。定高修正的思路也是一样的,目标高度确定了,当你拿起真实飞机的时候,模拟器中的飞机肯定是一直下降,除非你回到之前的位置,它才会停下来)
  4. 建议大家可以先用小一点的飞机调试(f330或者f450),等调试稳定才再上大飞机,大四轴有点危险,调试还是命要紧,同样钱也重要,所以买小的来玩玩。
  5. 无论是想在飞机上开发什么功能,要先在DJI Assistant2软件上把飞控原本的参数调试到最佳,不然其他就白做了,本人原先在f450上做好定位功能,整套拆下来装到大四轴的时候,大四轴飞起来软绵绵的。并且大四轴重量变化较大时,飞控原本的参数也就没用了,所以大家要调好参数(基础感度,动力带宽,姿态感度,具体可以参考https://www.iqiyi.com/v_19rrari2fo.html),使得飞机在定高模式飞行时姿态平稳,没有抖动,原先就是没有注意这个问题,以为是定位问题,浪费了很多时间。
  6. 使用API的时候,要注意API可以根据自己的需求改动,原先的API是当你想控制飞机的姿态角度的时候,那么垂直方向只能控制高度。当你想控制垂直方向的速度时,那么姿态角就只能控制角速度,因为垂直方向用高度信息还有YAW用角度控制的话,飞行效果不是很好,有点迟钝,想用速度控制二个API就矛盾了(可以从模拟器中看出),写了很多代码才实现,后面发现可以直接改API,方便了很多,我把PITCH,ROLL改成角度控制,而YAW以及高度采用角速度和速度控制(图十),飞起来就比较顺手,反应比之前灵敏(也可能是我自己不会用,我感觉原先的API应该是给自动飞行设计的)。
    图10
  7. 光流的安装方式也会影响到飞行效果,一般的光流都是需要装在飞机的正下方,如果没有装正下方的话需要自己去修正,如果用匿名光流的话,需要你自己细看一下手册,直接在上位机上设置就可以了。(匿名光流可以在淘宝购买,店家就是匿名科创)
  8. 大四轴飞行的时候,如果是在室内,飞行的高度要高一些,因为会有地效的作用,太低飞机会晃动,调试飞机参数的时候,尽量高一些,并且飞机起飞的环境不要太过于密闭。
  9. A3等其他飞控同样支持SDK二次开发,建议可以试试A3,毕竟价格高,优势肯定也是有的。

代码文件

文件名功能
Driver.cpp板子初始化,并且判断时间执行对应任务
Led.cpp buzzer.cpp主要用来提醒自己进入SDK模式,自己用了蜂鸣器,比赛建议使用灯比较明显,因为四轴噪声太大
Time.cpp原先大疆例程的系统时钟以及定时器初始化
Control.cpp主要是定位还有发送位置控制指令
Communication.cpp初始化串口,用来与N3飞控以及电脑上位机通讯
Sub_information.cpp用来订阅相关信息
Pid.cpppid实现的函数,建议大家有空可以试试自抗干扰(ADRC),不过任何改动可以在模拟器还有小飞机试试
Optical_flow.cpp光流数据接收分析代码,根据买的光流协议编写

代码运行流程

该代码在STM32F4上面运行,这个例程代码默认使用正点原子的匿名光流模块,该工程文件运行流程如下所示:

  1. 填写ID和Key:首先在User/Activate.cpp文件中填写ID和key,这个数据请到大疆开发者网站上面,注册应用,之后就可以拿到上面两串字符,复制粘贴过来即可。
  2. 拿到控制权限:main函数文件中,等待N3飞控启动需要延时(默认30000ms),之后初始化串口,打印出示例说明,检查固件版本与OSDK版本是否一致。之后拿到控制权限后进入loop循环中。
  3. 信息订阅函数:Loop循环进入Driver/driver.cpp函数中,该函数根据时间戳与当前时间的差值确定不同的频率调用哪些控制函数。我们此时设置四种不同的频率并多线程运行四个函数:250HZ为控制指令频率(即控制飞机的指令,频率最高),100HZ为位置计算频率(根据光流的数据计算位置偏差),50HZ为订阅飞控信息频率(该频率要与DJI Assistant上位机设置的频率一致),最后一个是控制模式切换频率,该频率为1HZ,较低,必要时从SDK模式切回手动控制模式,用于防无人机抽风(hhhhhhhh)。
  4. 控制指令函数:该函数位于Driver/control.cpp文件中。首先判断用遥控摇杆开启或者关闭onboard sdk模式,注意要夺回控制权或者放弃控制权,方便飞机出问题可以用遥控器退出开发者模式,并将光流距离清除。之后的一个判断函数,判断飞机是否起飞,飞机没有起飞前把当前激光或者超声波高度数据记为目标高度(飞行过程中实际上靠飞机上的气压计,第三方测距只是防止飞机室内飞行)。之后的一个判断函数,判断动油门遥感后要重新确定第三方测距模块目标高度,方便飞行维持高度稳定。动油门回中一段时间后再记下目标高度,先让飞机垂直方向上的速度降低,不然立马确认高度反应可能有点剧烈。下一个函数是判断无人机控制情况,控制无人机位置,可以看下控制位置以及高度的API,可以根据自己的需求去修改API,不动方向遥感,只动油门的时候,水平位置使用光流数据进行闭环控制,不动油门,只动方向遥感的时候,用激光或者超声波进行垂直方向的速度控制。最后,注意光流最终输出的角度要限制好幅度,包括api其他的角度控制。
  5. 位置计算函数:该函数位于Driver/control.cpp文件中。该函数首先记录了上一次遥控器的pitch和roll值,在sdk模式中,遥控不在中间的时候,需要置相关标志位,关掉对应轴向的位置控制,回中时,使用光流数据进行刹车。在处于定位模式下时 Flow.DETERMINED == true 说明已经确定激光目标高度。此时飞行过程中,有可能经过一些不平的地方或者小车从下面经过,导致激光数据突变,如果变化超过一定范围(10cm),削弱激光修正高度的比例,不然飞机高度容易不稳定(激光修正的比例系数不能为0,室内气压定高不好)。较长时间下方有车子移动,或者经常在不平的地面飞行,那么飞机因为激光修正的削弱,短时间不会出现掉高现象,当垂直的速度稳定一段时间,重新确定当前激光高度为目标高度,并且加大激光修正 ,这样可以防止车子停飞机下端或者飞机飞到一些与当前位置高度不同的地方出现高度变化严重现象。高度环,水平位置环采用50HZ执行频率,水平位置的速度环使用100HZ。改变高度的时候,可以把光流的参数改小点,等高度确定再恢复,因为飞机高度变化,会引起光流数据变化 此处没加,需要的可以自己加。油门回中并且目标高度确定,用PID输出控制飞机的垂直方向速度,防止飞机掉高严重。方向杆回中的时候,此时用光流的数据进行刹车并且悬停 ,先让飞机停下来,所以把目标速度设置为0,当飞机水平位置移动变慢时,确定一段时间内速度变慢。这时就可以把当前位置记为目标位置。
    注意:通过灯是否闪烁判断此时飞控处于onboard sdk模式还是遥控模式(此处用的是蜂鸣器,比赛建议用比较显眼的灯,方便飞行手判断此时是否处于sdk模式)。判断飞机的状态,一定要注意不在sdk模式要释放控制权,防止自己写的东西出问题,与N3飞控通讯失败,没释放控制权会导致飞机按照你最后发的指令一直执行,导致后面其他不可描述的事情发生。
  6. 订阅飞控信息函数:该函数位于Driver/control.cpp文件中。该函数订阅了遥控器数据,绝对高度融合数据,气压计高度数据,融合高度数据,四元数信息,飞行状态,控制设备模式(sdk or 手动),并调用匿名光流模块的数据。
  7. 控制模式切换函数:该函数位于`Driver/control.cpp文件中。该函数通过灯是否闪烁判断此时飞控处于onboard sdk模式还是遥控模式(此处用的是蜂鸣器,比赛建议用比较显眼的灯,方便飞行手判断此时是否处于sdk模式)。注意:SDKInfo结构体位于osdk-core/api/inc/dji_telemetry.hpp文件中(STM32与linux,ROS共享API头文件),deviceStatus变量为0的时候是遥控模式,1为app控制,2为串口控制。flightStatus变量为0的时候是关闭,1为opensd模式。判断飞机的状态,一定要注意不在sdk模式要释放控制权,防止自己写的东西出问题,与N3飞控通讯失败,没释放控制权会导致飞机按照你最后发的指令一直执行,导致后面其他不可描述的事情发生。

最后附上代码源文件

https://github.com/Phillweston/Onboard-SDK-Indoor-location

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

大疆A3、N3、M100飞控ONBOARDSDK二次开发经验分享 的相关文章

  • 【JLink仿真器】盗版检测、连接故障、检测不到芯片问题

    JLink仿真器 盗版检测 连接故障 检测不到芯片问题 一 问题描述二 解决方法1 降低驱动 xff08 解决非法问题以及连接故障 xff09 2 SWD引脚被锁 xff08 解决检测不到芯片 xff09 三 说明 一 问题描述 盗版检测
  • 【STM32学习】直接存储器访问——DMA

    STM32学习 直接存储器访问 DMA 零 参考一 对DMA的理解二 DMA通道优先级三 DMA通道x传输数量寄存器 DMA CNDTRx 四 DMA缓冲区设计 零 参考 一个严谨的STM32串口DMA发送 amp 接收 xff08 1 5
  • 【STM32学习】模数转换器——ADC

    STM32学习 模数转换器 ADC 零 参考一 ADC转换耗时二 转换模式三 对某些寄存器的理解1 ADC CR22 ADC SQRX 四 库函数注意事项 零 参考 STM32固件库 xff08 标准外设库 xff09 入门学习 第七章 A
  • 【面试】嵌入式C语言题目整理

    面试 嵌入式C语言题目整理 描述内存四区 内存四区分为 xff1a 代码区 静态区 堆区 栈区 代码区就是用来存放代码的 静态区用来存放全局变量 静态变量 常量 xff08 字符串常量 const修饰的全局变量 xff09 堆区中的内存是由
  • 【总线】IIC学习笔记

    总线 IIC学习笔记 参考链接IIC总线介绍IIC总线时序1 空闲信号2 启动信号与停止信号3 数据的有效性4 应答信号5 七位地址传输 IIC读写过程 xff08 AT24C02举例 xff09 IIC读过程IIC写过程 正点原子IIC驱
  • 树莓派下载及安装PyCharm软件

    运行 PyCharm 需要 Java 环境 xff0c 如果树莓派上还没有安装过 JRE xff0c 可以使用以下命令安装即可 xff1a sudo apt install default jre y PyCharm 有专业版和社区版 专业
  • QT 建立透明背景图像QPixmap

    列将下面背景透明图片1转变成图片2 图1 图2 span class hljs preprocessor include 34 mainwindow h 34 span span class hljs preprocessor includ
  • putty 登录出现Network error: connection time out 解决方案

    今天用putty登录我的linux主机 出现Networkerror connection time out 然后我从linux系统上登录 xff0c 当是没法联网 xff0c pingwww baidu com 则提示 xff1a pin
  • 大端字节序与小端字节序的转换

    逐步加深对字节操作的理解 xff0c 记录一下大端字节序与小端字节序的转换 xff0c 开发环境是vs2010 xff0c 项目类型是控制台输出程序 xff0c 下面是代码实现 xff1a span class token comment
  • c++面试常见问题总结

    近来在面试的过程 xff0c 发现面试官在c 43 43 方面总是喜欢问及的一些相关问题总结 xff0c 当时没怎么答出来 xff0c 或者是答的不怎么全面 xff0c 故而查询相关资料总结下 后面实际工作会进行实时更新信息 lt 一 gt
  • Prometheus(普罗米修斯)架构及原理

    prometheus架构图 xff1a 如上 xff0c prometheus 采集数据的主要方式是 server 通过http请求去 主动拉取 数据 要完成以上需求 xff0c 必须满足以下条件 xff1a server必须知道各种 ex
  • mujoco强化学习模拟环境的安装(windows10)

    最近在学强化学习 xff0c 学长推荐用mujoco来做仿真环境 原本我是想照着教程安装的 结果最近mujoco被DeepMind收购了 xff0c 现在是开源的 xff0c 许多安装步骤都不太一样了 xff0c 所以我就写了这篇安装教程
  • Apple苹果寻物Airtag真实模型拆解及复现stp文件

    Apple苹果寻物Airtag真实模型拆解及复现stp文件 Airtag拆解复现对比 xff1a 欢迎下载stp结构源文件 xff0c 文件可编辑 xff0c 文件下载链接 xff1a https download csdn net dow
  • 使用STM32CubeMX 配置ADC+DAC(DMA)感受

    STM32CubeMX使用感受 开篇先说一下个人使用STM32CubeMX的感受 xff0c 第一点的感受就是STM32CubeMX加速了开发流程 xff0c ST官方的库写的很好 xff0c 在使用之前 xff0c 开发流程一般是打开如正
  • 订单系统设计 —— 重复下单

    一 重复原因 造成重复下单的原因有很多 xff0c 比如用户重复提交 网络超时导致的重试 xff08 网关超时重试 RPC超时重试 xff0c 以及前端超时重试等 xff09 xff0c 下单请求的整个链路都可能造成重复 xff0c 大致可
  • 额温枪查表算法

    目前额温枪这个东西特别火 xff0c 所以大家都在搞这个事情 xff0c 那我也来蹭个热度吧 大概的工作原理 xff1a 热电堆传感器 gt ADC gt MCU gt LCD显示 其实原理很简单 xff0c 那比较麻烦的事情就是温度补偿和
  • ESP32-IDF 使用VSCODE添加自己的头文件后无法找到的问题

    最近在学习esp32 xff0c 使用VSCODE进行开发 今天在添加自己的项目文件 xff0c 编译后 xff0c 系统提示找不到头文件 xff0c 找了很久 xff0c 最终在大佬同事的帮助下才解决 xff0c 这里记录一下 情况一 x

随机推荐

  • VMWARE安装VM TOOLS后依旧无法拖拉文件的解决方法

    utuntu版本 xff0c 18 04 5 安装虚拟机后又安装了vm tools 并且所有能配置的都配置了 但是依旧无法实现文件的拖拽 这些都配置了 xff0c 还是不行 命令安装vmtools时系统提示 open vm tools pa
  • windows bat脚本学习一(基础指令)

    1 pause 暂停批处理的执行并在屏幕上显示 34 请按任意键继续 34 例如 xff1a 改脚本执行结果为 xff1a 2 echo 显示指令 xff0c 会把需要显示的内容展示出来 例如 结果为 xff1a 3 echo off 在此
  • 常见导航坐标系定义

    常见坐标系 在导航系统中有几种常见的坐标系 xff1a 大地坐标系 xff0c 地心惯性参考系 xff0c 地心地固参考系 xff0c 切平面坐标系 xff0c 随体坐标系 其中大地坐标系和地心惯性参考系是非加速参考系 xff0c 不随地球
  • FreeRTOS学习一(简介)

    1 什么是FreeRTOS RTOS从名字上可以分为free和RTOS两部分 free是免费的意思 xff0c RTOS全称是Real Time Operation System xff0c 译为实时操作系统 那FreeRTOS的意思就是
  • FreeRTOS学习五(信号量)

    信号量是操作系统中重要的一部分 xff0c 信号量一般用来进行资源管理和任务同步 信号量分为二值信号量 计数型信号量 互斥信号量 不同信号量的应用场景也不同 xff0c 但是有些应用场景是可以互换着使用的 信号量简介 信号量常常用于控制对共
  • FreeRTOS学习七(事件标志组)

    RTOS中可以通过信号量来完成同步 xff0c 但是信号量只能与单个的事件或任务进行同步 有时某个任务可能会需要与多个事件或任务进行同步 xff0c 此时信号量就无法满足要求了 事件标志组就排上了用场 事件位 xff08 事件标志 xff0
  • 蓝牙学习二(连接和通讯简述)

    1 简介 蓝牙的通信是双向 的 xff0c 为了创建和维护一个BLE通信连接 xff0c 在蓝牙中引入了 角色 这一概念 xff0c 一个BLE设备不是主机 xff08 集中器 xff09 就是从机 xff08 外围设备 xff09 角色
  • 鸿蒙Hi3861学习十-Huawei LiteOS-M(消息队列)

    一 简介 消息队列 xff0c 是一种常用于任务间通信的数据结构 xff0c 实现了接收来自任务或中断的不固定长度的消息 xff0c 并根据不同的接口选择传递消息是否存放在自己空间 任务能够从队列里面读取消息 xff0c 当队列中的消息是空
  • 鸿蒙Hi3861学习十一-Huawei LiteOS-M(内存池)

    一 简介 LiteOS将内核与内存管理分开实现 xff0c 操作系统内核仅规定了必要的内存管理函数原型 xff0c 而不关心这些内存管理函数是如何实现的 LiteOS内存管理模块管理系统的内存资源 xff0c 包括 xff1a 初始化 分配
  • 鸿蒙Hi3861学习十二-Huawei LiteOS-M(osXX与LOS_XX)

    一 LOS XX是什么 LOS XX是LiteOS M或LiteOS A内核提供的接口 例如 xff1a LOS TaskCreate LOS TaskCreate LOS SemCreate等 因为LiteOS M和LiteOS A是针对
  • 关于单片机替代PLC的思考

    原理上看 xff0c PLC和单片机是一样的 只不过 xff0c PLC更贴近芯片的内部 xff0c 所用语言更接近数字逻辑控制 单片机 xff0c 接近于c了 更接近于一个方便阅读的语言 虽然 xff0c 我觉得逻辑电路实际上看着比程序语
  • message from server: “Host is not allowed to connect to this MySQL server“解决办法

    报错 message from server 34 Host AUTOBVT HN63F77 is not allowed to connect to this MySql server 解决方法 xff1a 1 改表法 可能是你的帐号不允
  • 无人机相关知识解读

    目录 1 什么是云台 xff1f 2 云台的工作原理 xff1f 3 无人机吊舱是什么 xff1f 4 什么是无人机 xff1f 5 无人机都有哪些 xff1f 6 什么是多旋翼无人机 xff1f 7 什么是直升机无人机 xff1f 8 什
  • 中断及pendSV

    1 概述 通过任务及任务切换一节读者已经了解了任务切换的详细过程 其实要实现任务切换的功能前面讲的还远远不够 因为 PSP的操作必须在特权模式下 而用户的程序是工作在线程模式下的 所以 用户要想实现任务的切换功能就必须想办法让CPU工作在特
  • 修改VScode中的git地址

    最近遇到一个问题 xff0c 复制了其他的项目但是项目中的git文件删除不了 xff08 没有权限 xff1b 解决办法如下 xff1a 先查看当前项目的Git地址 xff0c 查看是否是Git上的对应地址 xff1a git remote
  • Matlab与.m脚本文件没有关联,怎么破?

    最近安装了比较新版本的Matlab xff0c 遇到了这样的问题 xff1a 1 xff09 m脚本文件与Matlab没有关联 xff0c 鼠标右击 gt 打开方式中 xff0c 没有Matlab这一选项 xff1b 2 xff09 m脚本
  • 高质量嵌入式Linux C编程学习摘要

    1 多线程方面 1 xff09 pthread create 创建的线程默认情况下是非分离状态的线程 xff0c 如果修改线程的状态属性 xff0c 需要使用pthread attr getdatachstate 和pthread attr
  • mavros常用消息类型表

    mavros订阅消息 xff1a global position 订阅GPS数据 消息名称 xff1a mavros global position global 类型名称 xff1a sensor msgs NavSatFix h 类型所
  • Solidworks踩坑随笔

    Solidworks无法打开问题终极解决办法 网上流传的solidworks无法打开的解决办法有如下几种 xff1a 使用solidworks安装包自带的修复工具修复 缺点 xff1a 耗费时间长 xff0c 而且不一定能找到原来下载的安装
  • 大疆A3、N3、M100飞控ONBOARDSDK二次开发经验分享

    开发流程 步骤一 选择开发方式 先去大疆的开发者网站 xff08 https developer dji com xff09 看资料 xff0c 我选择的是ONBOARD SDK stm32 xff08 图一 xff09 步骤二 观看官方资