/CppTemplates

Cpp Templates

Primary LanguageC++MIT LicenseMIT

C++编程模版

在以往涉及到ROS的程序开发中,有一些通用问题阻碍了C++开发与调试工作的有序进行。我们希望构建一个标准化C++模板,模块化开发,辅以规范,以提高工作效率和代码质量。

Main Features

核心**:

  • 对项目进行模块化设计,对算法模块进行封装;
  • 完成功能与ROS部分的解耦;
  • 完成业务与算法的解耦
  • 执行多种规范,包括代码命名规范、格式规范、文档规范以及版本管理规范
  • 使用现代C++工具,包括

功能架构

  • 模块层-modules:包含可复用的功能子模块,以及公共算法库common
  • 业务层-app:实现业务流程,将各modules拼接起来以实现最终功能
  • 通信层-ros:利用ros实现数据订阅、发布的封装 image

代码规范

  • 命名规范:Google style (文件、变量、函数、命名空间…)
  • 代码格式化:Clang-format、CMake-format
  • 静态检查:Clang-tidy
  • 单元测试:Gtest
  • 注释编写、文档生成:Doxygen
  • 版本管理:Git

开发工具

  • 编辑器: VisualStudio Code
  • 开发环境:Docker + DevContainer 插件
  • 代码Debug: CMake Tools插件 + gdb
  • common tool (公共工具类)
    • datatype: 自定义数据类型
    • logger: 基于glog的日志系统
    • configs: yaml参数文件读取
    • benchmark: 运行时间、性能分析

Prerequisite

  • OS:Ubuntu18.04
  • Editor:VisualStudio Code
  • Editor Add-ons:
    • DevContainer
    • CMake Tools;
    • Doxygen Documentation Generator
  • Packages:
    • ROS Melodic
    • GCC >=7.5
    • CMake >=3.10.2
    • Doxygen
    • Docker

Usage

Docker

  • 本项目提供Docker环境,支持开箱即用
  • 需要先进行环境配置,详见VSCode Docker开发环境配置
  • 配置好VSCode + Docker + Devcontainer插件后,进入.devcontainer文件夹,点击Open Folder in Containers即可自动配置好Docker

Adjust the template to your needs

  • Use this repo as a templete.
  • Modify /ros/ros_example.cc and /app/app_example.cc and etc.

Build and run the example

# Build with cmake
mkdir build
cd build
cmake ..
make
# Build with catkin_make
cd .. && mkdir -p catkin_ws/src
cp -r CppTemplates/ catkin_ws/src/
cd catkin_ws && catkin_make
# Run
./build/modules/example/module_example_test
roscore
./build/devel/lib/cpptemplates2/ros_example

FAQ

Related projects

  1. ros添加修改为include(ros/ros.cmake)
    1. 与add_subdirectory(ros)区别: 内容一致, include 可理解为直接拷贝过来
    2. 使用 add_subdirectory(ros), 会出现无法找到project问题, 引起catkin_package()报错
    3. catkin_package(), 必须使用, 其会自动生成本包的宏, 由此支持roslaunch等功能
    4. catkin_package() 需和package.xml配合且在同一目录
    5. 由于package.xml需再项目顶层, 因此需要使用 xxx.cmake)