You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ROS2消息反序列化实现报错:序列化消息大小为0的初始化异常

ROS2反序列化报错:Wrongly initialized. Serialized message has a size of zero.

问题原因

你的代码存在两处关键错误,直接导致了该报错:

  • 变量名不匹配:反序列化段声明了serialize_test_msg,但后续操作却使用了未定义的new_msg,导致数据没有被正确拷贝到目标序列化对象中。
  • SerializedMessage结构未正确初始化:仅用数据大小初始化对象,未同步设置内部rcl_serialized_message_t的有效长度字段,ROS2无法识别到有效数据。

修复后的代码

void callbackCloudResponseMessage(const planning_interface::msg::Cloud & msg) {

    /* serialize */
    rclcpp::Serialization<planning_interface::msg::Cloud> cloudSerializer;
    rclcpp::SerializedMessage serialized_msg;
    cloudSerializer.serialize_message(&msg, &serialized_msg);

    uint8_t* serialized_data = serialized_msg.get_rcl_serialized_message().buffer;
    size_t serialized_size = serialized_msg.size();
    
    static uint8_t buf_test[FRAME_LENGTH_MAX+1];
    uint8_t *pmsg_test = buf_test + DATA_PAYLOAD;
    memcpy(pmsg_test, serialized_data, serialized_size);

    /* deserialize */
    planning_interface::msg::Cloud test_msg;
    // 同时指定初始大小和容量,确保对象能容纳数据
    rclcpp::SerializedMessage serialize_test_msg(serialized_size, serialized_size);
    // 拷贝数据到正确的序列化对象
    memcpy(serialize_test_msg.get_rcl_serialized_message().buffer, pmsg_test, serialized_size);
    // 显式设置有效数据长度
    serialize_test_msg.get_rcl_serialized_message().buffer_length = serialized_size;
    
    cloudSerializer.deserialize_message(&serialize_test_msg, &test_msg);

}

核心修复点

  • 替换未定义的new_msg为正确的serialize_test_msg变量
  • 使用双参数构造函数初始化SerializedMessage,同步指定数据大小和缓冲区容量
  • 显式设置buffer_length字段,让ROS2识别到序列化数据的有效长度

内容的提问来源于stack exchange,提问作者chakloong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 14:02:24