首页 > 解决方案 > 如果我将“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();
  }

标签: raspberry-picameraros

解决方案


/raspicam_node/image如果单个主题中到达的消息数量ros::spin()大于queue_size,则多余的消息将被丢弃。这意味着您的回调可能不会针对来自相机的每张图像运行。因此,您可能正在“丢弃”(而不是分析)一些相机帧。这将提供您观察到的性能改进。

这是否是您想要的取决于您的应用程序。


推荐阅读