项目简介
本项目是UAVCAN协议栈在C++语言中的可移植参考实现,适用于嵌入式系统和Linux。UAVCAN是一种轻量级协议,专为航空航天和机器人应用中通过CAN总线进行可靠通信而设计。
项目的主要特性和功能
- 传输层实现:实现了UAVCAN协议栈的传输层,具备帧的解析、编码、发送和接收功能。
- 节点状态监控:可追踪和报告节点的健康状态、运行模式和软件版本等信息。
- 动态节点ID服务器:支持节点在运行时动态获取节点ID。
- 测试框架:采用Google的gtest测试框架,对协议栈各组件进行单元测试、集成测试和覆盖度测试。
- 内存管理:包含对内存池分配器的测试,保障内存管理的高效性和正确性。
安装使用步骤
依赖项
需要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】