• ardupilot开发 --- CAN BUS、DroneCAN 、UAVCAN 篇


    1. CAN BUS、DroneCAN 、UAVCAN 区别

    • UAVCAN是一种轻量级协议,旨在通过CAN BUS 在航空航天和机器人应用中实现可靠通信。 UAVCAN网络是分散的对等网络,其中每个对等体(节点)具有唯一的数字标识符 - 节点ID,并且仅需要为基本设置设置一个参数。有关协议的详细说明,请访问https://uavcan.org/
    • DroneCAN的前身是UAVCAN。
    • 物理连接为CAN BUS,使用DroneCAN协议(驱动);
    • 如 CAN_P1_DRIVER=1, 即物理接口CAN1使用的是CAN_D1_PROTOCOL设置的驱动程序(数据交互协议)。
    • 大多数自动驾驶仪都有一个或两个CAN接口,用于连接不同的设备。ArduPilot最多可支持3个can接口。除了物理接口之外,还有一个表示特定协议的驱动器层和一个通过这些驱动器在CAN总线上通信的软件层(ArduPilot)。

    2. CAN 总线设置

    3. DroneCAN(UAVCAN)设置

    CANDrone 设备使用记录

    • 物理层:
      大多数运行ArduPilot的自动驾驶仪都有一个或两个CAN接口,用于连接不同的设备。ArduPilot最多可支持3个can接口。接口的设置可以提供冗余或最大吞吐量或两者的混合。这是通过三层方法实现的,除了物理接口之外,还有一个表示特定协议的驱动层和一个通过这些驱动程序在CAN总线上通信的软件层(ArduPilot)
      驱动层:
    • 软件层(ardupilot层)
      每个物理接口可以虚拟地连接到最多三个驱动程序中的一个,这些驱动程序代表要使用的协议。例如,最常见的情况是所有接口都连接到DroneCAN驱动器。这种设置将为具有最多三个CAN接口的设备提供冗余,并为具有一个CAN接口设备提供完整功能。
    • 每个物理端口都可以通过参数can_Px_driver关闭或连接到相应的驱动器,其中x是can端口的编号。该参数的值是将与该端口(接口)关联到驱动器的id。
    • 每个启用的总线/驱动器将使用一块RAM存储器(而非闪存),具体取决于驱动器的类型以及是否启用了CANFD。例如,DroneCAN默认情况下会为其驱动程序分配12KB(如果是CANFD,则为24K),但如果由其硬件定义文件设置,则根据其默认值,不同的板可能会有所不同。CAN_Dx_UC_POOL参数可用于更改池大小。所需的池大小取决于所连接的DroneCAN外围设备所需的总线流量,有时对于GPS或Compass等外围设备可以减少,而ESCs等外围设备需要更多的总线流量从而需要更大的池大小
    • 例如,最常见的设置将有一个驱动程序,所有接口都将连接到它。此配置中的CAN_P1_driver和CAN_P2_driver参数应设置为1(第一个驱动程序)。并且该驱动程序(CAN_D1_PROTOCOL)被设置为1(DroneCAN)。
    • 更改任何CAN_Px_DRIVER或CAN_Dx_PROTOCOL后,必须重新启动自动驾驶仪才能进行更改。
    • 启用接口并重新启动后,可以为每个启用的接口再设置两个参数:
      CAN_Px_BITRATE - sets the desired rate of transfer on this interface
      AN_Px_DEBUG - allows output of debug messages
      当任何接口与任何驱动程序关联时,该驱动程序将加载指定的协议
    • 应该将驱动程序设置为使用某些协议。目前支持DroneCAN设备,编号为1,以及许多CAN ESCs和其他设备。参数CAN_Dx_PROTOCOL,其中x是驱动程序的编号,应填写该驱动程序的协议编号。协议更改后,必须重新启动自动驾驶仪才能进行更改。
    • CAN ESCs:ESCs and Motors — Copter documentation (ardupilot.org)
    • Dronecan
      DroneCAN是一种轻量级协议,旨在通过CAN总线在航空航天和机器人应用中进行可靠通信。DroneCAN网络是一个去中心化的对等网络,其中每个对等(节点)都有一个唯一的数字标识符—node ID,这是基本设置只需要设置的一个参数。
      Detailed description of protocol can be found at https://uavcan.org/
      DroneCAN Adapter Node
    • 节点适配器
      用途:
      将 UART ports, I2C, SPI, and/or GPIOs设备映射成dronecan设备与飞控连接。例如:当飞控串口用完时可以用此节电器拓展串口。
    • 2HPGPS 使用can通信提示Node ID 冲突的解决办法:
      Ardupilot检测到candrone设备就会在database中记录一个node id,由于调试频繁插拔了can设备,导致多次记录相同的node id,因此会提示node id冲突。配置参数CAN_Dx_UC_OPTION即可解决问题:
      在这里插入图片描述
    • 2HP GPS使用串口通信,GPS的罗盘无法识别?Ardupilot中只有GPS驱动没有有该磁罗盘型号的驱动?在线编译时没勾选??
  • 相关阅读:
    GitHub常用命令
    【目标检测】基于深度学习的植物中草药智能识别系统【python源码+Pyqt5界面+数据集+训练代码 MX_001期】
    网页元素定位秘籍:从HTML探秘到Python自动化实战20240626
    双十一蓝牙耳机推荐哪款?发烧友推荐目前最值得入手的蓝牙耳机
    35【Aseprite 作图】苹果——拆解
    考研英语语法(十)
    Neo4j 基本语法
    html显示PDF并兼容IE浏览器的解决方案
    狂神说笔记 快速入门Nginx
    windows和ubuntu可互相ping通,无法连接xshell
  • 原文地址:https://blog.csdn.net/weixin_43321489/article/details/134074487