触屏手机网站建设wordpress 电台网站

张小明 2026/1/9 5:46:26
触屏手机网站建设,wordpress 电台网站,网站开发工作分解结构,上海工程咨询行业协会基础讲解 基础术语 消息#xff1a;数据格式模板#xff08;类似 “语言语法”#xff09;#xff0c;定义数据字段#xff08;如时间戳、具体参数#xff09;#xff0c;所有消息必须包含timestamp#xff08;时间戳#xff09;字段主题#xff1a;消息的 “通信通…基础讲解基础术语消息数据格式模板类似 “语言语法”定义数据字段如时间戳、具体参数所有消息必须包含timestamp时间戳字段主题消息的 “通信通道”类似 “订单传递渠道”同一消息格式可对应多个独立主题模块通过主题收发数据模块PX4 中承担特定功能的单元类似 “厨师、服务员”发布/订阅uORB Message的定义与转换定义在msg/目录下创建.msg文件指定字段名、数据类型和注释uint64 timestamp # 系统启动后的时间戳微秒 uint16 customer_table_id # 顾客餐桌ID float32 pasta_temperature # 意面温度℃编译转换.msg文件无法直接用于代码编译时会自动转换为C/C结构体生成的头文件位于build/px4_sitl_default/uORB/topics/路径下uORB Topic的创建规则编译系统自动注册与消息名称相同的主题自定义主题在.msg文件末尾添加# TOPICS 主题1 主题2注释即可创建多个基于同一消息格式的独立主题# TOPICS pasta_cook pasta_orderuORB 发布与订阅的实现发布Publication步骤包含发布工具的头文件 - 定义发布对象指定主题ID - 填充消息结构体 - 调用publish()发布示例#includeuORB/Publication.hpp// 封装了 “发布消息” 所需的全部核心接口#includeuORB/topics/safety.h// 引入 safety 主题对应的 “消息结构体定义”// 定义发布对象主题safetyuORB::Publicationsafety_s_to_safety{ORB_ID(safety)};safety_s _safety{};// 消息结构体实例// 填充并发布消息_safety.safety_offtrue;// 安全保护关闭_safety.timestamphrt_absolute_time();_to_safety.publish(_safety);// 发布订阅Subscription包含订阅工具头文件 - 定义订阅对象制定主题ID - 检查主题更新 - 调用copy()拷贝消息数据示例#includeuORB/Subscription.hpp#includeuORB/topics/safety.h// 定义订阅对象主题safetyuORB::Subscription _safety_sub{ORB_ID(safety)};safety_s _safety{};// 本地存储消息的结构体// 检查更新并拷贝数据if(_safety_sub.updated()){// 判断是否有新消息_safety_sub.copy(_safety);// 拷贝消息到本地// 处理消息如允许电机解锁}实用技巧如果想搜索与特定主题相关的uORB 发布 / 订阅实例建议使用ORB_ID(topic-name)作为搜索关键词而非直接搜索topic-name在浏览器中打开PX4-Autopilot的 GitHub 仓库https://github.com/PX4/PX4-Autopilot按下.句点键页面会自动切换为交互式 VS Code 编辑器。此时按下CtrlShiftF即可打开全局搜索框快速搜索你需要的内容注意时间戳是所有消息的必填字段记录了消息的发布时间订阅者可以通过它判断消息的实效性.msg文件不能直接在代码中使用在编译阶段这些.msg文件会被解析并转换为 C/C 结构体以便代码库调用网址https://px4.io/px4-uorb-explained-part-1/https://px4.io/px4-uorb-explained-part-2/例程讲解例程#includepx4_platform_common/log.h#includepx4_platform_common/px4_config.h#includepx4_platform_common/tasks.h#includepx4_platform_common/posix.h#includeunistd.h#includestdio.h#includepoll.h#includestring.h#includemath.h#includeuORB/uORB.h#includeuORB/topics/vehicle_acceleration.h#includeuORB/topics/vehicle_attitude.h__EXPORTintuorb_test_main(intargc,char*argv[]);intuorb_test_main(intargc,char*argv[]){PX4_INFO(Hello Sky!);// 订阅 vehicle_acceleration 主题intsensor_sub_fdorb_subscribe(ORB_ID(vehicle_acceleration));// sensor_sub_fd 传感器订阅句柄订阅失败会返回负数orb_set_interval(sensor_sub_fd,200);// 订阅频率配置函数每 200 ms订阅一次// 初始化姿态主题的发布者structvehicle_attitude_satt;//定义姿态数据结构体存储要发布的姿态数据memset(att,0,sizeof(att));// 变量内存起始地址 要填充的字节值 要填充的字节数把 att 变量的所有内存字节都变成0orb_advert_tatt_puborb_advertise(ORB_ID(vehicle_attitude),att);// 定义要监听的事件px4_pollfd_struct_tfds[]{{.fdsensor_sub_fd,.eventsPOLLIN},};interror_counter0;// 记录错误次数for(inti0;i5;i){intpoll_retpx4_poll(fds,1,1000);// 阻塞等待事件if(poll_ret0)// 超时{PX4_ERR(Got no data within a sencond);}elseif(poll_ret0)//错误{if(error_counter0||error_counter%500)// 限制错误输出频率避免刷屏{PX4_ERR(ERROR return value from poll():%d,poll_ret);}error_counter;}else// 有事件发生{if(fds[0].reventsPOLLIN)// 判断是否是fds[0]的事件发生{structvehicle_acceleration_saccel;orb_copy(ORB_ID(vehicle_acceleration),sensor_sub_fd,accel);// 把ORB系统中缓存的最新加速度数据拷贝到本地accel变量中PX4_INFO(Accelerometer:\t%8.4f\t%8.4f\t%8.4f,(double)accel.xyz[0],(double)accel.xyz[1],(double)accel.xyz[2]);// 打印// 假处理真实姿态解算需要用IMU的加速度角速度通过卡尔曼滤波等算法计算四元数att.q[0]accel.xyz[0];att.q[1]accel.xyz[1];att.q[2]accel.xyz[2];// 发布数据orb_publish(ORB_ID(vehicle_attitude),att_pub,att);}}}PX4_INFO(exiting);return0;}注释int sensor_sub_fd orb_subscribe(ORB_ID(vehicle_acceleration));向 uORB 管理器 “订阅” vehicle_acceleration类型的 uORB 消息intorb_subscribe(conststructorb_metadata*meta)// meta uORB 消息的 “元数据指针”orb_set_interval(sensor_sub_fd, 200);控制消息订阅更新频率intorb_set_interval(inthandle,unsignedintinterval)// handle uORB 订阅句柄// interval 最小更新时间间隔单位msmemset(att, 0, sizeof(att));把 att 变量的所有内存字节都变成0void*memset(void*__dest,int__ch,size_t__len)// __dest 变量内存起始地址// __ch 要填充的字节值// __len 要填充的字节数orb_advert_t att_pub orb_advertise(ORB_ID(vehicle_attitude), att);向 uORB 管理器 “宣告”我要发布某个类型的 uORB 消息orb_advert_torb_advertise(conststructorb_metadata*meta,constvoid*data)// meta uORB 消息的 “元数据指针”// data 可选初始数据指针首次宣告时可传入该消息的初始化数据也可传入 NULL// 返回值成功则返回有效句柄失败返回无效句柄常量px4_pollfd_struct_t fds[] { { .fd sensor_sub_fd, .events POLLIN }, /* there could be more file descriptors here, in the form like: * { .fd other_sub_fd, .events POLLIN }, */ };定义了一个 px4_pollfd_struct_t 类型的数组 fds 并为数组的第一个元素显示初始化 fd 和 event 两个成员typedefstruct{/* This part of the struct is POSIX-like */intfd;/* The descriptor being polled */px4_pollevent_tevents;/* The input event flags */px4_pollevent_trevents;/* The output event flags *//* Required for PX4 compatibility */px4_sem_t*sem;/* Pointer to semaphore used to post output event */void*priv;/* For use by drivers */}px4_pollfd_struct_t;// fd 要监听的文件描述符。对应 ORB 订阅句柄/设备句柄// events 要监听的事件类型。POLLIN 有数据可读传感器数据、ORB主题更新POLLOUT 数据读写比如向串口发数据POLLERR 通道错误比如传感器断开// revents 实际发生的事件类型。输出参数用户不能初始化只能在 px4_poll() 返回后读取。可通过 if(fds[0].revents POLLIN) 判断是否发生目标事件// sem 信号量指针。当 fd 对应的通道发生目标事件时px4_poll() 会自动调用 px4_sem_post(sem) 触发信号量唤醒等待信号量的线程普通 ORB 订阅场景无需手动设置PX4 内核会主动管理只有驱动开发写一个新的 IMU 传感器驱动时才需要手动配置// priv 私有数据指针。让让驱动模块可以将自定义数据比如设备私有结构体、配置参数绑定到这个 pollfd 上驱动初始化时填充用户只读不写int poll_ret px4_poll(fds, 1, 1000);监听多个文件描述符 fd 的制定事件intpx4_poll(px4_pollfd_struct_t*fds,unsignedintnfds,inttimeout);// fds 要监听的 FD 和事件配置// nfds 要监听的文件描述符数量即 fds 数组的有效长度// timeout 阻塞等待的超时时间// 返回值正整数有事件发生的 FD 数量如返回2则表示有2个FD发生了对应的事件需遍历 fds 检查 revents0表示超时返回-1发生错误如FD无效、驱动出错、信号量操作失败等orb_copy(ORB_ID(vehicle_acceleration), sensor_sub_fd, accel);从订阅句柄 sensor_sub_fd 中读取拷贝最新的消息数据到accelintorb_copy(conststructorb_metadata*meta,inthandle,void*buffer)// meta uORB 消息的 “元数据指针”// handle uORB 消息的订阅句柄// buffer 用户提供的数据缓冲区指针用于存储读取到的消息// 返回值成功返回0失败返回负数错误码定义在 errno.horb_publish(ORB_ID(vehicle_attitude), att_pub, att);将消息数据发布到 uORB 总线上供所有订阅该消息的模块读取intorb_publish(conststructorb_metadata*meta,orb_advert_thandle,constvoid*data)// meta uORB 消息的 “元数据指针”// handle uORB 消息的发布句柄// data 待发布的消息数据指针指向存储实际数据的结构体// 返回值成功返回0失败返回负数错误码
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

