背景:在同一网段下,arm-linux系统跑fast-dds运行的程序、电脑端虚拟机上运行ros2监控节点
通信前提环境需要
- ubtun操作系统下安装ros2:这采用小鱼的一行代码安装方式
wget http://fishros.com/install -O fishros && bash fishros
- 由于与ROS2匹配的DDS是RTPS标准的,是DDS的标准中的一个子集(可以直接使用FAST-DDS,代码存在细微差别,需要修改),这直接用DDS子集库FAST-RTPS库,与FAST-DDS编译方式完全一样,最后查看发现与FAST-DDS最后生成安装的文件存在不同。FAST-RPTS的编译参考文章FAST-DDS交叉编译
- idl文件生成API工具编译,参考文章fast-dds-gen编译
通讯实现步骤一:ROS需要
1.List item创建工作空间,创建自己的工作节点
mkdir dev_ws/src & cd /dev/src
ros2 pkg create --build-type ament_cmake helloworldtopic
cd helloworldtopic
gedit CMakeLists.txt
2.修改CMake添加
find_package(rosidl_default_generators REQUIRED)
rosidl_generate_interfaces(${PROJECT_NAME} “msg/HelloWorld.msg” )
gedit package.xml
修改xml文件,添加
<build_depend>rosidl_default_generators</build_depend>
<exec_depend>rosidl_default_runtime</exec_depend>
<member_of_group>rosidl_interface_packages</member_of_group>
mkdir msg
gedit msg/HelloWorld.msg
3.创建消息结构
int32 index
string message
4.编译环境中的节点并安装到ros
cd ../..
colcon build --packages-select helloworldtopic
source ./install/setup.bash
ros2 interface show helloworldtopic/msg/HelloWorld
通讯实现步骤二:FAST-DDS需要
1.从创建的工作空间中取出idl文件,文件目录为:
/dev_ws/build/helloworldtopic/rosidl_adapter/helloworldtopic/msg
2.使用fast-dds-gen工具生成通讯c++API以及example
/home/forlinx/Templates/DDS/Fast-DDS-Gen/scripts/fastddsgen -typeros2 -example CMake HelloWorld.idl
生成如下文件:
- 修改CMakeLists.txt,添加FAST-RPTS、FAST-CDR等库的寻找路径
添加:路径为自己生成库的路径
#配置C++编译器
set(CMAKE_CXX_COMPILER /home/forlinx/Templates/project/public/Tool/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++)
#配置C编译器
set(CMAKE_C_COMPILER /home/forlinx/Templates/project/public/Tool/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc)set(CMAKE_FIND_ROOT_PATH
/home/forlinx/Templates/project/public/3rd_party/Fast-DDS-python/Fast-CDR/build/build_arm64
/home/forlinx/Templates/project/public/3rd_party/Fast-DDS-python/Fast-RTPS/build/build_arm64
/home/forlinx/Templates/project/public/3rd_party/Fast-DDS-python/tinyxml2/build/build_arm64
/home/forlinx/Templates/project/public/3rd_party/Fast-DDS-python/foonathan_memory_vendor/build/build_arm64
# /home/forlinx/Templates/project/public/3rd_party/Fast-DDS-python/openssl/build_arm64
)set(OPENSSL_ROOT_DIR
/home/forlinx/Templates/project/public/3rd_party/Fast-DDS-python/openssl/build_arm64)
4.修改topic节点名:ros2识别需要在节点名前加rt/
这只改了发布者。
gedit HelloWorldPublisher.cxx
5. 编译
mkdir build & cd build
cmake ..
make
6. 将执行文件拷贝到目标板执行
运行测试
1.保证板子与ubtun在同一网段
- 板子端运行发布者
./HelloWorld publisher
- ubtun通过ros2检测节点,接收打印消息
4.至此通讯成功