2013-04-13 13 views
6

2つの整数と2つの文字列を含む構造体の長さが不明なベクトルをパブリッシュするとします。これを行うことができるROSにパブリッシャとサブスクライバがありますか?構造体のベクトルのROSにメッセージをどのように公開しますか?

ない場合、私はtutorial of how to create custom messagesで見てきたと私は私が含む1つの.msgファイル作ることができます図:

int32 upperLeft 
int32 lowerRight 
string color 
string cameraID 

と、前のメッセージの配列を含む別の.msgファイルを。しかし、このチュートリアルでは配列の使い方の例は示していないので、2番目の.msgファイルに何を入れるべきかわかりません。さらに、C++プログラムでこのカスタムメッセージを使用する方法もわかりません。

これを行う方法についてのヒントは素晴らしいと思います!

答えて

3

最初のmsgはMyStructと呼ばれています。 MyStructsの配列であるMSGを持ってするには、フィールドでの.MSGだろう:

MyStruct[] array 

をその後のコードで、あなたは体mystructを作成し、すべての値を設定:次に

MyStruct temp; 
temp.upperLeft = 3 
temp.lowerRight = 4 
temp.color = some_color 
temp.cameraID = some_id 

を第二の.msgタイプに配列あなたの配列にMyStructsを追加するために、あなたが(ちょうどSTDと同じように::ベクトル)を一backを使用することができます。

MySecondMsg m; 
m.push_back(temp); 
my_publisher.publish(m); 
+0

push_backはmのメンバーではないと言われましたか?どうして ? – TravellingSalesWoman

+2

はい、 'm.array.push_back(temp)'にする必要があります。 – Avio

7

を少しだけを拡大して@Sterlingは、すでに説明したものを...

あなたが "test_messages" と呼ばれるプロジェクト(ひいてはディレクトリ)を持っている、とあなたはtest_messages/msgでメッセージのこれらの2つのタイプがある場合:

#include "test_messages/test.h" 
#include "test_messages/test_vector.h" 

... 

    ::test_messages::test test_msg; 

    test_msg.age   = 29; 
    test_msg.first_name = "Firstname"; 
    test_msg.last_name = "Lastname"; 
    test_msg.score  = 79; 

    test_pub.publish(test_msg); 


    ::test_messages::test_vector test_vec; 

    test_vec.vector_len = 5; 
    test_vec.vector_name = std::string("test vector name"); 

    for (int idx = 0; idx < test_vec.vector_len; idx++) 
    { 
     test_msg.age   = 50; 
     test_msg.score  = 100; 
     test_msg.first_name = std::string("aaaa"); 
     test_msg.last_name = std::string("bbbb"); 

     test_vec.vector_test.push_back(test_msg); 
    } 

    test_vector_pub.publish(test_vec); 

#> cat test.msg 
string first_name 
string last_name 
uint8 age 
uint32 score 

#> cat test_vector.msg 
string vector_name 
uint32 vector_len   # not really necessary, just for testing 
test[] vector_test 

あなたは、このC++のコードを書くことができます

関連する問題