php网站建设课程作业网站建设低价建站损失在哪里

想要体验AI图像生成的魅力,却担心技术门槛太高?Qwen Image Edit-Rapid-AIO作为一款开源AI图像生成工具,专为新手和普通用户设计,提供从文本到图像的极速创作体验。本指南将带你轻松上手,实现创意到作品的快速转化。 【…

张小明 2026/1/7 21:19:29 网站建设

重庆整合网络营销之整站优化客户管理系统源代码

无需高端显卡!Wan2.2-T2V-5B让普通开发者也能玩转AI视频生成 在短视频内容爆炸式增长的今天,一个创意从灵感到落地的速度,往往决定了它能否抓住流量窗口。但对大多数独立开发者和小型团队来说,AI驱动的视频生成技术一直像是“别人…

张小明 2026/1/7 19:11:56 网站建设

devexpress 网站开发网站维护页面源码

能帮到你的话,就给个赞吧 😘 文章目录ue官方插件从引擎中启用从引擎中禁用从fab下载插件:第三方插件1.先将fab插件 添加到个人fab库中2.再从个人库中安装到引擎3.再从引擎中启用ue官方插件 从引擎中启用 从引擎中禁用 从fab下载插件&#…

张小明 2026/1/7 21:19:28 网站建设

企业网站备案要多久网站咋做推广

Wan2.2-T2V-A14B 模型许可证与商业授权深度解析 在内容消费日益视频化的今天,企业对高效、低成本、高质量视频生成的需求正以前所未有的速度增长。传统影视制作流程动辄数周、成本高昂,已难以匹配短视频平台、电商广告、全球化营销等场景下“快速试错、高…

张小明 2026/1/7 21:19:42 网站建设

网站建设文献综述知乎网站开发 定制 合同

个人简介一名14年经验的资深毕设内行人,语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

张小明 2026/1/9 17:35:50 网站建设

电商网页设计网站wordpress密码验证失败

计算机毕业设计无纸化会议管理系统oac939(配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。会议通知一发,打印店就排长队——议程、名单、签到表、投票表、纪要&#xf…

张小明 2026/1/7 21:19:35 网站建设