首页 > 编程语言 >CyberRT-record-源码查看

CyberRT-record-源码查看

时间:2025-01-16 17:22:26浏览次数:1  
标签:补全 cc CyberRT cyber record 源码 file recorder

记录数据

Rosbag ROS

 ROS中通过record.cpp 调用Recorder 类来进行bag的保存
   rosbag record 的代码位于 ros_comm\tools\rosbag\src\recorder.cpp 中。实现的类主要为Recorder。 
        Recorder的接口,一共有4个。总的来说,录制bag包的流程分为2个部分,
		          一个流程订阅消息,并且放入队列,
				  另一个流程从队列中读取消息,并且保存到bag文件中。
				  
				doTrigger  
			01.subscribe 订阅指定的topic消息,并且返回Subscriber	  
				  
            02.订阅的消息通过doQueue来放入队列。
			  void Recorder::doQueue(const ros::MessageEvent<topic_tools::ShapeShifter const>& msg_event, 
			                         string const& topic,
									 shared_ptr<ros::Subscriber> subscriber, shared_ptr<int> count) {
			03.int Recorder::run()       { 启动了另一个线程record_thread来进行录制
			04.void Recorder::doRecord() { doRecord  读取消息,并且写入bag文件,其中会检查磁盘和是否超过最大间隔还没接收消息

Record CyberRT

 1.录制数据-工具 
  cyber_recorder 
    cyber_recorder 是一个功能强大的工具,支持录制、回放、查询、分割和修复 Cyber RT 的通信数据
	       record  play   info    split  recover 
    name = "recorder",
    srcs = [
           "recorder.cc", "info.cc",  "recoverer.cc", 
           "spliter.cc", "player/play_task.cc", "player/play_task_buffer.cc", 
           "player/play_task_consumer.cc", "player/play_task_producer.cc", 
           "player/player.cc",
       ],
    hdrs = [
           "recorder.h", "info.h", "recoverer.h", "spliter.h", 
           "player/play_param.h", "player/play_task.h", 
           "player/play_task_buffer.h", "player/play_task_consumer.h", 
           "player/play_task_producer.h", "player/player.h",
       ],
	    
	入口函数 
      cyber/tools/cyber_recorder/main.cc
	         auto recorder = std::make_shared<Recorder>(opt_output_vec[0], 
			                               opt_all,
                                           opt_white_channels,
                                           opt_black_channels, opt_header);
             bool record_result = recorder->Start();		  
	   
	   
	   
	   
2.定义的数据结构和文件结构以及操作
    01.record 结构   
        cyber/proto/record.proto 
        cyber/proto/proto_desc.proto
        cyber/record/file/section.h   只包含类型和长度 struct Section { proto::SectionType type;int64_t size; };
    02.record 读写
        cyber/record/file/record_file_base.h 
        cyber/record/file/record_file_reader
        cyber/record/file/record_file_writer
        cyber/record/[header_build record_base]
        cyber/record/record_reader     回放
        cyber/record/record_viewer      多通道回放 RecordViewer
        cyber/record/record_writer	    录制文件:按时间分段也可以按大小分段
    apollo_cc_library(
        name = "cyber_record",
        srcs = [
            "header_builder.cc",
            "record_reader.cc",
            "record_viewer.cc",
            "record_writer.cc",
            "file/record_file_base.cc",
            "file/record_file_reader.cc",
            "file/record_file_writer.cc",
        ],
        hdrs = [
            "header_builder.h",
            "record_base.h",
            "record_message.h",
            "record_reader.h",
            "record_viewer.h",
            "record_writer.h",
            "file/record_file_base.h",
            "file/record_file_reader.h",
            "file/record_file_writer.h",
            "file/section.h",
        ],
        deps = [
            "//cyber/common:cyber_common",
            "//cyber/proto:record_cc_proto",
            "//cyber/time:cyber_time",
            "@com_google_protobuf//:protobuf",
            "//cyber/message:cyber_message",
        ],
    )	    

命令行工具集

tools 
   cyber_node cyber_channel cyber_launch  cyber_monitor
   cyber_service  cyber_recorder
分为两类
    一类是通过python脚本	
        cyber/tools/cyber_channel/cyber_channel.py
        cyber/tools/cyber_launch/cyber_launch.py
        cyber/tools/cyber_node/cyber_node.py
        cyber/tools/cyber_performance/cyber_performance.py
        cyber/tools/cyber_service/cyber_service.py
            from cyber.python.cyber_py3 import cyber_time
            from cyber.python.cyber_py3 import cyber
            from cyber.proto.role_attributes_pb2 import RoleAttributes				
    一类是通过C++源码	
        cyber/tools/cyber_monitor
        cyber/tools/cyber_recorder
		   /recorder.cc	
自定义命令行  
    01.框架搭建和功能实现
	 
	 
    02.修改 tools 下的 BUILD 与 cyber_tools_auto_complete.bash 这两个配置文件	 
       BUILD 文件添加 cyber_param 的相关依赖
       cyber_tools_auto_complete.bash 文件需要添加如下内容
    03.修改 /apollo/cyber/setup.bash  setup.bash 中需要设置 cyber_param 相关参数 cyber/setup.bash
	    recorder_path="${cyber_tool_path}/cyber_recorder"
        launch_path="${cyber_tool_path}/cyber_launch"
		
		for entry in "${mainboard_path}" \
		 
	04. 编译
	其他--命令说明
      命令补全 任意的一个shell里面输入 com紧接着【tab】,这个是命令补全,只要命令在系统的shell的环境变量里,就可以补全,无需特别设置。	
             bash 提供的补全功能。默认的补全脚本保存在 /etc/bash_completion.d 目录下 		  
      命令参数补全 实现自动补全的功能,涉及到两个两个命令 complete 和 compgen
	          设置 complete 参数补全
			      complete -d 命令---设置命令的参数为 文件夹
				  complete -W "词组" 命令 ---设置命令的参数为词组
				  complete -F function  执行function函数,把函数中生成COMPREPLY作为候选的补全结果
		compgen(筛选命令) 这个命令,用来筛选生成 匹配单词的 候选补全结果 
		        -W wordlist  分割 wordlist 中的单词,生成候选补全列表
	    compopt(修改补全命令设置)这个命令可以修改补全命令设置,注意了,这个命令必须在补全函数中使用,否则会报错
              设置命令补全后不要多加空格  compopt -o nospace			

Python API

C++中开发程序并提供Python API通常涉及以下步骤:
	使用C++编写你的核心功能。
    使用Python的C API或者现代的方法,如Boost.Python、pybind11来创建Python可调用的封装。
 CyberRT是使用了 cyber_py3 中使用了ctypes importlib	,即Python的C API

 Python API有 cyber record 

如何使用API接口	
 Cyber RT Python API 
     from cyber.python.cyber_py3 import cyber
	 cyber.init()
	 if not cyber.ok():
	     pass 
	 cyber.shutdown()
如何定义python API接口
    cyber/python/cyber_py3/cyber.py
	  import ctypes
      import importlib
      from google.protobuf.descriptor_pb2 import FileDescriptorProto
cyber/python/cyber/python/cyber_py3
//cyber/python/internal:_cyber_wrapper.so"
//cyber/python/internal:_cyber_timer_wrapper.so
//cyber/python/internal:_cyber_parameter_wrapper.so
//cyber/python/internal:_cyber_record_wrapper.so

#include <Python.h>  自定义扩展类型  使用 ctypes 模块或 cffi 库
     Python API(应用程序编程接口)定义了一系列函数、宏和变量,可以访问 Python 运行时系统的大部分内容。
	 Python 的 API 可以通过在一个 C 源文件中引用 "Python.h" 头文件来使用。
cmake_minimum_required(VERSION 3.1)
project(LatLon2UTM)
include_directories(./include/)
SET(LIBLatLon2UTM_SRC src/LatLon2UTM.cpp)
# C++ 库
ADD_LIBRARY(LatLon2UTM_core SHARED ${LIBLatLon2UTM_SRC})
SET_TARGET_PROPERTIES(LatLon2UTM_core PROPERTIES OUTPUT_NAME "LatLon2utm_core")

参考

  rosbag record代码分析 https://zhuanlan.zhihu.com/p/438698296	
  百度Apollo智能驾驶之CyberRT__自定义cyber_param命令行工具 https://blog.csdn.net/qq_22701545/article/details/124539300
   rosbag record代码分析 https://zhuanlan.zhihu.com/p/438698296
   https://apollo.baidu.com/docs/apollo/latest/classapollo_1_1cyber_1_1record_1_1Recorder.html

标签:补全,cc,CyberRT,cyber,record,源码,file,recorder
From: https://www.cnblogs.com/ytwang/p/18675404

相关文章

  • 计算机毕业设计—92713 Springboot邻家优选超市线上线下购物系统小程序(源码免费领)
    摘 要21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存储达到准确、快速、完善,并能提高工作管理效率,促进其发展。论文主要是对邻家优选超......
  • 计算机毕业设计—92968 高校运动会信息管理系统设计与实现(源码免费领)
    摘 要本论文介绍了一个高校运动会信息管理系统的设计和实现过程。首先是高校运动会的需求分析和可行性分析,通过比较运动会的各个工作流程,确定了系统的数据流程和数据库结构,然后介绍了高校运动会信息管理系统开发所使用的软件开发工具,最后描述了系统的详细设计与实现。本......
  • 计算机毕业设计—92767 php 酒店预约管理系统 (源码免费领)
    摘 要随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,酒店预约管理系统当然也不能排除在外。酒店预约管理系统是以实际运用为开发背景,运用软件工程开发方法,采用Thinkphp技术构建的一个管理系统。整个开发过程......
  • 计算机毕业设计—312059 SSM新时代网咖管理系统(源码免费领)
      摘  要随着互联网时代的到来,同时计算机网络技术高速发展,网络管理运用也变得越来越广泛。因此,建立一个B/S结构的新时代网咖管理系统;新时代网咖管理系统的管理工作系统化、规范化,也会提高平台形象,提高管理效率。本新时代网咖管理系统是针对目前网咖管理系统的实际需......
  • 计算机毕业设计—311017 spring boot酒店预定系统(源码免费领)
    摘 要信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对酒店客房预定等问题,对酒店信息管理进行研究分析,然后开发设计出酒店预订系统以解决问题。......
  • 数字可调控开关电源设计(论文+源码)
    1设计要求在本次数字可调控开关电源设计过程中,对关键参数设定如下:(1)输入电压:DC24-26V,输出电压:12-24(可调);(2)输出电压误差:<0.1V;(3)开关频率:50KHZ;纹波范围:<200mV;最大转化效率:89%;(4)最大输出电流:4.2A;输入过压保护:36V。根据上述要求,在此将整个系统架构设计如图2.1所示,采用STM32F......
  • 基于单片机的书写坐姿规范提醒器的设计(论文+源码)
    1功能设计本课题为基于单片机的书写坐姿规范提醒器的设计,其主要针对学生在进行书写时,经常会出现坐姿不对等现象,这样长期下去会影响学生的身体健康,因此本系统在功能上设计如下:采用超声波传感器检测坐姿,如果距离太近,则通过语音播报“距离过近请注意坐姿”的提示信息;通过光敏电......
  • 【附源码】JAVA大学生竞赛管理系统源码+SpringBoot+VUE+前后端分离
    学弟,学妹好,我是爱学习的学姐,今天带来一款优秀的项目:大学生竞赛管理系统 。本文介绍了系统功能与部署安装步骤,如果您有任何问题,也请联系学姐,偶现在是经验丰富的程序员!一.系统演示系统测试截图   系统视频演示 https://githubs.xyz/show/343.mp4 二.系统概述 ......
  • 【附源码】JAVA课程管理系统源码+SpringBoot+VUE+前后端分离
    学弟,学妹好,我是爱学习的学姐,今天带来一款优秀的项目:课程管理系统 。本文介绍了系统功能与部署安装步骤,如果您有任何问题,也请联系学姐,偶现在是经验丰富的程序员!一.系统演示系统测试截图     系统视频演示 https://githubs.xyz/show/342.mp4 二.系统概述......
  • [源码免费下载]毕业设计源码信息分享下载(Android+微信小程序+管理系统)
     博主介绍:本人专注于Android/java/数据库/微信小程序技术领域的开发,以及有好几年的计算机毕业设计方面的实战开发经验和技术积累;尤其是在安卓(Android)的app的开发和微信小程序的开发,很是熟悉和了解;本人也是多年的Android开发人员;希望我发布的此篇文件可以帮助到您;......