***[欢迎访问我的个人博客: $zengzeyu.com$](zengzeyu.com)***
前言
 用户界面显示后台处理结果
在自动驾驶领域,激光雷达与主机通过网线连接,实现二者的实时通信(主要是激光雷达发送扫描数据到主机)。同时,在接收到雷达数据之后,后台处理系统到前端用户显示界面,也需要通过上述方法进行通信,因为后台处理系统一般都不自带显示器,例如PX-2,TX2等平台就提供网线接口。
本文以速腾聚创公司16线激光雷达生成数据,处理后台系统处理后点云为例,进行分割分类数据传输到前端用户界面进行显示。
主要用到了以下两个方面:
- boost::serialize 和 boost::deserialize 函数
- socket sendto() 和 recvfrom() 函数
本文首先介绍不使用boost序列化方法进行传输方法,之后再介绍boost序列化方法进行数据传输的方法。主要梳理boost::serialize(序列化)和boost::deserialize(反序列化)相关内容,socket部分稍作介绍。关于二者的相关知识链接,请参阅底部参考文献。
1. 非序列化数据传输方法
1.1 数据类格式
非序列化数据传输方法中数据类表示如下:
struct CommunicationMsg
{
Header header;
PoseMsg pose;
char perceptions[20000];
}
header 和 pose为另外的数据类,perceptions为char型数据容器。在非序列化方法下,将CommunicationMsg通过socket进行传输时,必须保证接收端的CommunicationMsg也必须为同样的数据顺序格式,即header、pose和perceptions三者顺序以及结构必须保持一致。
1.2 发送端代码
非序列化发送端代码如下:
bool sendMsg(const std::vector<PerceptOutput> &datas, const Header &header, const PoseMsg &pose)
{
CommunicationMsg send_msg;
send_msg.header = header;
send_msg.pose = pose;
std::vector<PerceptResultMsg> msgs = con---
title: boost::serialize(序列化)和boost::deserialize(反序列化)类对象型数据并通过socket网络传输
date: 2018-05-02 22:55:54
categories: BOOST
tags:
- socket
- boost
- c++
---vertToMsg(datas);
/// origin send
std::string tmp_string = toString(msgs);
send_msg.header.length = static_cast<int>(tmp_string.size());
for(int i = 0; i < static_cast<int>(tmp_string.size()); ++i)
{
send_msg.perceptions[i]

本文探讨在自动驾驶领域如何利用boost::serialize和boost::deserialize进行序列化和反序列化,以实现激光雷达数据通过socket在网络中的高效传输。文中对比了非序列化传输的缺点,并详细介绍了侵入式序列化的方法,以及socket通信的相关代码示例。
最低0.47元/天 解锁文章
2962

被折叠的 条评论
为什么被折叠?



