***[欢迎访问我的个人博客: $zengzeyu.com$](zengzeyu.com)***
前言
![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy8xMDAyODA1OC02Njg2YjcxNzQyNjA4NjlhLnBuZw?x-oss-process=image/format,png) 用户界面显示后台处理结果
在自动驾驶领域,激光雷达与主机通过网线连接,实现二者的实时通信(主要是激光雷达发送扫描数据到主机)。同时,在接收到雷达数据之后,后台处理系统到前端用户显示界面,也需要通过上述方法进行通信,因为后台处理系统一般都不自带显示器,例如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.p