我想访问ROS消息message_a
的第二个元素。
# ROS-Message message_a
Header header
message_b[] test
ROS消息1包含ROS消息2!
# ROS-Message message_b
Header header
uint32[] result
在我的主代码中,我使用数据类型message_a
通过消息测试循环进行for-each循环。
for ( message_a::Test1 test : message_a.message_b ) {
uint32_t c = test.result;
}
例如,如何访问message_b的第二个元素?我需要它,因为我想获得第二次测试的结果。
通过上面看到的for-each循环,它将循环遍历message_b
的所有元素。如何将这个for-each循环更改为一般的for循环?然后我可以从2循环到3 ...
答案 0 :(得分:0)
您可以将基于范围的(也称为for-each)循环更改为基于索引的for循环,该循环遍历测试42的第二,第三,...和最终结果:
std::size_t test_idx = 42; // Second element of results
std::size_t result_start = 1; // start from the second result
std::size_t result_end = your_msg_obj.test.at(test_idx).size(); // run until end of all in the given test
// For loop that iterates over all results in a given test
for ( std::size_t result_idx = result_start; idx < result_end; ++idx ) {
uint32_t c = your_msg_obj.test.at(test_idx).result.at(result_idx);
// ... fancy stuff
}
答案 1 :(得分:0)
ROS documentatation of messages解释说数组消息字段在C ++中以std::vector
的形式生成。在您的情况下,字段test
的类型为std::vector<message_b>
,字段result
的类型为std::vector<uint32_t>
。
C++ vectors可以通过服务方式访问,您可以在in this answer中找到它们。在您的情况下,应该可以通过索引简单地访问项目,例如:
for(size_t i = 0; i != your_message_a.test.size(); i++)
{
//Access the second result item of each test item
uint32_t c = your_message_a.test[i].result[1];
}