littlebot
Published on 2025-04-07 / 0 Visits
0

【源码】基于C++的UAVCAN协议栈实现

项目简介

本项目是UAVCAN协议栈在C++语言中的可移植参考实现,适用于嵌入式系统和Linux。UAVCAN是一种轻量级协议,专为航空航天和机器人应用中通过CAN总线进行可靠通信而设计。

项目的主要特性和功能

  1. 传输层实现:实现了UAVCAN协议栈的传输层,具备帧的解析、编码、发送和接收功能。
  2. 节点状态监控:可追踪和报告节点的健康状态、运行模式和软件版本等信息。
  3. 动态节点ID服务器:支持节点在运行时动态获取节点ID。
  4. 测试框架:采用Google的gtest测试框架,对协议栈各组件进行单元测试、集成测试和覆盖度测试。
  5. 内存管理:包含对内存池分配器的测试,保障内存管理的高效性和正确性。

安装使用步骤

依赖项

需要Python 2.7或3.3及更高版本。本仓库包含Pyuavcan作为子模块,即使系统未安装pyuavcan也能构建库。

复制仓库

bash cd libuavcan git submodule update --init 若本仓库作为项目的git子模块使用,请在更新时使用--recursive

在Linux应用中使用

可将Libuavcan构建为静态库并全局安装到系统,步骤如下: bash mkdir build cd build cmake .. # 默认构建类型为RelWithDebInfo,如有需要可覆盖 make -j8 sudo make install 安装的组件包括:Libuavcan头文件和静态库、生成的DSDL头文件、Libuavcan DSDL编译器(Python脚本libuavcan_dsdlc)、Libuavcan DSDL编译器的支持库(Python包libuavcan_dsdl_compiler)。注意,Pyuavcan(Python实现的UAVCAN)不会被安装,若要在应用中使用Libuavcan的DSDL编译器,需单独安装。也可将库作为子模块使用,具体可参考Linux平台驱动附带的示例应用。

在嵌入式系统中使用

对于ARM目标,建议使用GCC ARM Embedded,其他符合标准的C++编译器也应可用。

使用Make

请参考UAVCAN网站的文档

使用CMake

若要使用CMake进行交叉编译,请按以下说明操作,需提供CMake工具链文件,示例中为Toolchain-stm32-cortex-m4.cmake。若不确定工具链文件是什么或如何准备,可参考Make部分。 bash mkdir build cd build cmake .. -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-stm32-cortex-m4.cmake make -j8

库开发

库开发过程假定主机操作系统为Linux,前提条件如下: - 具有GCC类似接口的C++11编译器(如GCC、Clang) - CMake 2.8+ - 可选:C++静态分析工具 - cppcheck(在Debian/Ubuntu上使用cppcheck包)

构建调试版本并运行单元测试: bash mkdir build cd build cmake .. -DCMAKE_BUILD_TYPE=Debug make -j8 make ARGS=-VV test 测试输出可在构建目录下的libuavcan中找到。注意,后缀为_RealTime的单元测试必须实时执行,否则可能产生误报,在虚拟机或高负载系统上运行可能失败。贡献者请遵循Zubax C++编码规范

使用Vagrant

可使用Vagrant设置兼容的Ubuntu虚拟镜像,按Vagrantup的说明安装VirtualBox和Vagrant,然后执行: bash vagrant up vagrant ssh mkdir build cd build mkdir build && cd build && cmake .. -DCMAKE_BUILD_TYPE=Debug -DCONTINUOUS_INTEGRATION_BUILD=1 注意,此构建需要-DCONTINUOUS_INTEGRATION_BUILD=1,因为实时单元测试在虚拟机上无法正常工作。可使用以下命令进行构建: bash vagrant ssh -c "cd /vagrant/build && make -j4 && make test" 或运行单个测试: bash vagrant ssh -c "cd /vagrant/build && make libuavcan_test && ./libuavcan/libuavcan_test --gtest_filter=Node.Basic"

使用Eclipse开发

可按以下方式生成Eclipse项目: bash cmake ../../libuavcan -G"Eclipse CDT4 - Unix Makefiles" \ -DCMAKE_ECLIPSE_VERSION=4.3 \ -DCMAKE_BUILD_TYPE=Debug \ -DCMAKE_CXX_COMPILER_ARG1=-std=c++11 上述命令中的../../libuavcan指向顶级CMakeLists.txt所在目录,需根据环境进行调整。注意,生成Eclipse项目的目录不能是源目录的子目录。

提交Coverity Scan构建

首先,获取Coverity构建工具,然后使用它构建库: bash export PATH=$PATH:<coverity-build-tool-directory>/bin/ mkdir build && cd build cmake <uavcan-source-directory> -DCMAKE_BUILD_TYPE=Debug cov-build --dir cov-int make -j8 tar czvf uavcan.tgz cov-int 然后将生成的存档上传到Coverity。推送到coverity_scan分支可触发自动检查。

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】