@@ -577,21 +577,23 @@ void MqttClient::ros2mqtt(
577
577
uint32_t payload_length = msg_length;
578
578
uint32_t msg_offset = 0 ;
579
579
if (ros2mqtt.stamped ) {
580
+
580
581
// allocate buffer with appropriate size to hold [S, R]
581
582
msg_offset += stamp_length_;
582
583
payload_length += stamp_length_;
583
584
payload_buffer.resize (payload_length);
585
+
586
+ // copy serialized ROS message to payload [-, R]
587
+ std::copy (serialized_msg->get_rcl_serialized_message ().buffer ,
588
+ serialized_msg->get_rcl_serialized_message ().buffer + msg_length,
589
+ payload_buffer.begin () + msg_offset);
584
590
} else {
585
- // allocate buffer with appropriate size to hold [R]
586
- payload_buffer.resize (payload_length);
587
- }
588
591
589
- // TODO: if not stamped, could create payload_buffer directly on top of
590
- // serialized_msg->get_rcl_serialized_message().buffer copy serialized ROS
591
- // message to payload [-, R]
592
- std::copy (serialized_msg->get_rcl_serialized_message ().buffer ,
593
- serialized_msg->get_rcl_serialized_message ().buffer + msg_length,
594
- payload_buffer.begin () + msg_offset);
592
+ // directly build payload buffer on top of serialized message
593
+ payload_buffer = std::vector<uint8_t >(
594
+ serialized_msg->get_rcl_serialized_message ().buffer ,
595
+ serialized_msg->get_rcl_serialized_message ().buffer + msg_length);
596
+ }
595
597
596
598
// inject timestamp as final step
597
599
if (ros2mqtt.stamped ) {
0 commit comments