簡體   English   中英

不知道ROS代碼的含義,也看不懂ros wiki的例子

[英]I don't know the meaning of the ROS code,and I can't understand the example of ros wiki

我期待這段代碼的詳細描述。 謝謝

rosbag::Bag  bag(rosbag, rosbag::bagmode::Read);//read bag?
rosbag::View view(bag, rosbag::TopicQuery(topics));//create a view on a bag.
BOOST_FOREACH(rosbag::MessageInstance const m, view){}//what?
const std::string& topic_name = m.getTopic();
if (topic_name == topics[0])//what?
{
  dvs_msgs::EventArray::ConstPtr msg = 
  m.instantiate<dvs_msgs::EventArray>();
  if (msg != NULL)
  {
    if(msg->events.empty())
    {
      continue;
    }
    const ros::Time& stamp = msg->events[0].ts;
  }
rosbag::Bag bag;
bag.open("test.bag", rosbag::bagmode::Read);

是的,這樣你就可以讀取包文件了

std::vector<std::string> topics;
rosbag::View view(bag, rosbag::TopicQuery(topics));

這將遍歷提供的包文件中的所有主題信息並推回主題

BOOST_FOREACH(rosbag::MessageInstance const m, view){}//what?

你在這里有一個錯誤, BOOST_FOREACH是宏,這里如何使用它

#include <boost/foreach.hpp>
#define foreach BOOST_FOREACH

包含頭文件,然后

foreach(rosbag::MessageInstance const m, view)
{
    const std::string& topic_name = m.getTopic();
    if (topic_name == topics[0])//what?
    {
      dvs_msgs::EventArray::ConstPtr msg = 
      m.instantiate<dvs_msgs::EventArray>();
      if (msg != NULL)
      {
         if(msg->events.empty())
         {
          continue;
         }
        const ros::Time& stamp = msg->events[0].ts;
      }
   }
}

這將遍歷每條消息, m.getTopic()這將獲取與當前消息對應的主題, msg是當前消息,而stamp是記錄該消息的時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM