• 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驱动没有有该磁罗盘型号的驱动?在线编译时没勾选??
  • 相关阅读:
    后端开发就是增删改查?
    业务拆分——微服务拆分独立出来的步骤
    java计算机毕业设计网上花店源码+系统+数据库+lw文档+mybatis+运行部署
    centos8 安装nginx
    刷爆LeetCode 字节技术官亲码算法面试进阶神技太香了
    Sentinel微服务流量治理组件实战下
    Python爬虫速成之路(3):下载图片
    k8s配置deployment解读
    全解MySQL之各方位事无巨细的剖析存储过程与触发器!
    通讯网关软件019——利用CommGate X2OPCUA实现OPC UA访问Oracle服务器
  • 原文地址:https://blog.csdn.net/weixin_43321489/article/details/134074487