Cyber RT 开发工具

在Cyber RT中还提供了一些工具,这些工具可以拓展Cyber RT功能、提高开发调试效率,本章主要介绍这些工具的使用。

本章内容:
1.cyber record工具的应用;
2.常用命令工具的使用;

学习收获:
1.可以通过cyber record将发布的话题消息序列化到磁盘,可以延时、反复使用数据,并可以对数据做二次处理;
2.可以通过Cyber RT内置的命令工具灵活的获取节点、话题、服务等相关信息,提高开发调试效率。

cyber record

在开发调试过程中,实车路测是必不可少的环节之一,但是实车路测的人力成本和时间成本都是比较高为了降低研发成本,在Cyber RT中提供了工具: cyber record,它可以订阅消息并将之序列化(写)到文件,也可以从磁盘文件反序列化(读)并重新发布消息,这意味着我们可以在实际路测时,将所需数据其保存,后面再调试时可以直接回放数据,从而实现数据的复用。

概念
cyber record是用于序列化或反序列化话题话题消息的一个工具集。

作用
可以实现数据复用,在开发调试车载软件时降低成本提高效率。

需求
通过 cyber record 将学生信息写入磁盘文件,并再通过 cyber record 读取文件中的学生信息。

大致步骤如下:
1.序列化;
2.反序列化;
3.编译并执行。

准备:
需要先准备protobuf 数据,可以直接复用 student.proto文件;
在demo_cc文件夹下新建tools目录,并在 tools目录中新建BUILD文件;

1.序列化
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 const *argv[])
{// 1.初始化 cyber框架;apollo::cyber::Init(argv[0]);// 2.创建recorder写对象;RecordWriter writer;// 3.设置写出参数;writer.SetSizeOfFileSegmentation(0);writer.SetIntervalOfFileSegmentation(0);// 4.打开文件流;writer.Open("/apollo/cyber/demo_cc/tools/mytest.record");// 5.写出消息类型以及消息数据;//5.1话题//param1: 话题名词  param2: 消息类型 param3: 描述writer.WriteChannel("chatter","apollo.cyber.demo_base_proto.Student","test...");//5.2 消息for(size_t i=0;i<100;i++){//创建消息对象auto stu = std::make_shared<Student>();stu->set_name("feng");stu->set_age(7);stu->set_height(1.3);stu->add_books("C++1");stu->add_books("C++2");stu->add_books("C++3");//将对象转化为字符串std::string content;stu->SerializeToString(& content);//写出字符串writer.WriteMessage("chatter",content,1000+i);}// 6.关闭文件流。writer.Close();return 0;
}

BUILD文件:

cc_binary(name = "demo01_record_write",deps = ["//cyber","//cyber/demo_base_proto:student_cc"],srcs = ["demo01_record_write.cc"],
)

编译执行:
在这里插入图片描述

2.反序列化
demo_cc/tools 目录下新建C++文件 demo02_record_read.cc,输入如下内容:

/*需求:读取文件的Student数据。实现:1.包含头文件;2.初始化cyber框架;3.创建读取对象;4.读话题相关数据;5.读消息相关数据。
*///1.包含头文件;
#include "cyber/cyber.h"
#include "cyber/record/record_reader.h"
#include "cyber/record/record_message.h"using apollo::cyber::record::RecordReader;
using apollo::cyber::record::RecordMessage;int main(int argc, char const *argv[])
{// 2.初始化cyber框架;apollo::cyber::Init(argv[0]);// 3.创建读取对象;RecordReader reader("/apollo/cyber/demo_cc/tools/mytest.record");// 4.读话题相关数据;//声明读取的话题名称std::string channel = "chatter";//读取内容uint64_t count = reader.GetMessageNumber(channel);std::string msg_type = reader.GetMessageType(channel);std::string desc = reader.GetProtoDesc(channel);AINFO<<"消息数量: "<< count << ";";AINFO<<"消息类型: "<< msg_type<<";";AINFO<<"描述信息:" << desc;// 5.读消息相关数据。//创建 msg 对象,存储读到的消息RecordMessage msg;//编写循环读数据(解析消息)for(size_t i=0; i< count; i++){if(reader.ReadMessage(&msg)){//解析AINFO<<"话题名称:"<<msg.channel_name;AINFO<<"内容:"<<msg.content;AINFO<<"时间:"<<msg.time;AINFO<<"--------------------------------";}else{AINFO<<"读取失败";}}return 0;
}

