5.5.1 使用“zero-copy”
功能背景
通信是机器人开发引擎的基础功能,原生ROS2 Foxy进行大数据量通信时存在时延较大、系统负载较高等问题。TogetheROS.Bot Foxy基于RDK系统软件库hbmem实现了“zero-copy”功能,数据跨进程传输零拷贝,可大大减少大块数据传输延时和系统资源占用。本节介绍如何使用tros.b Foxy和Humble创建publisher和subscriber node进行大块数据传输,并计算传输延时。
info
前置条件
已按照安装成功安装tros.b,并已掌握ROS2 node,topic,qos等基础知识,以及如何创建package和使用自定义消息,具体教程可见ROS2官方文档。
ROS2软件包构建、编译等工具。安装命令:sudo apt install ros-dev-tools
任务内容
1. 创建package
打开一个新的终端,source tros.b setup脚本,确保ros2
命令可以运行。
- Foxy
- Humble
source /opt/tros/setup.bash
source /opt/tros/humble/setup.bash
使用以下命令创建一个workspace,详细介绍可见ROS2 官方教程Creating a workspace。
mkdir -p ~/dev_ws/src
cd ~/dev_ws/src
运行以下命令创建一个package
ros2 pkg create --build-type ament_cmake hbmem_pubsub
2. 创建自定义消息
2.1 新建消息文件
运行以下命令,创建msg
目录用来存放自定义消息文件
cd ~/dev_ws/src/hbmem_pubsub
mkdir msg
在msg
目录下新建SampleMessage.msg
文件,具体内容如下:
int32 index
uint64 time_stamp
uint8[4194304] data
uint32 MAX_SIZE=4194304
2.2 编译依赖
返回到~/dev_ws/src/hbmem_pubsub
目录,修改package.xml
,在<buildtool_depend>ament_cmake</buildtool_depend>
下面添加以下内容:
<build_depend>rosidl_default_generators</build_depend>
<exec_depend>rosidl_default_runtime</exec_depend>
<member_of_group>rosidl_interface_packages</member_of_group>
2.3 编译脚本
修改CMakeLists.txt
,在# find_package(<dependency> REQUIRED)
下面添加以下内容,进行msg编译:
find_package(rosidl_default_generators REQUIRED)
rosidl_generate_interfaces(${PROJECT_NAME}
"msg/SampleMessage.msg"
)