【DRONECAN】(一)介绍

2023-05-16

DRONECAN

前言

笔者最近因为项目需要用到CAN通信,所以研究了一下飞控上基于CAN的协议,目前在Ardupilot和PX4中用的是DRONECAN,DRONECAN是基于CAN的通信协议,并且已经在无人机中广泛使用了。但是国内现在对DRONECAN的研究记录太少了,用的最多的还是基于串口的MAVLINK协议,可能还是跟串口协议简单有关吧。我个人感觉,CAN通信也不是非常困难,并且CAN的抗干扰性、通信速度和多点通信特点是串口不可比拟的,所以CAN还是非常有优势的。

这里是笔者使用DRONECAN中的Libcanard(C语言版本)实现的动态分配节点(DNA)功能,即添加很多个同样的设备都不会出现重复的ID。后面会逐步讲解如何实现。现在先总体介绍一下DRONECAN。

在这里插入图片描述

DRONECAN是什么?

DroneCAN的创建是为了继续开发广泛使用的UAVCAN v0协议。该协议已被证明是强大的和功能丰富的,并已广泛部署在商业无人机行业,并得到了行业合作伙伴的广泛支持。拟议引入的UAVCAN v1协议涉及对UAVCAN的更改,增加了复杂性,并没有为现有部署提供一个平滑的迁移路径。在无人机can联盟内部进行了长时间的讨论后,决定最好的解决方案是继续开发DroneCAN v0,并将其命名为DroneCAN。

所以DRONECAN和现在的UAVCAN是有一些区别的。

官方原文是这样说的:

DroneCAN was created to continue the development of the widely used UAVCAN v0 protocol. This protocol has proven itself as robust and feature rich and has been widely deployed in the commercial drone industry and enjoys broad support among industry partners. The proposed introduction of the UAVCAN v1 protocol involved changes to UAVCAN that increased complexity and did not offer a smooth migration path for existing deployments. After extended discussions within the UAVCAN consortium it was decided that the best solution was to continue development of DroneCAN v0 under the name DroneCAN.

主要特点

  • 详细的协议规范
  • 用于消息描述的DSDL消息描述语言
  • 用于分配 CAN 节点 ID 的 DNA(动态节点分配)。
  • 产生C和C++绑定的多种开放的DSDL编译器
  • 丰富的python实现
  • 用于诊断和设备配置的功能丰富的图形用户界面
  • 在ArduPilot和PX4自动驾驶仪中的成熟实现
  • AP_Periph和PX4 cannode工具包,可轻松创建功能丰富的外围设备

DRONECAN核心设计目标

  1. 民主网络——不应该有主节点。网络中的所有节点应具有相同的通信权限,不存在单点故障。
  2. 节点可以交换长有效载荷——节点必须提供一种简单的方式来交换无法放入单个can框架的大数据结构(如GNSS解决方案、3D向量等)。DroneCAN应该在协议级别自动进行传输分解和重组,对应用程序隐藏相关的复杂性。
  3. 支持冗余接口和冗余节点——这是与安全相关的应用程序的常见需求。
  4. 高吞吐量,低延迟通信——依赖于高频、硬实时控制环路的应用程序,需要一种低延迟、高延迟通信方法。
  5. 逻辑简单,计算要求低——DroneCAN的目标是各种嵌入式系统,从用于密集数据处理的高性能嵌入式板载计算机(例如,高性能linux驱动的机器)到资源极其有限的微控制器。后者对实现协议所需的逻辑量施加了严格的限制。
  6. 应明确定义通用高级功能——DroneCAN为通用高级功能定义了标准服务和消息,如网络发现、节点配置、节点固件更新、节点状态监控(自然发展为全车健康监控)、全网时间同步、动态节点ID分配(即插即用)等。
  7. 开放规范和参考实现——DroneCAN规范是开放的,可以免费获得;参考实现是根据MIT许可证的条款发布的。

