2.1 cpp前置知识

img

  • 数据结构https://dsa.cs.tsinghua.edu.cn/~deng/ds/dsacpp/

  • cpp11 新特性

    • 智能指针
    • 移动语义:std::move
    • 原子变量,CAS操作(无锁同步)
    • Lambda表达式 ,std::functon可调用对象
    • 并发与多线程相关:std::thread, std::mutex, std::lock_guard
    • SFINAE特性(模板进阶)”Substitution Failure Is Not An Error”
  • 设计模式

    • 工厂模式
    • 单例模式
    • 观察者模式
  • 编译链接

    • Makefile
    • g++/gcc 编译

2.2 CyberRT源码文件夹

第一步:从基础库入手,读懂源码并仿写

img

第二步:编译FastRTPS,跑通FastRTPS

我使用的源码版本为:2.12.0

文档地址:

https://fast-dds.docs.eprosima.com/en/2.14.x/notes/previous_versions/previous_versions.html

编译文档:

https://fast-dds.docs.eprosima.com/en/2.14.x/installation/binaries/binaries_linux.html

编译安装的过程在上面的官网已经说得十分明白,我在这里说几个编译安装过程中可能遇到的BUG

  • 编译FastDDS所需的Cmake版本较高,请先升级Cmake版本
  • 在安装Foonathan memory这个库时,可能会出现如下问题
    • img

    • 这里是cmake找到了Foonathan memory这个库,从而不会去编译源码,导致安装失败,原因在于如果你的主机里安装了ROS2ROS2里有Foonathan memory相关的cmake文件,而ROS2里的这个库实际上是个空壳子。为了解决这个问题,只需要在编译Foonathan memory时先去把ROS2的环境变量注释了,一般来说是在.bashrc中,把下面的环境变量注释即可,编译完成后再解除注释

    • img

  • 在编译完成FastDDS后可以去跑一下example下的demo,官方给出的编译方式似乎有点问题,请按照下面这篇博文去做:

img

2.3 魔改源码

我修改后的源码如下:https://gitee.com/yang_lian/cmw