UAVCAN 配置 - Arudcopter

1 篇文章 0 订阅

UAVCAN 配置

本文提供指导在Ardupilot上设置UAVCAN协议

Tips:首先UAVCAN协议应该被使能,应该参照CAN Bus Setup
详细的UAVCAN协议:https://uavcan.org/

CAN Bus Setup
本文主要教如何设置CAN bus ,并且哪些选项是必须设置的
使能CAN接口

每个物理端口能用CAN_PX_DRIVER参数关闭或者连接到相应的驱动,这里的X代表端口号,CAN_PX_DRIVER参数的值是驱动的ID。

  • 例子:最普通的设置为:有一个驱动并且所有的接口都连接上去,CAN_P1_DRIVER和 CAN_P2_DRIVER都应该设为1(第一个驱动)
    avatar
  • 改完记得重启
配置CAN接口

当使能CAN接口后,接着开始设置

  • CAN_PX_BITRATE 设置所需的传输速率,默认为1Mbit传输速率。
  • CAN_PX_DEBUG 允许输出调试信息
  • 当接口和驱动相关联,驱动将加载特定的协议
    avatar
CAN驱动的配置

配置CAN_PX_PROTOCOL参数,X代表驱动号

  • 设置如下:
    CAN_P1_PROTOCOL 1
    CAN_P2_PROTOCOL 0
  • 使能后代表将用虚拟驱动的协议
  • 重启设备

UAVCAN配置

目前有三个参数要设置

  • CAN_DX_UC_NODE 为 autopilot的节点ID
  • CAN_D1_UC_ESC_BM 使能发送ESC命令的bitmast
  • CAN_D1_UC_SRV_BM 使能发送servo命令的bitmast
    avatar
  • 为了节约带宽 CAN_D1_UC_ESC_BM和CAN_D1_UC_SRV_BM 应该设置为仅仅需要发送的马达或者servo信道信号
  • 例如在信道1、2、4配置CANservos,在信道3上配置ESC马达
    CAN_D1_UC_SRV_BM = 0x0B
    CAN_D1_UC_ESC_BM = 0x04

GNSS接收配置

若是GNSS连接到UAVCAN上,应该使能GPS子组参数,TYPE参数应该设置为9,对应Autopilote 的GNSS接收器

  • 配置如下图
    avatar

APM:

####CAN_D1_Parameters

  • CAN_D1_PROTOCOL:使能D1协议
CAN_D1_UC_Parameters
  • CAN_D1_UC_NODE:设置UAVCAN节点 (Range 1-250)
  • CAN_D1_UC_SRV_BM:RC输出通道
  • Bitmask
    0: Servo 1, 1: Servo 2, 2: Servo 3, 3: Servo 4, 4: Servo 5, 5: Servo 6, 6: Servo 7, 7: Servo 8, 8: Servo 9, 9: Servo 10, 10: Servo 11, 11: Servo 12, 12: Servo 13, 13: Servo 14, 14: Servo 15
  • CAN_D1_UC_ESC_BM:RC输出通道
  • Bitmask
    0: ESC 1, 1: ESC 2, 2: ESC 3, 3: ESC 4, 4: ESC 5, 5: ESC 6, 6: ESC 7, 7: ESC 8, 8: ESC 9, 9: ESC 10, 10: ESC 11, 11: ESC 12, 12: ESC 13, 13: ESC 14, 14: ESC 15, 15: ESC 16
  • CAN_D1_UC_SRV_RT:Servo输出速率 Range 1-200

####CAN_D2_Parameters
*

#CAN bus and UAVCAN protocol

Ardupilot里面支持CAN总线依赖两个部分

  1. 由HAL drivers支持的硬件CAN总线;
  2. UAVCAN协议,为了处理高水平工作。

#Ardupilot中支持的CAN总线
硬件CAN总线位于AP_HAL ku库中,由以下两个部分组成:

  1. CAN class 硬件和软件的连接
  2. CANManager class 用于封装所有的物理接口,提供可入点

接下来有指导,UAVCAN用于新的硬件,CAN 总线驱动实施roadmap:

CAN class

