Why does the running speed of ros1 software become slower when ported to ros2?

ROS 1 noetic:

#include <ros/ros.h>
int main(int argc, char** argv) {
    ros::init(argc, argv, "~");
    ros::NodeHandle nh("~");
    std::chrono::time_point<std::chrono::system_clock>
            start = std::chrono::high_resolution_clock::now();

    u_int64_t cout=0;
    for(int i=0;i<123456789;i++){
        cout++;
    }
    std::chrono::time_point<std::chrono::system_clock>
            end = std::chrono::high_resolution_clock::now();
    std::chrono::duration<double> duration = end - start;
    std::cout<<"cout: "<<cout<<std::endl;

    std::cout<<"Ros1 noetic(ms): "<<duration.count() * 1000<<std::endl;
    return 0;
}

ROS2 foxy:

#include <rclcpp/rclcpp.hpp>

int main(int argc, char** argv) {
    rclcpp::init(argc, argv);
    auto node = std::make_shared<rclcpp::Node>("test_ros");
    std::chrono::time_point<std::chrono::system_clock>
            start = std::chrono::high_resolution_clock::now();
    u_int64_t cout=0;
    for(int i=0;i<123456789;i++){
        cout++;
    }
    std::chrono::time_point<std::chrono::system_clock>
            end = std::chrono::high_resolution_clock::now();
    std::chrono::duration<double> duration = end - start;

    std::cout<<"cout: "<<cout<<std::endl;

    std::cout<<"Ros2 foxy(ms): "<<duration.count() * 1000<<std::endl;

    return 0;
}

Comparison of time consumption results:

This seems like difference in optimization modes. Please, make sure to build both in Debug or both in Release mode.

2 Likes