网站建设有哪些常用行为个人自媒体创意名字

张小明 2026/1/15 7:32:57
网站建设有哪些常用行为,个人自媒体创意名字,家具行业网站建设,网址导航建站基础讲解 基础术语 消息#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进行投诉反馈,一经查实,立即删除!

网站备案名称的影响吗图片分页网站模板

综合布线品牌排名哪家技术强 在当今数字化时代,综合布线系统作为网络基础设施的重要组成部分,其技术水平直接影响着网络的性能和稳定性。众多综合布线品牌在市场上竞争激烈,究竟哪家技术更强呢?让我们来深入分析。 大唐风暴&…

张小明 2026/1/11 18:36:13 网站建设

怎么做国外网站开网店的流程视频

文章目录 前言第一章 初识SpringBoot自动配置:什么是“约定优于配置”1.1 传统Spring配置的痛点1.2 SpringBoot自动配置的核心价值1.3 自动配置的核心特性 第二章 深入源码:自动配置的实现原理2.1 自动配置的“入口”:SpringBootApplication2…

张小明 2026/1/12 18:51:05 网站建设

php网站开发实例教程营销培训课程2022

题目描述 Alice\texttt{Alice}Alice 和 Bob\texttt{Bob}Bob 设计了一个双人猜数游戏。游戏开始前&#xff0c;他们约定两个正整数&#xff1a;范围 NNN 和 允许的失误次数上限 SSS。Alice\texttt{Alice}Alice 秘密选择一个整数 XXX&#xff08;0≤X<N0 \le X < N0≤X<…

张小明 2026/1/12 2:45:42 网站建设

做策划有帮助的网站WordPress ajax 跨域

NAT类型检测终极指南&#xff1a;网络穿透与P2P优化完整解决方案 【免费下载链接】NatTypeTester 测试当前网络的 NAT 类型&#xff08;STUN&#xff09; 项目地址: https://gitcode.com/gh_mirrors/na/NatTypeTester 在当今分布式网络环境中&#xff0c;NAT类型检测已成…

张小明 2026/1/10 15:13:24 网站建设

在哪里可以学习做网站推广之家邀请码

手把手教你配置 Keil Proteus 联调环境&#xff08;教学实战版&#xff09;在单片机教学和嵌入式入门开发中&#xff0c;有没有遇到过这些问题&#xff1f;代码写完了&#xff0c;烧进开发板却发现LED不亮&#xff1b;改一次程序就要拔插一次下载器&#xff0c;学生排队等实验…

张小明 2026/1/7 6:59:03 网站建设