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)设置

4. 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驱动没有有该磁罗盘型号的驱动?在线编译时没勾选??

5. SLCAN 工具

mission planner 中的 SLCAN 工具可以让 mission planner 访问连接到飞控的DroneCAN外设(DroneCAN node),以实现参数修改、固件更新等功能。
mission planner 连接DroneCAN外设有两种方法:

  • Using SLCAN directly
  • Using SLCAN over MAVLink

前者请参考
推荐使用后者:
(1)飞控通过USB连接PC后,mission planner 中将会出现两个Ardupilot连接:

  • Ardupilot mavlink
  • Ardupilot SLCAN
    在这里插入图片描述
    其中Ardupilot mavlink是missionplanner与飞控的正常连接;
    Ardupilot SLCAN则用于SLCAN连接。
    在4.5或更高版本,这两个连接都可以用作SLCAN和GCS的正常连接。

(2)任选其一,点击连接
(3)显示连接到的 can port1 或 can port2 的所有DroneCAN node

在这里插入图片描述
(4)查看 CAN bus上的 mavlink 消息
在这里插入图片描述)
在这里插入图片描述)
(5)如何回到正常连接 mission planner ?
切换到其他 tab,两秒后重新连接!!

6. 修改DroneCAN外设固件的参数

6.1 使用 mission planner

在这里插入图片描述

6.2 使用 DroneCAN GUI

参考:DroneCAN GUI
前提:打开SLCAN功能。

  • CAN_SLCAN_CPORT = 1
  • reboot
  • CAN_SLCAN_SERNUM = 0
  • Do not reboot
  • disconnect the mission planner
    使用步骤:
    (1)断开 mission planner
    (2)打开DroneCAN GUI ,选择对应的端口,点ok
    在这里插入图片描述
    (3)

下载:

  • windows
  • Linux: python3 -m pip install dronecan_gui_tool dronecan
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值