raspberry-pi - 如果我将“raspicam_node/image”队列大小设置为 1,会发生什么?
问题描述
我无法从 raspberry pi cam 获取实时图像。所以我将队列大小从 100 调整为 1。
然后在性能上有所提高。
我想知道为什么会有性能改进。
int main(int argc, char** argv)
{
ros::init(argc, argv, "lane_driving");
ros::NodeHandle nh, nhp;
image_transport::ImageTransport it(nh);
pub = nhp.advertise<geometry_msgs::Twist>("/cmd_vel", 100);
subAD = nh.subscribe("arrowDetecter", 1,&arrowMessage);
subScan = nh.subscribe("/scan",1,&scanMsgCallback);
subOdom = nh.subscribe("/odom", 1,&odomMsgCallback);
image_transport::Subscriber sub = it.subscribe("/raspicam_node/image", 1, &poseMessageReceived, ros::VoidPtr(), image_transport::TransportHints("compressed"));
while(ros::ok()){
baseCmd.linear.x = 0.01;
pub.publish(baseCmd);
ros::spin();
}
解决方案
/raspicam_node/image
如果单个主题中到达的消息数量ros::spin()
大于queue_size
,则多余的消息将被丢弃。这意味着您的回调可能不会针对来自相机的每张图像运行。因此,您可能正在“丢弃”(而不是分析)一些相机帧。这将提供您观察到的性能改进。
这是否是您想要的取决于您的应用程序。