robomaster-oss / rmoss_core

RoboMaster OSS中的基础项目,为RoboMaster提供通用基础功能模块包,如相机模块,弹道运动模块等。
Apache License 2.0
105 stars 17 forks source link

add improved component container for image pipeline #10

Closed gezp closed 2 years ago

gezp commented 2 years ago

解决https://github.com/robomaster-oss/rmoss_core/issues/8.

增加基于CamServerManagercomponent container,实现容器内节点之间图像直接传输,而不经过ROS通信机制。

gezp commented 2 years ago

benchmark test for image pipeline

测试命令:

# 下载代码
git clone https://github.com/robomaster-oss/rmoss_interfaces.git
git clone -b rmoss_cam_component_container  https://github.com/robomaster-oss/rmoss_core.git 
# 编译后运行命令
ros2 launch rmoss_cam benchmark.launch.py 

限于ROS Galactic版本的rclcpp_compoenet 并没有合并Rolling特性(为每一个Node分配一个独立专用线程),因此采用manual composition进行测试。在Intel(R) i7-8700主机上测试结果如下:

CPU: Intel(R) i7-8700 (6Cores 12Threads), Memory: 32GB delay time(s)
normal process 0.00249732
manual composition 0.00120593
manual composition with CamServerManager 0.000213741

使用CamServerManager 的manual composition的延迟比多进程ROS节点方法降低了90%左右,具有明显性能提升。

TomwKang commented 2 years ago

设备信息 NUC8 i5 bek CPU: Intel® Core™ i5-8259U CPU @ 2.30GHz × 8 Mem: 7.6 GiB

[benchmark_test-2] start test for normal process
[benchmark_test-2] result for <benchmark_cam1>:
[benchmark_test-2] fps:87.4122
[benchmark_test-2] delay:0.00527591
[benchmark_test-2] start test for normal component
[benchmark_test-2] result for <benchmark_cam2>:
[benchmark_test-2] fps:100.224
[benchmark_test-2] delay:0.00173974
[benchmark_test-2] start test for intra-component
[benchmark_test-2] result for <benchmark_cam3>:
[benchmark_test-2] fps:100.181
[benchmark_test-2] delay:0.00064917
[benchmark_test-2] start test for normal process
[benchmark_test-2] result for <benchmark_cam1>:
[benchmark_test-2] fps:92.7605
[benchmark_test-2] delay:0.00308627
[benchmark_test-2] start test for normal component
[benchmark_test-2] result for <benchmark_cam2>:
[benchmark_test-2] fps:100.195
[benchmark_test-2] delay:0.00188324
[benchmark_test-2] start test for intra-component
[benchmark_test-2] result for <benchmark_cam3>:
[benchmark_test-2] fps:100.198
[benchmark_test-2] delay:0.000420136
[benchmark_test-2] start test for normal process
[benchmark_test-2] result for <benchmark_cam1>:
[benchmark_test-2] fps:99.6199
[benchmark_test-2] delay:0.00496471
[benchmark_test-2] start test for normal component
[benchmark_test-2] result for <benchmark_cam2>:
[benchmark_test-2] fps:100.202
[benchmark_test-2] delay:0.00405021
[benchmark_test-2] start test for intra-component
[benchmark_test-2] result for <benchmark_cam3>:
[benchmark_test-2] fps:100.194
[benchmark_test-2] delay:0.00104779
gezp commented 2 years ago

test result on Raspberrypi 4B with 2GB RAM (ARM platform)

[benchmark_test-2] start test for normal process
[benchmark_test-2] result for <benchmark_cam1>:
[benchmark_test-2] fps:33.8542
[benchmark_test-2] delay:0.0388991
[benchmark_test-2] start test for normal component
[benchmark_test-2] result for <benchmark_cam2>:
[benchmark_test-2] fps:73.3764
[benchmark_test-2] delay:0.0212094
[benchmark_test-2] start test for intra-component
[benchmark_test-2] result for <benchmark_cam3>:
[benchmark_test-2] fps:100.203
[benchmark_test-2] delay:0.002392