欢迎感兴趣的小伙伴添加微信 Reed_UAV 进行交流:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【DRONECAN】(一)介绍 的相关文章

  • 解决Git中下载assets文件列表转圈问题

    打开的Git项目 这里我以PcapPlusPlus为例 这里一直转圈打不开 xff0c 使用F12开发者工具 xff0c 用箭头选中这个转圈得到一个网站 通过这个网站可直接打开看见assets里面的全部内容
  • Ubuntu安装CMake

    cmake所做的事其实就是告诉编译器如何去编译链接源代码 你也许想问不是有makefile吗 xff0c 为什么还要它 xff1f 这里就牵涉到跨平台问题 而且其语法也简单 卸载已经安装的旧版的CMake 非必需 apt get autor
  • gPRC基本介绍

    1 说明 gRPC英文全名为Google Remote Procedure Call xff0c 即Google远程过程调用 xff0c 是Google发布的一个高性能 通用的开源RPC框架 xff0c 2 gRPC定义 gRPC是一个现代
  • STM32的引脚模式

    文章目录 51单片机引脚模式STM32单片机的引脚模式上拉输入 GPIO Mode IPU下拉输入 GPIO Mode IPD浮空输入 GPIO Mode IN FLOATING模拟输入 GPIO Mode AIN推挽输出 GPIO Mod
  • Qt QMessageBox使用详解

    本文详细的介绍了QMessageBox控件的各种操作 xff0c 例如 xff1a 消息提示框的使用 判断消息提示框的按钮 标准图标和自定义图标 定时关闭 自定义样式等操作 本文作者原创 xff0c 转载请附上文章出处与本文链接 Qt QM
  • SpringBoot_实现基本增删改查(前后端分离版)

    目录 自学自编实现一个简单的增删改查 xff08 前后端分离版本 xff09 与大家一起分享 xff0c 一起交流和学习 xff01 xff08 1 xff09 程序入口 xff08 2 xff09 建立数据库文件 xff08 3 xff0
  • 云服务器调出图形化界面

    如果需要在云服务器 xff08 centos xff09 上安装软件 xff0c 而且用图形化安装 xff0c 此方法可行以作记录 方法 span class token comment 命令行依次执行 span span class to
  • 超级产品:喜茶,凭什么能估值90亿

    疫情期间 xff0c 呆在家里的这些人 xff0c 最怀念的莫过于以前那一段靠奶茶续命的的日子了 肺炎快点结束吧 xff01 我想出门晒太阳 xff0c 吹海风 xff0c 我想念喜茶了 喜茶居然成为这些人的一个生活场景符号了 喜茶是一家什
  • linux应用编程和网络编程

    注 xff1a 本文是对朱老师linux应用编程和网络编程课程的备忘引导性笔记 xff0c 主要是为了能够在学完后快速回忆起相关内容 本文主要记录了一些关键易忘性知识点并包含少量理解性内容 xff0c 遵循尽量精简的原则 xff0c 以尽量
  • bsp_uart_fifo

    bsp uart fifo h 模块名称 串口中断 43 FIFO驱动模块 文件名称 bsp uart fifo h 说 明 头文件 ifndef BSP USART FIFO H define BSP USART FIFO H
  • 记一次自镜像Docker启动失败ubuntu 安装tini

    使用ubuntu18 04打包镜像启动失败报错信息 xff1a bin sh 1 tini not found 需要安装tini 而ubuntu本身软件源没有这个软件包 apt install y tini 报错 Unable to loc
  • Bluerov电池充电参数及过放补救方法

    Bluerov电池 1 Bluerov电池2 容量3 C rating xff08 放电倍率 xff09 4 充电电流5 充电注意事项及操作说明6 过放使用补救方法 xff08 但电池损耗已不可逆转 xff09 方法步骤 xff1a 1 B
  • Android Parcelable

    一 xff1a 是什么 xff1f Paracelable是android自己的实现序列化的接口 是anroid推荐使用的 那么什么事序列化呢 xff1f 简单来说就是将对象转换为可以传输的二进制流 二进制序列 的过程 这样我们就可以通过序
  • 字符串和字符串结束标志

    在C语言中 xff0c 是将字符串作为字符数组来处理的 例如 xff0c 如下程序 xff1a include lt stdio h gt int main char c 15 61 39 I 39 39 39 39 a 39 39 m 3
  • 单目相机标定方法总结

    单目相机标定的常用方法 xff0c 这里主要总结一下ROS和matlab标定工具箱 ROS相机标定 链接 xff1a https blog csdn net learning tortosie article details 7990125
  • Prometheus之修炼篇

    Prometheus之修炼篇 官方文档 xff1a https prometheus io 中文文档 xff1a 非官方 xff1a https songjiayang gitbooks io prometheus content 一 入门
  • QT视频播放不出来,报错 DirectShowPlayerService::doRender: Unresolved error code 80040266——没有安装视频解码器

    出错1 没有安装视频解码器 DirectShowPlayerService doRender Unresolved error code 0x80040266 出错2 文件路径不对或者文件名是中文的 DirectShowPlayerServ
  • ROS(1)编写第一个ROS程序(创建工作空间workspace和功能包package)

    一 先从三个方面去理解ROS xff1a xff08 自己查 xff0c 不详表 xff09 ROS是什么 xff0c 为什么使用ROS xff0c 如何使用ROS ROS xff08 Robot Operating System xff0
  • jetson nano TF卡镜像复制

    很重要的第一点 xff0c TF卡一定要进行格式化 xff0c 再进行其他操作 1 使用USB xff12 xff10 2 在win10无法将TF卡格式化成FAT32时 xff0c 使用DiskGenius xff0c 将TF卡格式化成FA

