Моего 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) {
^
Ваш код не имеет смысла, msg - это массив, и вы пытаетесь получить к нему доступ, он просто не существует (в «msg-> package1»). –
Я считаю, что сообщения ROS (т. Е. * .msg файлы) скомпилированы в исходный код и связаны с проектом catkin_make. В этом процессе сообщение становится структурой. – errolflynn