ROSを使っている方向けで、プログラムの中の計算処理時間の計測方法をご紹介します。

【ROS】プログラム内の計算処理時間の計測方法

プログラマーにとってプログラムの処理時間って典型的な問題ですよね。特に、実機を動かすROSユーザーにとっては重要なポイントです。

処理時間を短縮するためには、プログラム内のどの部分の処理が重いのか調べる必要があります。そこで、この記事では、ROSユーザー向けにプログラム内の計算処理時間の計測方法をご紹介します。

C++

ソースコード

#include <ros/ros.h>

int main(int argc, char** argv)
{
	ros::init(argc, argv, "mesureing_computation_time");
	ros::NodeHandle nh;

	ros::Time t_start = ros::Time::now();

	/*Start*/
	for(int i=0; i<10000; ++i){
		std::cout << "i = " << i << std::endl;
		std::cout << "time[s] = " << (ros::Time::now() - t_start).toSec() << std::endl;
	}
	/*End*/

	std::cout << "Computation is done" << std::endl;
	std::cout << "Computation time[s] = " << (ros::Time::now() - t_start).toSec() << std::endl;

	return 0;
}

解説

  • ros::Time
    ROS上での時間を表現し、足し算引き算もできる
  • ros::Time::now()
    ROS上での現時刻を取得する
  • toSec()
    ROS上での時間を秒に変換する

Python

ソースコード

#!/usr/bin/env python

import rospy

def main():
    rospy.init_node('mesureing_computation_time', anonymous=True)

    t_start = rospy.get_time()

    ## Start
    for i in range(10000):
        print("i = ", i)
        print("time[s] = ", rospy.get_time() - t_start)
    ## End

    print("Computation is done")
    print("Computation time[s] = ", rospy.get_time() - t_start)

if __name__ == '__main__':
    main()

解説

  • rospy.get_time()
    現時刻を取得(単位:秒)

さいごに

ROSを使っている方向けで、プログラムの中の計算処理時間の計測する実装を公開しました。ソースコードの中のどの部分で処理時間がかかってしまっているのかを調べたいときなどに便利です。


以上です。

Ad.