BUILD 文件:

cc_binary(name = "demo02_record_read",deps = ["//cyber","//cyber/demo_base_proto:student_cc"],srcs = ["demo02_record_read.cc"],
)

在这里插入图片描述

常用命令

通信应用中可能会遇到的一些问题,比如:
调试时如何获取Cyber RT中运行的节点及其相关状态?
开发时编写完了发布节点,如何快速验证节点运行是否正常呢?如何判断消息发布的频率是否符合预期?
在Cyber RT中提供了一些命令工具,可以方便快捷的解决上述问题,常用的命令如下:
1.cyber_node;
2.cyber_channel;
3.cyber_service;
4.cyber_launch;
5.cyber_monitor;
6.cyber_record。

1.获取某个指令的使用说明,可以输入如下格式的命令

cyber_xxx -h

2.获取某个指令的某个参数的使用说明,可以输入如下格式的命令

cyber_xxx yyy -h

准备工作
启动多个节点,并在调用命令之前先加载环境变量

sourc cyber/setup.bash

1.cyber_node
用于获取Cyber RT中运行的节点的相关信息。

cyber_node list #列出所有运行中的节点
cyber_node info xxx	#输出某个节点或所有节点信息

在这里插入图片描述

2.cyber_channel
获取关于话题的相关信息。

cyber_channel list	#列出所有运行中的话题
cyber_channel info	#输出话题相关信息(发布者、订阅者、消息类型....)
cyber_channel echo	#输出话题消息
cyber_channel hz	#输出话题消息的发布频率
cyber_channel bw	#输出消息发布所占用带宽
cyber_channel type	#输出话题消息类型

在这里插入图片描述

3.cyber_service
获取关于服务的相关信息

cyber_service list	#列出所有运行中的服务
cyber_service info	#输出某个服务的相关信息

4.cyber_launch

用于 launch 文件的启动和关闭

cyber_launch start	#启动launch文件
cyber_launch stop	#关闭launch文件

5.cyber_monitor
cyber_monitor可以在一个单独的窗体中以一种更综合的方式显示话题相关内容。

用法:
cyter_monitor[option]
option:-h	输出提示信息-c	指定某个话题
通用命令:q | Q |Esc --退出Backspace --返回上一步h | H	--输出提示信息Common Commands for Topology and Channel Message:
常用命令PgOn| d --下一页PgUp | u--上一页w|W|up Arrow --上移一行s|S|Down Arrowe --下移一行d|D|Enter |Right Arrow --进入被选定的话题a|A|Left Arrow --返回上一层
消息显示相关命令:f|F -- 显示所有消息的频率t|T -- 显示消息类型Space -- 关闭或打开消息
进入某个话题后使用的命令:i|I -- 旦示话题的读写相关消息b|B -- 显示消息内容
显示消息重复字段的命令:n|N -- 重复字段的下一个元素m|M -- 重复字段的上一个元素, -- 关闭或打开重复显示字段的功能

在这里插入图片描述

6.cyber_recorder

cyber_recorder info		#显示已经存在的record文件信息
cyber_recorder play	# 回放record文件信息
cyber_recorder record 	#录制record文件
cyber_recorder split 分割	#record文件
cyber_recorder recover 	#复制record文件

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/517610.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Service Mesh:重塑微服务市场

摘要 今天我们不谈技术&#xff0c;不谈架构&#xff0c;也不谈具体的产品&#xff0c;我们来聊一聊在未来一两年之内&#xff0c;Service Mesh技术会在微服务相关的市场带来什么样的变化&#xff1f; 大家好&#xff0c;我是敖小剑&#xff0c;今天给大家带来的这个主题叫做…

JVM垃圾回收机制(GC)