新的class应该基于AP_HAL::CAN class,该类负责管理硬件、RX和TX队列以及时间管理。必要的方法如下:

  • 构造函数(Constructor)
  • int init(const uint32_t bitrate, const OperatingMode mode)
    使用特定的bitrate和操作模式初始化硬件CAN控制器。 驱动程序应尝试尽可能接近地匹配指定的bitrate。操作模式可以是允许发送帧的正常模式,也可以是仅用于接收帧的静音模式。此函数仅在begin()内部使用。
  • bool begin(uint32_t bitrate)
    此函数应该用指定的bitrate初始化CAN接口
  • void end()
    完成CAN接口的实例化
  • void reset()
    用之前的设置去重新初始化接口
  • bool is_initialized()
    若是CAN接口初始化成功则返回ture
  • int32_t available()
    此函数返回RX队列的长度。
  • int32_t tx_pending()
    此函数返回要传输的消息数
  • bool canAcceptNewTxFrame(const uavcan::CanFrame& frame)
    如果可以将用于发送的新消息放入TX队列,则此函数返回true。
  • bool isRxBufferEmpty()
    检查Rx队列是否为空的函数
  • uint64_t getErrorCount()
    硬件故障总数和其他类型的错误(例如队列溢出)。如果接口未连接到总线,则可能会持续增加。
  • uint32_t getVoluntaryTxAbortCount()
    驱动程序执行库在第一次错误时中止传输的要求的次数。
  • unsigned getRxQueueLength()
    返回Rx队列中待处理的帧数。
  • bool hadActivity()
    从上一次调用此函数开始是否iface至少有一次成功的IO,这个设计为用IFACE LEDs.
  • int16_t send(const uavcan::CanFrame& frame, uavcan::MonotonicTime tx_deadline, uavcan::CanIOFlags flags)
    将新帧放入发送队列。还提供最大传输截止日期,若是超过最大截止日期,则将帧从队列中移除。这个flags可以是none或Loopback或AbortOnError的组合。
  • int16_t receive(uavcan::CanFrame& out_frame, uavcan::MonotonicTime& out_ts_monotonic, uavcan::UtcTime& out_ts_utc, uavcan::CanIOFlags& out_flags)
    该函数使用RX队列中的第一条消息填充传递的引用中的所有数据。

CANManager class

新class应该基于AP_HAL::CANManager class
必要的函数如下:

  • 构造函数(Constructor)
  • int init(const uint32_t bitrate, const PX4CAN::OperatingMode mode, uint8_t can_number)
    使用指定的bitrate和操作模式初始化指定的CAN接口。此方法仅仅在begin()函数内使用。
  • bool begin(uint32_t bitrate, uint8_t can_number)
    此函数应尝试使用指定的比特率初始化指定的CAN接口。
  • uavcan::CanSelectMasks makeSelectMasks(const uavcan::CanFrame* (&pending_tx)[uavcan::MaxCanIfaces])
    此函数返回选择掩码,指示哪些接口可用于读/写。
  • PX4CAN* getIface(uint8_t iface_index)
    返回对指定接口的引用
  • uint8_t getNumIfaces()
    返回接口数
  • bool hadActivity();
    自上次调用此方法以来,是否至少有一个iface至少有一个成功的IO。这设计为用iface活动的LEDs
  • bool is_initialized() override;
    若是CAN manager已经成功初始化则返回真。
  • void set_UAVCAN(AP_UAVCAN *uavcan)
    将指针存储到UAVCAN实例
  • AP_UAVCAN *get_UAVCAN(void)
    返回指向与此管理器连接的UAVCAN实例的指针

UAVCAN protocol

AP_UAVCAN class 是UAVCAN协议的基础,它负责通过CAN总线使用UAVCAN协议发送消息,接收消息,将消息转换为其他库可接受的形式,并提供Libuavcan的循环更新。
其支持以下消息:

  • 将1010.ArrayCommand传输到伺服系统
  • 接收1001.MagneticFieldStrength
  • 接受1028.StaticPressure
  • 接收1029.StaticTemperature
  • 将1030.RawCommand传输到ESC
  • 从GNSS收到1060.Fix
  • 从GNSS接收1061.Auxiliary
    在AP_UAVCAN类中处理所有传入消息,并将消息转换为最适合其他库的形式。 使用或传输数据的库不应包含来自UAVCAN模块的UAVCAN头文件,而应以所希望的方式将所有数据发送到AP_UAVCAN类。

初始化描述

以下初始化基于Pixhawk硬件,并作为示例提供。
avatar
根据电路板和底层硬件的类型,可能需要采取其他操作来创建CAN驱动程序和UAVCAN接口类。

  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
UAVCAN(Uncomplicated Application-level Vehicular Computing and Networking)是一种轻量级、开放源代码的网络协议,用于无人机(UAV)及相关设备之间的通信和互操作。 标准UAVCAN协议定义了一套通信规范,确保不同厂商的无人机和周边设备之间能够无缝地进行数据交换和通信。协议采用基于CAN总线的通信架构,提供了高效、可靠、实时的数据传输。 标准UAVCAN协议的特点包括: 1. 高性能:UAVCAN通过CAN总线进行数据传输,能够实现高带宽、低延迟的通信,满足无人机等实时应用的需求。 2. 灵活性:UAVCAN采用模块化设计,在协议中定义了多种数据类型和消息结构,以适应不同设备的通信需求。同时,协议支持动态节点配置和服务发现,方便设备之间的互操作。 3. 可扩展性:标准UAVCAN协议支持多种传输层,包括CAN、Ethernet等,以及多种物理介质,如串行线、无线电等。这使得协议在不同环境中都能适用,并便于未来的扩展和升级。 4. 安全性:协议提供了数据完整性校验和认证机制,以保证数据传输的安全性和可靠性。同时,UAVCAN还支持设备固件的更新和验证,确保系统的可信度。 通过标准UAVCAN协议,无人机及相关设备可以方便地实现互联互通,提高整个系统的性能和可靠性。这一开放的协议不仅推动了无人机领域的发展,还为其他领域的物联网应用提供了借鉴和参考。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gkbytes

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值