当前位置: 首页 > news >正文

APM新添加UAVCAN设备

简介

UAVCAN是一种轻量级协议,旨在通过CAN总线在航空航天和机器人应用中实现可靠通信。要实现通信,最基本需要data_type_ id, signature、数据结构、设备程序初始化。

添加设备数据结构文件(.uavcan格式)

1.在以下路径添加设备数据结构文件,根据设备类型选择对应的文件夹。这里使用actuator示例。

/ardupilot/modules/DroneCAN/DSDL/uavcan/equipment/actuator

2.新添加2018.HimarkServos.uavcan(发布功能)和2019.HimarkStatus.uavcan(订阅功能)
在这里插入图片描述
3.在2018.HimarkServos.uavcan和2019.HimarkStatus.uavcan中添加数据类型:(参考其他uavcan文件格式)
在这里插入图片描述
!](https://img-blog.csdnimg.cn/d7639dd3bcc94717904cb09daf01db76.png)

使用libuavcan_dsdlc生成.hpp头文件

1.要生成.hpp文件,需要使用libuavcan_dsdlc编译生成,基于python,可以在wscript文件配置自动生成。(生成.hpp文件后可以注释这段代码)

参考路径:Ardupilot/ArduCopter/wscript
在文件内添加以下代码:
bld(# build libcanard headerssource=bld.path.ant_glob("modules/DroneCAN/DSDL/**/*.uavcan"),rule="python3 ${SRCROOT}/modules/uavcan/libuavcan/dsdl_compiler/libuavcan_dsdlc --outdir ${BUILDROOT}/modules/DroneCAN/libcanard/dsdlc_generated ${SRCROOT}/modules/DroneCAN/DSDL/uavcan ${SRCROOT}/modules/DroneCAN/DSDL/ardupilot ${SRCROOT}/modules/DroneCAN/DSDL/com ${SRCROOT}/modules/DroneCAN/DSDL/dronecan",group='dynamic_sources',
)

2.配置board类型 (以雷迅CUAVv5为例)

./waf configure --board CUAVv5

3.根据机架类型编译工程

./waf copter

4.在以下路径可以找到生成.hpp文件
在这里插入图片描述
5.复制对应的HimarServos.hpp与HimarkStatus.hpp文件到以下路径

/Ardupilot/libraries/AP_UAVCAN/dsdl/

6.如果需要自定义签名,则需要在HimarkServos.hpp\HimarkStatus.hpp文件中修改
在这里插入图片描述

UAVCAN新设备调用

1.包含新设备头文件

#include <AP_UAVCAN/dsdl/HimarkServos.hpp>
#include <AP_UAVCAN/dsdl/HimarkStatus.hpp>

2.新添加发布信息接口

// himark servo
static uavcan::Publisher<uavcan::equipment::actuator::HimarkServos>* srv_out_array[HAL_MAX_CAN_PROTOCOL_DRIVERS];

3.新添加订阅服务接口

// handler Himark servo status
UC_REGISTRY_BINDER(HimarkStatusCb, uavcan::equipment::actuator::HimarkStatus);
static uavcan::Subscriber<uavcan::equipment::actuator::HimarkStatus, HimarkStatusCb> *himark_srv_status_listener[HAL_MAX_CAN_PROTOCOL_DRIVERS];

4.在void AP_UAVCAN::init()函数中添加设备初始化

//servo
srv_out_array[driver_index] = new uavcan::Publisher<uavcan::equipment::actuator::HimarkServos>(*_node);
srv_out_array[driver_index]->setTxTimeout(uavcan::MonotonicDuration::fromMSec(2));
srv_out_array[driver_index]->setPriority(uavcan::TransferPriority::OneLowerThanHighest);
himark_srv_status_listener[driver_index] = new uavcan::Subscriber<uavcan::equipment::actuator::HimarkStatus, HimarkStatusCb>(*_node);
if (himark_srv_status_listener[driver_index]) {himark_srv_status_listener[driver_index]->start(HimarkStatusCb(this, &handle_himark_srv_status));
}

5.发布服务实现
在这里插入图片描述
6.订阅服务实现
在这里插入图片描述
7.在AP_UAVCAN.H添加HimarkStatusCb类
在这里插入图片描述
8.在uavcan类里添加函数接口

public:
/ himark srv output /
void himark_srv_send_actuator(void);
static void handle_himark_srv_status(AP_UAVCAN* ap_uavcan, uint8_t node_id, const HimarkStatusCb &cb);

结束

UAVCAN新设备已经添加完成,可通信测试。

相关文章:

APM新添加UAVCAN设备

简介 UAVCAN是一种轻量级协议,旨在通过CAN总线在航空航天和机器人应用中实现可靠通信。要实现通信&#xff0c;最基本需要data_type_ id, signature、数据结构、设备程序初始化。 添加设备数据结构文件(.uavcan格式) 1.在以下路径添加设备数据结构文件&#xff0c;根据设备类…...

【C++】string类基本用法

文章目录string类基本用法1. 为什么要学习string类&#xff1f;1.1 C语言中的字符串2. 标准库中的string类2.1 string类2.2 string类的常用接口说明小试牛刀1. 仅仅反转字母2. 字符串中第一个唯一字符3. 字符串中最后一个单词的长度string类基本用法 1. 为什么要学习string类&…...

KDZD耐电压高压击穿强度测试仪

一、技术参数 01、输入电压&#xff1a; 交流 220 V。 02、输出电压&#xff1a; 交流 0--50KV ; 直流 0—50kv 。 03、电器容量&#xff1a;3KVA。 04、高压分级&#xff1a;0—50KV&#xff0c;&#xff08;全程可调&#xff09;。 05、升压速率&#xff1a;0.1KV/s-…...

数组和指针面试题的补充(细的抠jio)

生命是一条艰险的峡谷&#xff0c;只有勇敢的人才能通过。 ——米歇潘 说明&#xff1a;用的vs都是x86的环境&#xff0c;也就是32位平台。 建议&#xff1a;对于难题来说&#xff0c;一定要配合画图来解决问题。 第一题&#xff1a; #include<stdio.h> int…...

Java多线程基础

文章目录Java多线程基础一、什么是进程与线程&#xff1f;二、线程和进程的区别【重点】三、线程的创建方式【重点】1. 继承Thread类2. 实现Runnable接口3. lambda 表达式四、Thread的常见属性线程中断自己定义一个标志位Thread类提供的静态方法线程的状态Java多线程基础 一、…...

爆品分析第5期 | 一条视频带货3700+,这款斋月不锈钢厨具套装火了!

俗话说民以食为天&#xff0c;吃在任何一种文化中都占据重要的位置&#xff0c;要做出一道美味佳肴&#xff0c;除了食材、烹饪者的自身厨艺之外&#xff0c;还少不了一口好锅。新冠疫情以来&#xff0c;全世界范围内的封闭让很多人养成了居家做饭的习惯&#xff0c;不仅为厨具…...

团队管理的七个要点

要掌握团队管理的要点和做好团队管理工作&#xff0c;不是一件容易的事&#xff0c;但也远非想象中那么难。首先&#xff0c;我个人比较推荐所有团队管理者都能阅读下《经理人参阅&#xff1a;团队管理》&#xff08;注意该书仅可其官网获得&#xff09;这本佳作。相信会为你带…...

Go语言容器之map、list和nil

一、map map和C中map一样&#xff0c;里面存放的是key-value键值对在Go中map是引用类型&#xff0c;声明语法&#xff1a;var map变量名 map[key的类型]value的类型package mainimport "fmt"func main() {var mp map[string]intmpls : map[string]int{"one&quo…...

软件测试的案例分析 - 闰年1

&#xff08;这是关于博客质量分的测试 https://www.csdn.net/qc) 我们谈了不少测试的名词, 软件是人写的, 测试计划和测试用例也是人写的, 人总会犯错误。错误发生之后, 总有人问: 为什么这个bug 没有测出来啊?! 我们看看一类简单的bug是如何发生的&#xff0c;以及如何预防…...

【强化学习】强化学习数学基础:值函数近似

值函数近似Value Function ApproximationMotivating examples: curve fittingAlgorithm for state value estimationObjective functionOptimization algorithmsSelection of function approximatorsIllustrative examplesSummary of the storyTheoretical analysisSarsa with …...

JVM系列——Java与线程,介绍线程原理和操作系统的关系

并发不一定要依赖多线程(如PHP中很常见的多进程并发)。 但是在Java里面谈论并发&#xff0c;基本上都与线程脱不开关系。因此我们讲一下从Java线程在虚拟机中的实现。 线程的实现 线程是比进程更轻量级的调度执行单位。 线程的引入&#xff0c;可以把一个进程的资源分配和执行调…...

C++打开文件夹对话框之BROWSEINFO

头文件 #include <shlobj.h> #include <windows.h> #include <stdio.h> using namespace std; 案例 string chooseFile(void) {//用户选择的路径&#xff0c;可以是TCHAR szBuffer[MAX_PATH] {0};然后再使用TCHAR 转char字符串&#xff0c;此处可以直接使…...

Nuxt项目配置、目录结构说明-实战教程基础-Day02

Nuxt项目配置、目录结构说明-实战教程基础-Day02一、Nuxt项目结构1.1资源目录1.2 组件目录1.3 布局目录1.4 中间件目录1.5 页面目录1.6 插件目录1.7 静态文件目录1.8 Store 目录1.9 nuxt.config.js 文件1.10 package.json 文件其他&#xff1a;别名二、项目配置2.1 build2.2 cs…...

单链表的头插,尾插,头删,尾删等操作

前言顺序表要求是具有连续的物理空间&#xff0c;并且数据的话是在这些空间当中是连续的存储。但这样会带来很多问题&#xff0c;比如说在头部或者说中间插入的话&#xff0c;效率不是很高&#xff1b;并且申请空间可能需要扩容&#xff0c;并且越往后一般来说都是异地扩容&…...

Qt扫盲-QProcess理论总结

QProcess理论使用总结一、概述二、使用三、通过 Channel 通道通信四、同步进程API五、注意事项1. 平台特性2. 不能实时读取一、概述 QProcess 其实更多的是与外面进程进行交互的一个工具类&#xff0c;通过这个类来启动外部进程&#xff0c;获取这个进程的标准输出&#xff0c…...

JAVA进阶 —— Steam流

目录 一、 引言 二、 Stream流概述 三、Stream流的使用步骤 1. 获取Stream流 1.1 单列集合 1.2 双列集合 1.3 数组 1.4 零散数据 2. Stream流的中间方法 3. Stream流的终结方法 四、 练习 1. 数据过滤 2. 数据操作 - 按年龄筛选 3. 数据操作 - 演员信息要求…...

Ubuntu Protobuf 安装(测试有效)

安装流程 下载软件 下载自己要安装的版本&#xff1a;https://github.com/protocolbuffers/protobuf 下载源码编译&#xff1a; 系统环境&#xff1a;Ubuntu16&#xff08;其它版本亦可&#xff09;&#xff0c;Protobuf-3.6.1 编译源码 cd protobuf# 当使用 git clone 下来的…...

驱动程序开发:FTP服务器和OpenSSH的移植与搭建、以及一些笔记

目录一、FTP服务器移植与搭建1、在ubuntu下安装vsftpd2、在window下安装FileZilla3、移植vsftpd到开发板上4、Filezilla 连接测试5、注意点二、开发板 OpenSSH 移植与使用1、移植 zlib 库2、移植 openssl 库3、移植 openssh 库4、openssh 使用测试三、关于u-boot上的操作及根文…...

优化改进YOLOv5算法之添加GIoU、DIoU、CIoU、EIoU、Wise-IoU模块(超详细)

目录 1、IoU 1.1 什么是IOU 1.2 IOU代码 2、GIOU 2.1 为什么提出GIOU 2.2 GIoU代码 3 DIoU 3.1 为什么提出DIOU 3.2 DIOU代码 4 CIOU 4.1 为什么提出CIOU 4.2 CIOU代码 5 EIOU 5.1 为什么提出EIOU 5.2 EIOU代码 6 Wise-IoU 7 YOLOv5中添加GIoU、DIoU、CIoU、…...

windows电脑pc如何使用svn获取文档和代码

一、安装svn 下载链接 也可通过其他方式下载 二、使用 2.1 随便找一个文件夹 2.2 点击右键&#xff0c;选择SVN Checkout 2.3输入网址 如当你在网页上访问时地址为https://10.197.78.78/!/#aaa/view/head/bbb 在这里不能直接填入&#xff0c;而是 https://10.197.78.78/sv…...

BURSTER 9235 (85437090) 应变片信号放大器

BURSTER 9235 (85437090) 应变片信号放大器品牌&#xff1a;BURSTER&#xff08;德国波司特&#xff0c;精密测量技术专家&#xff09;型号&#xff1a;9235内部订货号&#xff1a;85437090类型&#xff1a;直连式&#xff08;In-Line&#xff09;应变片传感器信号放大器一、核…...

保姆级教程:用snntorch在MNIST上训练你的第一个脉冲神经网络(附完整代码)

从零开始&#xff1a;用snntorch构建你的第一个脉冲神经网络手记 第一次接触脉冲神经网络&#xff08;SNN&#xff09;时&#xff0c;我被它模拟生物神经元放电的特性深深吸引。与传统人工神经网络不同&#xff0c;SNN通过离散的脉冲信号传递信息&#xff0c;更接近人脑的工作机…...

告别格式烦恼:哈工大深圳LaTeX论文模板的6大核心优势

告别格式烦恼&#xff1a;哈工大深圳LaTeX论文模板的6大核心优势 【免费下载链接】hitszthesis A dissertation template for Harbin Institute of Technology, ShenZhen (HITSZ), including bachelor, master and doctor dissertations. 项目地址: https://gitcode.com/gh_m…...

Mi-Create终极指南:三步快速创建专属小米手表表盘

Mi-Create终极指南&#xff1a;三步快速创建专属小米手表表盘 【免费下载链接】Mi-Create Unofficial watchface creator for Xiaomi wearables ~2021 and above 项目地址: https://gitcode.com/gh_mirrors/mi/Mi-Create 想要为你的小米手表打造独一无二的个性化表盘吗&…...

HunyuanVideo-Foley命令行教程:infer.py参数详解与批量音效生成脚本编写

HunyuanVideo-Foley命令行教程&#xff1a;infer.py参数详解与批量音效生成脚本编写 1. 环境准备与快速部署 在开始使用HunyuanVideo-Foley进行音效生成前&#xff0c;我们需要确保环境已经正确部署。本教程基于RTX 4090D 24GB显存显卡和CUDA 12.4优化环境。 1.1 镜像启动与…...

从乱码到清晰:一位开发者与iText7中文PDF的三年斗争史

从乱码到清晰&#xff1a;一位开发者与iText7中文PDF的三年斗争史 【免费下载链接】itext7-chinese-font 项目地址: https://gitcode.com/gh_mirrors/it/itext7-chinese-font "为什么我的PDF中文又变成方块了&#xff1f;" 这可能是每个Java开发者在处理中文P…...

2026年多模态AI前瞻:Qwen3-VL-2B开源生态发展潜力分析

2026年多模态AI前瞻&#xff1a;Qwen3-VL-2B开源生态发展潜力分析 1. 项目概述与核心价值 Qwen3-VL-2B-Instruct作为新一代开源视觉语言模型&#xff0c;代表了多模态AI技术的重要发展方向。这个模型不仅能够理解文本&#xff0c;更重要的是具备了"看"的能力——它…...

Gepetto核心工具详解:函数反编译、变量重命名与代码注释

Gepetto核心工具详解&#xff1a;函数反编译、变量重命名与代码注释 【免费下载链接】Gepetto IDA plugin which queries OpenAIs gpt-3.5-turbo language model to speed up reverse-engineering 项目地址: https://gitcode.com/gh_mirrors/ge/Gepetto Gepetto是一款集…...

Kimi-VL-A3B-Thinking Chainlit定制化开发:添加历史记录/多用户会话/图片标注功能

Kimi-VL-A3B-Thinking Chainlit定制化开发&#xff1a;添加历史记录/多用户会话/图片标注功能 1. 项目背景与模型介绍 Kimi-VL-A3B-Thinking是一款基于混合专家架构(MoE)的开源视觉语言模型(VLM)&#xff0c;在多模态推理和长上下文理解方面表现出色。该模型仅激活2.8B参数就…...

什么时候会触发FullGC

面试 1、老年代空间不足。应该让对象在年轻代多存活一段时间&#xff0c;不要创建过大的对象及数组。 2、元空间满了。说明此时&#xff0c;系统中要加载的类、反射的类和调用的方法较多。 3、MinorGC执行后晋升到老年代的平均大小大于老年代的剩余空间。...