拦路雨偏似雪花
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 总线设置
-
映射物理接口到哪个驱动器
CAN_P1_DRIVER = 1,2,3
CAN_P2_DRIVER = 1,2,3
CAN_P3_DRIVER = 1,2,3 -
配置CAN驱动程序
CAN_Dx_PROTOCOL = 0,1,4,6,7,8,10,11,12
-
配置后需要reboot.
-
CAN_PX_BITRATE 在此接口上设置所需的传输速率,通常默认使用的比特率为1 Mbit。
-
CAN_PX_DEBUG 允许输出调试消息,可以根据用户的偏好和需求设置调试级别。
-
参考文献:
【1】https://doc.cuav.net/tutorial/copter/advanced-configuration/canbus.html
【2】https://ardupilot.org/copter/docs/common-canbus-setup-advanced.html#
3. DroneCAN(UAVCAN)设置
-
DroneCAN的前身是UAVCAN。
-
Aurdupilot的UAVCAN驱动程序不支持当前版本的自动节点编号。所有节点都应明确设置ID。
-
CAN_DX_UC_NODE - 自动驾驶仪的节点ID。
-
CAN_D1_UC_ESC_BM - 允许发送ESC命令的位掩码。
-
CAN_D1_UC_SRV_BM - 允许发送伺服命令的位掩码。
-
UAVCAN是一种轻量级协议,旨在通过CAN总线在航空航天和机器人应用中实现可靠通信。 UAVCAN网络是分散的对等网络,其中每个对等体(节点)具有唯一的数字标识符 - 节点ID,并且仅需要为基本设置设置一个参数。
-
参考文献:
【1】https://doc.cuav.net/tutorial/copter/advanced-configuration/common-uavcan-setup-advanced.html
【2】https://ardupilot.org/copter/docs/common-uavcan-setup-advanced.html#dronecan-setup
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