我已經在ros論壇上發佈了這個問題,但爲了覆蓋更大的用戶,我想再次發佈。如何知道/設置圖像拍攝的頻率(抓取)?
的問題是,我發現了頻率,我從兩個連續的回調之間,並且使用rostopic赫茲,是完全不同的時間計算......
隨着rostopic hz /pg_15508342/image_raw
我得到:
average rate: 99.681
min: 0.003s max: 0.017s std dev: 0.00093s window: 797
average rate: 99.683
min: 0.003s max: 0.017s std dev: 0.00098s window: 896
average rate: 99.682
min: 0.003s max: 0.017s std dev: 0.00100s window: 997
average rate: 99.682
min: 0.003s max: 0.017s std dev: 0.00098s window: 1097
average rate: 99.684
min: 0.002s max: 0.018s std dev: 0.00102s window: 1196
average rate: 99.681
min: 0.002s max: 0.018s std dev: 0.00106s window: 1296
average rate: 99.676
然而,從這個很短的代碼,其計算在其中同一主題的回調被調用的頻率,
#include <ros/ros.h>
#include <image_transport/image_transport.h>
#include <cv_bridge/cv_bridge.h>
#include <sensor_msgs/image_encodings.h>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <time.h>
#include <boost/timer.hpp>
#include <boost/thread.hpp>
#include <boost/thread/thread.hpp>
#include <boost/version.hpp>
#include "boost/bind.hpp"
#include "boost/bind.hpp"
#include <iostream>
using namespace std;
boost::posix_time::ptime time1;
boost::posix_time::time_duration timeloop;
double timeloop_sc;
int image_itr(0);
void imageCallback(const sensor_msgs::ImageConstPtr& msg)
{
//---
if(image_itr == 0)
time1 = boost::posix_time::microsec_clock::local_time();
timeloop = boost::posix_time::microsec_clock::local_time() - time1;
time1 = boost::posix_time::microsec_clock::local_time();
timeloop_sc = 1e-3* (double)timeloop.total_milliseconds();
cout << "itr " << image_itr++ << " fps: " << 1.0/timeloop_sc << endl;
}
int main(int argc, char **argv)
{
ros::init(argc, argv, "image_listener");
ros::NodeHandle nh;
cv::namedWindow("view");
cv::startWindowThread();
image_transport::ImageTransport it(nh);
image_transport::Subscriber sub = it.subscribe("/pg_15508342/image_raw", 1, imageCallback);
ros::spin();
cv::destroyWindow("view");
}
我GE t這個不一致的結果
itr 2198 fps: 100
itr 2199 fps: 111.111
itr 2200 fps: 90.9091
itr 2201 fps: 111.111
itr 2202 fps: 111.111
itr 2203 fps: 111.111
itr 2204 fps: 100
itr 2205 fps: 111.111
itr 2206 fps: 100
itr 2207 fps: 100
itr 2208 fps: 90.9091
itr 2209 fps: 125
itr 2210 fps: 100.
爲什麼這種差異的價值?另外,如果我從另一臺主機運行相同的代碼,但只添加cv::imshowfrom
,我甚至會得到一個完全不同的值。爲了更清楚,假設我正在使用local
機器,而我的ros節點是在onboard
機器上實現和編譯的。是從local
這樣做:
ssh [email protected]
rosrun package node
也許這是cv::imshowfrom
消耗大量帶寬的....但代碼應該onboard
機器上沒有local
的機器上運行,從而計算時間應該是相同的。
有關信息,我正在使用Point Gray相機Chameleon 3.至於驅動程序,我使用的是Kumar機器人驅動程序https://github.com/KumarRobotics/flea3的ROS flea3節點。我在ubuntu 16,4.6.4-040604-lowlatency內核上運行這個。
這些標籤與您的問題有什麼關係?這不是一個C++問題。這不是一個ssh問題... –
@AndersLindén我更新了我的問題 – Courier