目录 1.什么是垃圾回收 2.GC对于虚拟机各块的影响 3.垃圾回收具体是怎么展开的 3.1引入计数 3.2可达性分析(JVM使用的就是这种方法) 3.2.1.标记清除 3.2.2.复制算法 3.3.3标记整理 3.3分代回收 1.什么是垃圾回收 在C语言等编程语言中,采用的是动态内存管理,我们使用mal…

SQL无列名注入

SQL无列名注入 ​ 前段时间&#xff0c;队里某位大佬发了一个关于sql注入无列名的文章&#xff0c;感觉好像很有用&#xff0c;特地研究下。 关于 information_schema 数据库&#xff1a; ​ 对于这一个库&#xff0c;我所知晓的内容并不多&#xff0c;并且之前总结SQL注入的…

【Java JVM】Class 文件的加载

Java 虚拟机把描述类的数据从 Class 文件加载到内存, 并对数据进行校验, 转换解析和初始化, 最终形成可以被虚拟机直接使用的 Java 类型, 这个过程被称作虚拟机的类加载机制。 与那些在编译时需要进行连接的语言不同, 在 Java 语言里面, 类的加载, 连接和初始化过程都是在程序…

如何打造企业工厂的多元化展示?VR数字工厂告诉你

随着数字化进程推进以及互联网大数据等技术的发展&#xff0c;很多行业逐渐开始了数字化转型&#xff0c;而企业工厂也需要与时俱进。VR数字工厂需要多元化展现自身实力&#xff0c;并打造专属于自己的AI数字人名片&#xff0c;力求在市场中凸显自己&#xff0c;那么如何利用VR…

短剧系统开发:一种新型的娱乐方式

一、引言 随着科技的快速发展&#xff0c;人们的生活方式也在逐渐改变。在娱乐领域&#xff0c;短剧作为一种新型的娱乐方式&#xff0c;正在受到越来越多人的喜爱。短剧以其短小精悍、情节紧凑、易于观看等特点&#xff0c;迅速占领了市场。因此&#xff0c;开发一款短剧系统…

计算机的基础知识

计算机的特点及应用&#xff1a; 图灵说–计算就是基于规则的符号串变换从20世纪80年代开始&#xff0c;发达国家开始研制第五代计算机&#xff0c;研究的目标是能够打破以往计算机固有的体系结构&#xff0c;使计算机能够具有像人一样的思维、推理和判断能力&#xff0c;向智…

AI最新!雷军、许礼进、曹文泽、屠红燕发声

源自&#xff1a;上海证券报 “人工智能技术与咨询” 发布 尽快出台专项&#xff0c;以智能制造系统软件、AI大模型和通用仿生机器人的部署应用为重点产业突破方向&#xff0c;支持打造以大模型为代表的人工智能与制造业深度融合的应用场景&#xff1b; 加快整合人形机器人产…

未来娱乐新境界:探秘充气式球幕影院的奇妙世界

充气式球幕影院&#xff0c;这一融合科技与创意的娱乐新宠&#xff0c;正在引领我们踏上一场前所未有的奇妙旅程。它不仅仅是对视觉和感官体验的极致追求&#xff0c;更以其独特的魅力&#xff0c;让我们在观影中沉浸于前所未有的震撼与享受。 半球形梦幻观影空间&#xff1a; …

基础50刷题之一(交替合并字符串)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、题目二、力扣官方题解&#xff08;双指针&#xff09;三、文心一言解释总结 前言 刚上研一&#xff0c;有人劝我好好学C&#xff0c;当时用的不多就没学&a…

SQL Server基础指令(创建与检索)

数据库demo 数据库RUNOOB 表Websites 元素&#xff1a; 创建 创建数据库 create database xxx Create database school 创建数据表 create table xxx create table student 数据表插入记录 insert into 第一种形式无需指定要插入数据的列名&#xff0c;只需提供被插入的…

【应用多元统计分析】--多元数据的直观表示(R语言作图)

例1.2 为了研究全国31个省、市、自治区2018年城镇居民生活消费的分布规律&#xff0c;根据调查资料做区域消费类型划分。 指标&#xff1a; 食品x1&#xff1a;人均食品支出(元/人) 衣着x2&#xff1a;人均衣着商品支出(元/人) 居住x3&#xff1a;人均居住支出(元/人) 生活x4…