当前位置: 首页 > 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新设备已经添加完成,可通信测试。

http://www.lryc.cn/news/37159.html

相关文章:

  • 【C++】string类基本用法
  • KDZD耐电压高压击穿强度测试仪
  • 数组和指针面试题的补充(细的抠jio)
  • Java多线程基础
  • 爆品分析第5期 | 一条视频带货3700+,这款斋月不锈钢厨具套装火了!
  • 团队管理的七个要点
  • Go语言容器之map、list和nil
  • 软件测试的案例分析 - 闰年1
  • 【强化学习】强化学习数学基础:值函数近似
  • JVM系列——Java与线程,介绍线程原理和操作系统的关系
  • C++打开文件夹对话框之BROWSEINFO
  • Nuxt项目配置、目录结构说明-实战教程基础-Day02
  • 单链表的头插,尾插,头删,尾删等操作
  • Qt扫盲-QProcess理论总结
  • JAVA进阶 —— Steam流
  • Ubuntu Protobuf 安装(测试有效)
  • 驱动程序开发:FTP服务器和OpenSSH的移植与搭建、以及一些笔记
  • 优化改进YOLOv5算法之添加GIoU、DIoU、CIoU、EIoU、Wise-IoU模块(超详细)
  • windows电脑pc如何使用svn获取文档和代码
  • ROS1学习笔记:tf坐标系广播与监听的编程实现(ubuntu20.04)
  • ​力扣解法汇总1590. 使数组和能被 P 整除
  • Spring源码阅读(基础)
  • 服务搭建篇(九) 使用GitLab+Jenkins搭建CI\CD执行环境 (上) 基础环境搭建
  • CDC 长沙站丨云原生技术研讨会:数字兴链,云化未来!
  • A.特定领域知识图谱知识推理方案:知识图谱推理算法综述[二](DTransE/PairRE:基于表示学习的知识图谱链接预测算法)
  • 香港酒店模拟分析项目报告--使用tableau、python、matlab
  • 第18天-商城业务(商品检索服务,基于Elastic Search完成商品检索)
  • 5.2 对射式红外传感器旋转编码器计次
  • 【数据库概论】第九章 关系查询处理和查询优化
  • (WIP) my cloud test bed (by quqi99)