LoginSignup
3
2

More than 3 years have passed since last update.

ROSの画像メッセージをmapに格納する方法

Posted at

経緯

ROSの画像メッセージを一定量格納しておきたいな、と思うことがあったので、その方法を共有します。

やり方

C++のmapを使って画像データを格納します。注意点としては、画像メッセージはImageConstPtr型ではなくて、Image型を格納するという点です。最初、ImageConstPtr型で格納していたのですが、mapの格納した中身がすべて同じデータだったので、Image型を格納するようにしました。
以下がサンプルコードです。

sample.cpp
std::map<int, const sensor_msgs::Image> stock_rgb;

void callback(const sensor_msgs::ImageConstPtr& rgb_msg) {
  // Stock rgb image
  int stock_id = std::stoi(rgb_msg->header.frame_id);
  stock_rgb.emplace(stock_id, *rgb_msg);

  int get_id = std::stoi(yolo_msg_.header.frame_id);
  sensor_msgs::Image get_rgb = stock_rgb.at(get_id);
}

この場合は画像のframe_idをkeyにして、画像メッセージを格納しています。取り出すときは、keyをもとにatを使えば取り出せます。格納するときにinsertを使うと、なぜかうまくいかなかったので、emplaceを使っています。mapについてはこちらの記事が詳しかったので参考にしました。

まとめ

ImageConstPtrとImageでたまに混乱する。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2