2016-01-08 1 views
1

Моего ROS сообщения прост:Отправка массива C на ROS с помощью сообщений

int8[64] packet1 

я публикую в моем говорящем узле с:

terp::Packet1 msg; 
msg.packet1={0,1,0,1,0,1}; 
ROS_INFO("Packet in string form: %s", msg->packet1); 
chatter_pub.publish(msg); 
ros::spinOnce(); 

Я получение в моем прослушивания узла с:

void resolve_input1(const uint8_t msg[]) { 
    if (sizeof(msg->packet1)/sizeof(msg->packet1[0])<MAX_MSG_LEN) { 
    memcpy(msg1,msg->packet1); 
    ROS_INFO("I heard: [%s]\n",msg1); 
    } else 
    ROS_ERROR("Message from node 1 too long"); 
} 

Однако при выполнении проекта я получаю сообщение об ошибке:

listener.cpp:16:19: error: request for member 'packet1' in '*msg', 
which is of non-class type 'const uint8_t {aka const unsigned char} 
    if (sizeof(msg->packet1)/sizeof(msg->packet1[0])<MAX_MSG_LEN) { 

декларация изменившихся resolve_input1 к:

void resolve_input1(const terp::Packet1 msg) { 

EDIT: Избавился от этой ошибки, но теперь появляется новый один, который похож; подчеркивая мое замешательство о сообщениях:

listener.cpp:16:17 error: base operand of '->' has non-pointer type 
'const Packet1 {aka const terp::Packet1_<std::allocator<void> >}' 
    if (sizeof(msg->packet1)/sizeof(msg->packet1[0])<MAX_MSG_LEN) { 
       ^
+0

Ваш код не имеет смысла, msg - это массив, и вы пытаетесь получить к нему доступ, он просто не существует (в «msg-> package1»). –

+1

Я считаю, что сообщения ROS (т. Е. * .msg файлы) скомпилированы в исходный код и связаны с проектом catkin_make. В этом процессе сообщение становится структурой. – errolflynn

ответ

1

В resolve_input1msg имеет тип const uint8_t*, так что вы, вероятно, придется reinterpret_cast его const terp::Packet1* перед обращением к полям.

Update: Учитывая ваши изменения, просто измените msg-> на msg..

+0

Можете ли вы рассказать о reinterpret_cast? – errolflynn