随机推荐

  • C++里数组名+1和数组名的地址+1的区别

    C C 43 43 里面的数组名字会退化为指针 xff0c 所以数组名a实际指的是数组的第一个元素的地址 而数组名作为指针来讲有特殊性 xff0c 它正在它所指向的内存区域中 xff0c amp a的值和a的数值是相同的 xff08 可以输
  • AD软件之模块化原理图

    首先我们创建两个原理图文件 然后我们在Sheet2 SchDoc里放置一个页面符并双击绿色的方框 选择目标文件 我们选择我们刚才创建的Sheet4 SchDoc 然后在 视图 gt 面板 gt Navigator选项 里点一下交互式导航 就
  • c语言中判断一个字符串是否包含另一个字符串

    1 使用库函数 string h strstr函数 函数名 strstr 功 能 在串中查找指定字符串的第一次出现 用 法 char strstr char str1 char str2 说明 xff1a 返回指向第一次出现str2位置的指
  • TCP协议-握手与挥手

    认识TCP协议 TCP全称为 传输控制协议 xff0c 这是传输层的一个协议 xff0c 对数据的传输进行一个详细的控制 特点 xff1a 面向字节流安全可靠面向连接 TCP协议段格式 源端口号与目的端口号 xff1a 这里与UDP的一样
  • C语言volatile的作用及使用场景介绍

    简介 volatile 先从基础的知识说起吧 xff0c 这样也有个来龙去脉 我们都知道 xff0c 程序运行后 xff0c 程序的数据都会被从磁盘加载到内存里面 xff08 主存 xff09 而当局部的指令被执行的时候 xff0c 内存中
  • SNMPv3报文

    相应的数字表示 xff08 对象标识符OID xff0c 唯一标识一个MIB对象 xff09 为 xff1a 1 3 6 1 2 1 4 3 图2 MIB树结构 当网络管理协议在报文中使用MIB变量时 xff0c 每个变量名后还要加一个后缀
  • 详解C语言中volatile关键字

    volatile提醒编译器它后面所定义的变量随时都有可能改变 xff0c 因此编译后的程序每次需要存储或读取这个变量的时候 xff0c 都会直接从变量地址中读取数据 如 果没有volatile关键字 xff0c 则编译器可能优化读取和存储
  • EtherCAT从站学习笔记——2.4通信模式

    在实际的控制系统中 xff0c 应用程序之间一般有两种类型的数据交换形式 xff1a 时间关键数据 time critical 和非时间关键数据 non time critial 时间关键表示特定的动作必须在确定的时间内完成或处理 xff0
  • 在linux下利用ls命令进行模糊查找

    如上图 xff0c 我们当前路径下有三个文件 xff0c 分别为helloworld c以及helloworld和1 c xff0c 直接输入命令ls则显示所有文件 xff0c 我们可以利用ls 加 的方向进行模糊查找 输入ls 目录名 形
  • 树莓派第一次开机自动连接WIFI(不用显示屏方法)

    当我们把树莓派系统镜像烧录到SD卡之后 xff0c 我们在windows看到的TF卡变成了空间很小的名为boot的盘 xff0c 我们在此目录下新建一个名为wpa supplicant conf空白文件 xff0c 并在其中加入以下代码 c
  • linux交叉编译时报错 libfreetype.so: file not recognized: File format not recognized

    root 64 ubuntu home linuxsystemcode 04th print info arm none linux gnueabi gcc finput charset 61 GBK o example1 example1
  • 神经网络epoch和batch的粗浅理解

    关于神经网络epoch和batch的理解 理解粗浅 xff0c 仅为个人想法 xff0c 提前感谢指正 epoch 一个epoch代表全部数据进入网络一次 xff0c 这个时候 xff0c 整个网络结构只对这批数据全部走完一次 xff0c
  • 目标检测与位姿估计(二十三):OpenCV+Aruco完成目标检测

    一份识别图像图像中所有Aruco的代码 include lt opencv2 core core hpp gt include lt opencv2 imgproc imgproc hpp gt include lt opencv2 hig
  • 随记(2):PP-Tracking工具

    目标跟踪任务意义 需求 xff1a 自动驾驶 智慧城市 安防领域面向车辆 行人 飞行器等快速运行的物体实时跟踪及分析 算法优势 xff1a 单纯的目标检测算法只能输出目标的定位 43 分类 xff0c 无法对移动的目标具体的运动行为及运动特
  • 【ROS&GAZEBO】多旋翼无人机仿真(一)——搭建仿真环境

    ROS amp GAZEBO 多旋翼无人机仿真 xff08 一 xff09 搭建仿真环境 ROS amp GAZEBO 多旋翼无人机仿真 xff08 一 xff09 搭建仿真环境 ROS amp GAZEBO 多旋翼无人机仿真 xff08
  • 【ROS&GAZEBO】多旋翼无人机仿真(三)——自定义多旋翼模型

    ROS amp GAZEBO 多旋翼无人机仿真 xff08 一 xff09 搭建仿真环境 ROS amp GAZEBO 多旋翼无人机仿真 xff08 二 xff09 基于rotors的仿真 ROS amp GAZEBO 多旋翼无人机仿真 x
  • 当使用CUBEMX,STM32F429阿波罗开发板的PCF8574与1-Wire冲突的解决办法。

    hello 大家好 xff01 距离上次写博客还是上半年呢 这几个月做了很多实验 xff0c 不过都很懒 xff0c 一直没有写上来 准备慢慢补回来 下面是我在使用原子哥的STM32F429的开发板做温度传感器项目的小实验时遇到的问题 1
  • 【ROS&GAZEBO】解决“is neither a launch file in package ”的问题

    这两天有小伙伴问到在安装完rotors后出现如下问题 xff1a 这个问题其实是ros环境没有配置好 xff0c 运行下面的命令 xff0c 将catkub ws加入ros的工作空间 span class token function mk
  • 【ROS&GAZEBO】多旋翼无人机仿真(七)——四元数姿态控制

    ROS amp GAZEBO 多旋翼无人机仿真 xff08 一 xff09 搭建仿真环境 ROS amp GAZEBO 多旋翼无人机仿真 xff08 二 xff09 基于rotors的仿真 ROS amp GAZEBO 多旋翼无人机仿真 x
  • 【DRONECAN】(一)介绍

    DRONECAN 前言 笔者最近因为项目需要用到CAN通信 xff0c 所以研究了一下飞控上基于CAN的协议 xff0c 目前在Ardupilot和PX4中用的是DRONECAN xff0c DRONECAN是基于CAN的通信协议 xff0