首页 > 其他分享 >Cyber-cyber开发工具

Cyber-cyber开发工具

时间:2023-09-18 13:57:12浏览次数:33  
标签:record cc demo proto Cyber 开发工具 cyber 序列化

 

/*
cyber rt开发工具
    cyber record
        可以通过cyber recode将发布的话题消息序列化到磁盘,可以延时、反复使用数据,并可以对数据
        做二次处理
    常用cyber命令
        可以通过cyber rt内置的命令工具灵活的获取节点、话题、服务等相关信息,提高开发调试效率
*/
/*
    cyber record
        用于序列化(写磁盘文件)或反序列化(读磁盘文件)话题消息的一个工具集
        可以实现数据复用,在开发调试车载软件时降低成本提高效率
    需求
        通过cyber record将学生信息写入磁盘文件,并通过cyber record读取文件中的学生信息

    流程
        序列化
        反序列化
        编译并执行
    准备
        需要先准备protobuf数据,可以直接复用student.proto文件
        在demo_cc文件夹下新建tools目录,并在tools目录中新建BUILD文件

*/

///////////////////////////序列化cpp文件//////////////////////////////
// demo_cc/tools目录下新建c++文件demo01_record_write.cc
/*
    流程:
        1.初始化cyber框架
        2.创建recorder写对象
        3.设置写出参数
        4.打开文件流
        5.写出消息类型以及消息数据
        6.关闭文件流
*/
#include "cyber/cyber.h"
#include "cyber/record/record_writer.h"
#include "cyber/demo_base_proto/student.pb.h"

using apollo::cyber::record::RecordWriter;
using apollo::cyber::demo_base_proto::Student;

int main(int argc, char* argv[])
{
    apollo::cyber::Init(argv[0]);
    AINFO << "init...";
    RecordWriter writer;
    // 每一页的最大size
    writer.SetSizeOfFileSegmentation(0); 
    // 写interval时间后分页
    writer.SetIntervalOfFileSegmentation(0);
    // 打开文件流
    writer.Open("/apollo/cyber/demo_cc/tools/mytest.record");
    AINFO << "file : " << writer.GetFile();
    
    // 写出消息类型以及消息数据
    std::string channel = "chatter"; // 话题名称
    // 参数:话题名称,消息类型,描述
    writer.WriteChannel(channel, "apollo.cyber.demo_base_proto.Student", "test...");

    for(int i = 0; i < 100; i++){
        auto stu = std::make_shared<Student>();
        stu->set_name("zhangsan");
        stu->set_age(18);
        stu->set_height(1.76);
        
        // 将对象转化成字符串
        std::string content;
        stu->SerializeToString(&content);
        // 写出字符串
        writer.WriteMessage(channel, content, i);

    }

    // 关闭文件流
    writer.Close();


    return 0;
}

 

////////////////////////////////////////////////////////////////////

///////////////////////////BUILD文件/////////////////////////////////////////
cc_binary(
    name = "demo01_record_write_cc",
    srcs = ["demo01_record_write.cc"],
    deps = [
            "//cyber",
            "//cyber/demo_base_proto:student_proto_cc_lib"]

)

 

//////////////////////////////////////////////////////////////////////////

// bezal build cyber/demo_cc/tools/...
// source cyber/setup.bash

// ./bezal-bin/cyber/demo_cc/tools/demo01_record_write_cc



//////////////////////////////反序列化cpp文件//////////////////////////////////////
// demo_cc/tools目录下新建c++文件demo02_record_read.cc
#include "cyber/cyber.h"
#include "cyber/record/record_reader.h"
#include "cyber/demo_base_proto/student.pb.h"

using apollo::cyber::record::RecordReader;
using apollo::cyber::record::RecordMessage;
using apollo::cyber::demo_base_proto::Student;

int main(int argc, char* argv[])
{
    apollo::cyber::Init(argv[0]);
    AINFO << "init...";

    RecordReader reader("/apollo/cyber/demo_cc/tools/mytest.record");

    std::string channel = "chatter"; // 话题名称
    int64_t msg_count = reader.GetMessageNumber(channel); // 获取消息个数
    AINFO << "总共 " << msg_count << " 条消息";
    std::string msg_type = reader.GetMessageType(channel); // 获取消息类型
    std::string msg_desc = reader.GetProtoDesc(channel); // 获取消息描述
    AINFO << "消息类型:" << msg_type;
    AINFO << "消息描述:" << msg_desc;

    RecordMessage msg; // 存储消息

    for(int i = 0; i < msg_count; i++){
        if(reader.ReadMessage(&msg)){ // 读取消息
            AINFO << "第 " << i << " 条消息"
                  << "channel name: " << msg.channel_name
                  << "  content: " << msg.content
                  << "  msg time: " << msg.time;
        }
        else{
            AINFO << "消息读取失败";
        }

    }
    return 0;
}

 

