PH47代码框架功能速查
1. PH47框架逻辑层全局引用对象
| 全局引用 | 功能简介 | 快速访问 |
| bus | 数据总线系统功能实现,如对总线数据项读写操作等 | 数据总线bus |
| drv | 驱动层功能实现,如飞控板相关的各种硬件传感器设备进行操作等 | 驱动层drv |
| mcu | 对mcu的片内接口及设备进行操作 | 驱动层mcu |
| frm | 框架层基本功能实现 | 框架层frm |
| frm.led | 对飞控板状态指示led进行操作 | |
| frm.mutipilot | 多飞控板协作功能实现 | |
| core | 框架层高级功能实现 | |
| core.mavlink | mavlink 协议对地遥测通讯功能实现 | mavlink |
| core.airlink | mavlink协议空对空遥测通讯功能实现 | |
| core.para | 对机载参数进行读写及存储等操作 | 机载参数系统 |
| core.wp | 对导航航点进行读写及修改操作 | |
| algo | 算法层功能实现 | |
| app | 应用层功能实现 | 应用层开发 |
2. PH47框架全局函数及变量
全局状态变量操作相关函数
| 功能描述 | 对应函数 | 快速访问 |
| 全局状态变量状态操作 | gSetStatus() gGetStatus() | 全局状态变量 |
| 设置全局错误、警告 | gSetGlobalState() | |
| 设置飞控板状态GPIO 测试Pin | gTrigleTestPin() |
全局时间相关功能函数
| 功能描述 | 对应函数 | 快速访问 |
| 获取当前ms时间 | gGetMills() | 时间相关 |
| 获取当前ms时间,精确到us | gGetMills_f() | |
| 获取前一时刻到当前的ms时间间隔 | gGetTmUsage_ms() | 获取时间间隔 |
| 获取前一时刻到当前的us时间间隔 | gGetTmUsage_us() | |
| ms 级别延时,非阻塞,但依赖于FreeRtos启动 | osDelay() | |
| ms 级别延时,阻塞,不依赖FreeRtos | HAL_Delay() | |
| us 级别延时,阻塞 | gDelay_us() |
全局调试及信息显示相关函数
| 功能描述 | 对应函数 | 快速访问 |
| 调试信息输出宏(队列方式,依赖于框架启动完成) | TRACE() | 调试输出 |
| 真值确认宏 | ASSERT() | |
| 调试串口字符串输出(中断方式) | gPrintf() | |
| 调试串口以及CSS状态窗口信息输出 | gShowInfo() | |
| 格式化字符串生成 | gFormat() |
3. 数据总线操作(通过bus引用)
驱动层常用功能函数(通过drv或mcu引用)
| 功能描述 | 对应函数 | 快速访问 |
| 设置总线数据项的数值 | Set() | 数据总线 |
| 设置当前总线数据为安全总线 | SetSafe() | |
| 获取总线数据项数值 | Get() | |
| 获取总线数值的引用 | GetRef() | |
| 获取总线数据项最近一次被 设置时刻的时间戳(ms) | GetTimeStamp_ms() GetTmStampDec_us() | |
| 获取总线数据项最近两次被设置时刻间的时间间隔 | GetDt2Prev_us() GetDt2Prev_ms() |
驱动层功能函数大多数为MCU接口驱动,一般用于飞控板硬件层面驱动程序的开发。目前代码框架已支持的传感器硬件输出数据均已纳入到数据总线体系,用户可直接使用。初级开发者无需过多关心。
但是驱动层也提供了少量功能函数供各层级的开发者使用,最常用的是Pwm输入输出相关函数。
Pwm操作函数(通过drv._pPwm引用)
| 功能描述 | 对应函数 | 快速访问 |
| 获取当前输入通道的Pwm脉冲宽度(us) | GetPwmIn() | |
| 设置当前Pwm输出通道的 Pmw脉冲宽度(us) | SetPwmWidth(); | |
| 使能当前Pwm输出控制 | EnablePwmOut() |
Stm32 ADC 电压测量函数(全局函数)
| 功能描述 | 对应函数 | 快速访问 |
| 获取当前控制板电压测量通道的电压数值 (测量范围0-3.3v, 单位:0.01v。测量电压必须在控制板外进行分压处理,否则会烧毁控制板!) | gGetBoardVol() | |
| 获取当前电池电压测量通道的电压数值 (测量范围0-3.3v, 单位:0.01v。测量电压必须在控制板外进行分压处理,否则会烧毁控制板!) | gGetBatteryVol() |
驱动层串口常用操作(通过指针drv._pUsartXxx引用)
| 功能描述 | 对应函数 | 快速访问 |
| 发送数据环形缓冲区对象,FIFO | CPhSerial._RingBuf_Snd | |
| 接收数据环形缓冲区对象,FIFO | CPhSerial._RingBuf_Rev | |
| 设置串口波特率 | SetBaudRate() | |
| 以中断方式将字符串写入串口发送环形缓冲区并立即发送。 | WriteData_INT() | |
| 以DMA方式将直接发送字符串(不写入发送环形缓冲区)。 | WriteData_DMA() | |
| 将一个字符加入串口发送环形缓冲区(但不发送) | Add2SndBuf() | |
| 将字符串加入串口发送环形缓冲区(但不发送) | Add2SndBuf_DMA() | |
| 以中断方式发送当前环形发送缓冲区中的数据 | StartSend_IT() | |
| 以DMA方式发送当前环形发送缓冲区中的数据 | StartSend_DMA() | |
| 获取当前接收环形缓冲区当中的数据字节数 | GetRevCount() | |
| 读取当前接收环形缓冲区当中的一个字节数据,读取成功后将该直接数据移出环形缓冲区 | GetRevByte() | |
| 判断当前串口DMA是否忙碌 | IsDmaBusy() |
驱动层SPI接口常用操作(通过指针mcu. _pSpiXxx引用)
| 功能描述 | 对应函数 | 快速访问 |
| 设置当前spi接口速率 | SetSpeed() | |
| 写入1字节数据到spi | WriteByte() | |
| 从spi接口读取1字节数据 | ReadByte() | |
| 写入多个字节数据到spi | SpiTran() | |
| 从spi接口读取多个字节数据 | SpiReceive() | |
| 同时向spi接口中写入并读取多个字节数据 | SpiTranRev() |
驱动层I2C接口常用操作(通过指针mcu._pI2C_Xxx引用)
| 功能描述 | 对应函数 | 快速访问 |
| ST, 产生 IIC 起始信号 | IIC_Start() | |
| SP, 产生 IIC 停止信号 | IIC_Stop() | |
| 等待应答信号到来, 返回值:应答等待时间(us) | IIC_Wait_Ack() | |
| 产生ACK应答 | IIC_Ack(void) | |
| 不产生ACK应答 | IIC_Nack() | |
| 向I2C写入一个字节, 并返回从机有无应答 | IIC_Send_Byte() | |
| 从I2C读取一个字节 | IIC_Read_Byte() | |
| 读取指定ID的I2C设备上指定地址的1字节数据 | ReadOneByte() | |
| 向指定ID的I2C设备上指定地址写入1字节数据 | WriteOneByte() | |
| 读取指定ID的I2C设备上从指定地址开始的多个字节数据 | ReadBytes() | |
| 向指定ID的I2C设备上从指定地址写入多个字节数据 | WriteBytes() |
4. 框架层常用功能函数(通过frm引用)
框架层基本功能函数(通过frm引用)
| 功能描述 | 对应函数 | 快速访问 |
| 读取全局状态变量数值 | SetStatus() | 框架层函数 |
| 置全局状态变量数值 | GetStatus() | |
| 初始化Post 消息 | InitPostMsg() | |
| 以Post方式发出一个消息 | PostMsg() | |
| 检查是否有特定消息翼Post方式发出 | CheckPostMsg() | |
| 对以Send方式发出的消息进行处理(回调函数) | HandleMessage() | |
| 当前是否工作于HIL模式 | IsHilSimulateMode() | |
| 当前是否工作于真实传感器模式 | IsSensorMode() | |
| 设置当前飞行模式 | SetFlightMode() | |
| 对当前飞控实施指令控制 | FlightControl_Ins() | |
| 处理来自GCS的上行mavlink控制命令 (回调函数) | CommonMsgProc_Gcs() | |
| 处理来自其他飞控板的mavlink控制命令 (回调函数) | CommonMsgProc_Air() | |
| 向GCS下行发送mavlink数据帧(回调函数) | MavMsgSnd2GCS_Slow() | |
| 所有参数上传完毕事件响应函数(回调函数) | Event_ParaUpComplete() | |
| 设置对GCS下行mavlink数据帧的发送速率 | SetMsgRate_Gcs() |
框架层基本子引用:状态指示LED控制(通过frm.led引用)
| 功能描述 | 对应函数 | 快速访问 |
| 翻转闪烁指示 LED | Led_Toggle() | |
| 以闪烁编码方式进行状态显示(非阻塞) | Led_ShowStatus() |
框架层基本子引用:多飞控板协作(通过frm. mutipilot引用)
| 功能描述 | 对应函数 | 快速访问 |
| 改变当前调试串口(多功能串口)的用途 | ChangeConsoleMode() | |
| ChangeFlightCtrlRights() | ||
| MavMsgSnd2Airlink() | ||
| DP_MasterSnd2Slaver() | ||
| DP_SlaverSnd2Master() | ||
| DP S_ParseMasterMsg() | ||
| DPM_ParseSlaverMsg() |
5. 框架层扩展功能及函数(通过core引用)
框架层重要成员变量(通过core引用)
| 功能描述 | 变 量 | 快速访问 |
| PH47框架初始化全部完成标志 | blSysInitCompleted |
框架层扩展功能函数(通过core引用)
| 功能描述 | 对应函数 | 快速访问 |
| 读取全局状态变量数值 | SetStatus() | |
| 置全局状态变量数值 | GetStatus() | |
| 检查是否有特定消息翼Post方式发出 | CheckPostMsg() | |
| 当前是否工作于真实传感器模式 | IsSensorMode() | |
| 获取当前GPS精度状态 | GetGpsStatus() | |
| 设置当前GPS精度状态 | SetGpsStatus() | |
| 设置全局错误状态代码 | SetGlobalState() | |
| 设置全局警告状态代码 | SetGlobalError() | |
| 发送用户自定义mavlink数据帧 | SendUserDefData() |
框架层扩展子应用:对地遥测通讯(通过core.mavlink引用)
由于整个mavlink通讯系统已经进行了完善的封装,故初中级用户在二次开发过程中涉及到遥测通讯功能函数很少,主要集中在下行指令或状态发送方面。在其它方面,用户只需要专注于数据总线操作,从总线中读取或写入数据即可。
对于高级开发二次用户,关于遥测系统功能函数具体可参见代码实现文件\DevStudio\Frame\Core\MavlinkWrap.h。
| 功能描述 | 对应函数 | 快速访问 |
| 向GCS下行发送字符串信息 | AddMsg_StatusText() | Mavlink |
| 向GCS下行发送带7个参数的长控制命令 | AddMsg_Command() | |
| 向GCS下行发送带2个参数的短控制命令 | AddMsg_UserDefData() |
框架层扩展子应用:机载参数系统(通过core.para引用)
与遥测系统类似,机载参数系统的读取、存储、更新及传送机制也进行了完善的封装,用户只需在需要时调用下述函数读取或写入参数即可,剩下所有工作由框架负责完成。
| 功能描述 | 对应函数 | 快速访问 |
| 获取机载参数数值 | Get() | 机载参数 |
| 设置机载参数数值 | Set() |
框架层扩展子应用:航点存储系统(通过core.wp引用)
| 功能描述 | 对应函数 | 快速访问 |
| 读取航点数据 | ReadWP() | |
| 写入航点数据 | WriteWP() | |
| 获取航点数量 | GetWpCounts() | |
| 读取航点的位置信息 | ReadWpLoc() |
6. 算法层功能(通过algo引用)
PH47代码框架层提供给二次开发用户的功能函数很少。在算法层当中集成了飞行及导航控制的大量功能实现,这些功能通过框架的架构组成了飞行及导航控制功能的具体实现。二次开发用户可使用算法层各模块的现有功能函数,但并不推荐。
算法层更重要的意义在于为用户进行二次开发,尤其是算法逻辑的二次开发搭建起了逻辑清晰,功能完善的设计及运行框架。用户在此框架下,可集中注意力在算法逻辑自身的开发上,而无需过多分心于运行逻辑的设计实现。
传感器数据处理模块指针(通过algo引用)
| 功能描述 | 功能模块指针 | 对应抽象类 |
| 主IMU类对象指针 | _pSensor_IMU | CSensor_Imu_Port |
| 扩展IMU类对象指针 | _pSensor_IMU_Ext | CSensor_Imu_Port |
| 磁强传感器类对象指针 | _pSensor_Mag | CSensor_Mag_Port |
| 气压传感器类对象指针 | _pSensor_Baro | CSensor_Baro_Port |
| 空速传感器类对象指针 | _pSensor_Airspeed | CSensor_Airspeed_Port |
| Pwm输入处理类对象指针 | _pSensor_RcCtrl | CSensor_RC_Port |
| Tof及光流处理类对象指针 | _pSensor_Tof | CSensor_UsartParse_Port |
控制功能模块指针(通过algo引用)
| 功能描述 | 功能模块指针 | 对应抽象类 |
| 输入数据控制器模块 | _pCtrlDataProc | CCtrlDateProcess_Port |
| 姿态解算模块 | _pAttitudeCore | CAttitudeCore_Port |
| 姿态控制器模块 | _pController_Atti | CController_Attitude_Port |
| 高度/速度控制器模块 | _pController_HgtSpd | CController_HeightSpeed_Port |
| 位置/速度估算器模块 | _pPosVelCore | CPosVelCore_Port |
| 位置控制器模块 | _pController_Position | CController_Position_Port |
| Pwm输出控制器模块 | _pServoOutCtrl | CServoOutCtrl_Port |
7. 应用层功能函数(通过app引用)
与算法层类似,应用层也为用户进行二次开发搭建了完善的框架。同时,应用层提供了多个回调函数(空函数)供用户加入自己的代码实现。
| 功能描述 | 回调函数 | |
| PH47框架启动完成后调用,完成用户功能代码初始化工作 | Init() | |
| 快速线程回调函数,被调用频率在400-500hz之间 (基于Stm32F411的BBP飞控板) | FastThread() | |
| 正常线程回调函数,被调用频率固定为250hz | NormalThread_250Hz() | |
| 慢速线程回调函数,被调用频率固定为50hz | SlowThread_50Hz() | |
| 对用户自定义调试串口控制命令的处理函数 | HandleConsoleCmd() | |
| 对来自于GCS的用户自定义上行控制命令处理函数 | HandleRevMavlinkMsg() | |
| 飞行及导航控制实现函数。250hz速率调用,调用优先级高于NormalThread_250Hz()函数 | FlightControl_FixWing() | |
| 起飞前检查回调函数 | PreTakeOffCheck_FixWing() | |
| 飞行模式切换前回调函数 | PreSwitchFlightMode() |
更多内容见CSDN博客专栏:无人机飞控
https://blog.csdn.net/ss15/category_9690939.html?spm=1001.2014.3001.5482相关资源:PH47: PH47运动控制代码框架.
https://gitee.com/ss15/ph47
相关文章:
PH47代码框架功能速查
1. PH47框架逻辑层全局引用对象 全局引用 功能简介 快速访问 bus 数据总线系统功能实现,如对总线数据项读写操作等 数据总线bus drv 驱动层功能实现,如飞控板相关的各种硬件传感器设备进行操作等 驱动层drv mcu 对mcu的片内接口及设备进行操作…...
UVM寄存器模型:uvm_reg_adapter
文章目录 一、什么是uvm_reg_adapter1、what2、Example2.1、代码详解 二、如何使用uvm_reg_adapter三、为什么要引入uvm_reg_adapter 一、什么是uvm_reg_adapter 1、what uvm_reg_adapter继承于uvm_object,定义了用于在 uvm_reg_bus_op 和特定总线事务之间进行转换…...
总结OpenGL和pyrender安装和使用过程中的坑
目录 报错一:AttributeError: NoneType object has no attribute glGetError 报错二:ImportError: (Unable to load OpenGL library, OSMesa: cannot open shared object file: No such file or directory, OSMesa, None) 报错三:raise ImportError("Unable to load…...
温湿传感器(学习笔记下)
接着我们温湿传感器上半部分的学习,现在我们学习接下来的部分,编写GXHTC3驱动程序,也就是给gxhtc3.c文件添加代码,我们要判断gxhtc3芯片是否存在和正常,就要先读取gxhtc3的ID号,根据gxhtc3的数据手册,读取命…...
期刊论文写作之word模板
一、zotero参考文献使用 下载zotero软件,请搜索相关帖子或者小破站即可; 把pdf拖到zotero软件里面,直接拉进去; 下面建立一个word演示: 1.导入pdf点击红框部分,根据期刊要求选择参考文献样式࿰…...
雷池社区版OPEN API使用教程
OPEN API使用教程 新版本接口支持API Token鉴权 接口文档官方没有提供,有需要可以自行爬取,爬了几个,其实也很方便 使用条件 需要使用默认的 admin 用户登录才可见此功能版本需要 > 6.6.0 使用方法 1.在系统管理创建API TOKEN 2.发…...
LSTM(Long Short-Term Memory,长短期记忆网络)在高端局效果如何
lstm 杂乱数据分析 LSTM(Long Short-Term Memory,长短期记忆网络)在高端局,即复杂的机器学习和深度学习应用中,展现出了其独特的优势和广泛的应用价值。以下是对LSTM在高端局中的详细解析: 一、LSTM的优势…...
模组操作宝典:4种关机重启技巧,让你的设备运行无忧
今天我说的是关于关机重启技巧。 给4G模组VBAT断电关机,模组关机前未能及时退出当前基站,会有什么影响呢? 基站会误以为设备还在线,下次开机仍会拿着上次驻网信息去连基站。基站一看,上次链接还在——认为你是非法设…...
利用API接口实现旺店通和金蝶系统的无缝数据对接
旺店通销售出库对接金蝶销售订单(线下)的技术实现 在企业日常运营中,数据的高效流转和准确对接是确保业务顺畅运行的关键。本文将聚焦于一个具体案例:如何通过轻易云数据集成平台,实现旺店通企业奇门的数据无缝对接到金蝶云星空系统。我们将…...
热题100(hash)
热题100(Hash) 三道题目 1.两数之和(√) 49.字母异位词分组(题解) 128.最长连续序列(题解) 思路 第1题简单hash映射,O(n) 第49题,关键点在于Hashmap的形式,‘HashMap<Stri…...
Ubuntu下Mysql修改默认存储路径
首先声明,亲身经验,自己实践,网上百度了好几个帖子,全是坑,都TMD的不行,修改各种配置文件,就是服务起不来,有以下几种配置文件需要修改 第一个文件/etc/mysql/my.cnf 这个文件是存…...
LVGL移植教程(超详细)——基于GD32F303X系列MCU
版本:LVGL Kernel V8.3.0,运行压力测试Demo Stress首先放一张最终Stress Demo 运行图: 一、准备 1. GD32 Keil工程 准备任意一个屏幕可以正常显示的GD32工程: 2. LVGL源码 最新版现在已经是V9.2了,这里我选择了…...
《计算机原理与系统结构》学习系列——处理器(中)
系列文章目录 目录 流水线数据通路与控制概述5个流水级指令周期与流水级 流水线性能流水线时钟周期的长度T和数量cycles流水线性能 流水线数据通路流水线寄存器流水线分析图形化流水线流水线控制 流水线数据通路与控制 概述 5个流水级 指令周期与流水级 单周期实现中&#x…...
深入解析 OceanBase 数据库中的局部索引和全局索引
深入解析 OceanBase 数据库中的局部索引和全局索引 引言 在分布式数据库中,索引的设计对于优化查询性能至关重要。OceanBase 作为一款高性能的分布式关系数据库,支持局部索引和全局索引两种索引类型。理解这两种索引的特点和适用场景,对于数…...
2024防晒衣市场社媒营销洞察报告
2024年,硬防晒已经从单一的户外场景,扩展到通勤、外出游玩、穿搭等更多场景,多样化的需求导致的消费群体不断扩大,“防晒经济”迎来自己的主场时刻。 当前,防晒衣不仅需要满足不用场景的灵活切换,还要满足多…...
【Ubuntu20.04 Visual Studio Code安装】【VSCODE】
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、打开VSCOE官网二、下载VSODE的Ubuntu版本三、安装VSCODE软件包四、导入工作空间(添加工作空间目录)五、安装插件:1.安装简体中文包2.安装ros插件…...
贪心算法day(1)
1.将数组和减半的最少操作次数 链接:. - 力扣(LeetCode) 思路:创建大跟堆将最大的数进行减半 注意点:double t queue.poll()会将queue队列数字减少一个后再除以2,queue.offer(queue.poll()/…...
窗口函数sql使用总结
一、开窗 基础知识:窗口分析函数 (1)LAG(col,n,DEFAULT) 用于统计窗口内往上第n行值 第一个参数为列名,第二个参数为往上第n行(可选,默认为1),第三个参数为默认值(当往…...
python单因素分析
写了个简易小程序实现,以后用的时候直接复制就行: import numpy as np from scipy.stats import fdatas [[65,60,69,79,38,68,54,67,68,43],[74,71,58,49,58,49,48,68,56,47],[22,34,24,21,20,36,36,31,28,33] ] a 0.05def get_mean_var(data):data_m…...
「C/C++」C++ STL容器库 之 std::list 双向链表容器
✨博客主页何曾参静谧的博客📌文章专栏「C/C」C/C程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...