/////////////////////////////////////////////////////////////////////////////
///////////////////////////BUILD文件/////////////////////////////////////////
cc_binary(
    name = "demo02_record_read_cc",
    srcs = ["demo02_record_read.cc"],
    deps = [
            "//cyber",
            "//cyber/demo_base_proto:student_proto_cc_lib"]

)

 

//////////////////////////////////////////////////////////////////////////

 

标签:record,cc,demo,proto,Cyber,开发工具,cyber,序列化
From: https://www.cnblogs.com/WTSRUVF/p/17542347.html

相关文章

  • Cyber-cyber常用命令
     /*cyber常用命令cyber_nodecyber_channelcyber_servicecyber_launchcyber_monitorcyber_record获取某个指令的使用说明cyber_xxx-h获取某个指令某个参数的使用说明cyber_xxxxxx-h......
  • Cyber-时间API
     /*日志头文件#include"cyber/common/log.h"#include"cyber/init.h"在#include"cyber/cyber.h"中已经包含了上述两个头文件*///日志初始化apollo::cyber::Init(argv[0]);//日志APIADEBUG......
  • Cyber-时间相关API
     /*时间相关APITime是一个用来管理时间的类;可用于当前时间的获取、耗时计算、时间转换等Duration相关接口,用于表示时间间隔,可以按照指定的纳秒或者秒进行初始化Rate接口一般用于休眠操作(会自动将频率换算成休眠时间)Timer可用于创建定......
  • GO语言集成开发工具环境-JetBrains GoLand 2023 Mac+win版
    JetBrainsGoLand是一款由JetBrains开发的集成开发环境(IDE),专门用于Go语言的开发。它提供了丰富的功能和工具,帮助开发者更高效地编写、调试和测试Go代码。→→↓↓载GoLand2023mac/win版 首先,GoLand具有强大的代码编辑功能。它支持代码自动补全、语法高亮、代码导航等功能,使......
  • 必须Mark!最佳HTML5应用开发工具推荐
    摘要:HTML5自诞生以来,作为新一代的Web标准,越来越受开发人员及设计师的欢迎。其强大的兼容性,一次开发,到处使用,大大减少了跨平台开发人员的数量及成本。特别在如今日新月异的移动时代,HTML5的才能更加得以体现。HTML5自诞生以来,作为新一代的Web标准,越来越受开发人员及设计师的欢......
  • 2023年值得推荐的 API 开发工具
    数字化时代,应用程序编程接口(API)的重要性愈发凸显。API充当着应用程序之间的桥梁,促进数据交换和功能集成。随着API的不断增加和复杂化,开发对API开发工具的要求也越来越高。我们一起来盘点下2023年上半年比较热门的API开发工具。API开发工具的主要作用API开发工具是一......
  • 关于为Jetbrains家开发工具建立快捷方式(linux)的两种方法
    前言考虑到jetbrains给出的安装包都是脚本命令语言,即后缀名为sh的文件,每一次打开都要使用Terminal打开,为了方便的打开,我们这里来创建一下快捷方式。方法一这是最为传统的方式,即书写一个desktop的文件,讲路径与图标写进去,授予其执行权限来实现,下面是实现方法。首先我们要创建一......
  • Scrum敏捷开发工具:高效企业必备
    ​随着软件开发行业的不断发展和进步,Scrum敏捷开发工具逐渐成为了备受关注的话题。Scrum是一种灵活且高效的项目管理方法,旨在提高团队协作和交付效率,使团队能够更快地响应变化和需求。本文将深入探讨Scrum敏捷开发工具的基本概念、使用方法、优势以及实际应用案例。一、Scrum......
  • JVS低代码开发工具基础篇:应用中心配置说明
    JVS应用中心是一个集中管理和提供企业级轻应用程序的平台或界面。它可以是类似企业轻应用的应用商店或者一个软件管理工具,用于管理者便捷的下载、上传、发布和安装各种企业级应用程序。应用中心功能介绍在JVS角色中有“应用管理员”的角色,如果赋予该角色,则用户为应用管理员,应用管理......
  • 利用敏捷开发工具实现敏捷项目管理的实践经验分享
    ​Scrum是目前运用最为广泛的敏捷开发方法,是一个轻量级的项目管理和产品研发管理框架,旨在最短时间内交付最大价值。Leangoo领歌是一款永久免费的专业敏捷研发管理工具,提供敏捷研发解决方案,解决研发痛点,打造成功产品。帮助团队实现需求、迭代、缺陷、任务、测试、发布等全方位研发......