技术文档CyberRT中的PythonA

从自动驾驶技术出发,Apollo开发者社区带你一起探索自动驾驶开发的奥秘,给每一位对自动驾驶充满热爱的你带来最实质的帮助,助力你的每一次研发。本文将介绍CyberRT中的PythonAPI教程,主要从以下几点为大家进行详细讲解:

背景CyberRTPython接口CyberRT中的Python接口概述示例

CyberRT的核心功能是用C++开发的。还提供了更多的Python接口来帮助开发人员为特定项目构建自己的实用程序。

CyberRT的Python接口封装了相应的C++接口。该实现不依赖于其他第三方工具,例如Swig,这使得它更易于维护。

到目前为止,Python接口涵盖:

获取通道信息

服务器、客户端通信

查询记录文件中的信息

从记录文件中读取和写入消息

时间、持续时间、速率相关操作

计时器

通道的读写

步骤如下:

首先创建一个Node;

创建相应的读取器或写入器;

如果写入通道,请在Writer中使用Write接口;

如果从通道读取,则使用节点中的spin接口,并在回调函数中处理消息。

界面如下所示:

classNode:"""ClassforcyberNodewrapper."""defcreate_writer(self,name,data_type,qos_depth=1):"""createatopicwriterforsendmessagetotopic.

paramself

paramnamestr:topicname

paramdata_typeproto:messageclassforserialization"""defcreate_reader(self,name,data_type,callback,args=None):"""createatopicreaderforreceivemessagefromtopic.

paramself

paramnamestr:topicname

paramdata_typeproto:messageclassforserialization

callbackfn:functiontocall(fn(data))whendataisreceived.Ifargsisset,thefunctionmustaccepttheargsasasecondargument,i.e.fn(data,args)

argsany:additionalargumentstopasstothecallback"""defcreate_client(self,name,request_data_type,response_data_type):""""""defcreate_service(self,name,req_data_type,res_data_type,callback,args=None):defspin(self):"""spininwaitandprocessmessage.

paramself"""classWriter(object):"""Classforcyberwriterwrapper."""defwrite(self,data):"""writermsgstring"""

记录接口

读取记录:

创建一个记录阅读器;

从记录中读取消息;

写入记录:

创建记录写入器

写消息记录;

界面如下所示:

classRecordReader(object):"""ClassforcyberRecordReaderwrapper."""defread_messages(self,start_time=0,end_time=):"""readmessagefrombagfile.

paramself

paramstart_time:

paramend_time:

return:generatorof(message,data_type,timestamp)"""defget_messagenumber(self,channel_name):"""returnmessagecount."""defget_messagetype(self,channel_name):"""returnmessagetype."""defget_protodesc(self,channel_name):"""returnmessageprotodesc."""defget_headerstring(self):"""returnmessageheaderstring."""defreset(self):"""returnreset.""return_CYBER_RECORD.PyRecordReader_Reset(self.record_reader)defget_channellist(self):"""returnchannellist."""return_CYBER_RECORD.PyRecordReader_GetChannelList(self.record_reader)classRecordWriter(object):"""ClassforcyberRecordWriterwrapper."""defopen(self,path):"""openrecordfileforwrite."""defwrite_channel(self,channel_name,type_name,proto_desc):"""writerchannelbychannelname,typename,protodesc"""defwrite_message(self,channel_name,data,time,raw=True):"""writermsg:channelname,data,time,isdataraw"""defset_size_fileseg(self,size_kilobytes):"""returnfilesegmentsize."""defset_intervaltime_fileseg(self,time_sec):"""returnfileintervaltime."""defget_messagenumber(self,channel_name):"""returnmessagecount."""defget_messagetype(self,channel_name):"""returnmessagetype."""defget_protodesc(self,channel_name):"""returnmessageprotodesc."""

时间接口

classTime(object):

staticmethoddefnow():time_now=Time(_CYBER_TIME.PyTime_now())returntime_now

staticmethoddefmono_time():mono_time=Time(_CYBER_TIME.PyTime_mono_time())returnmono_timedefto_sec(self):return_CYBER_TIME.PyTime_to_sec(self.time)defto_nsec(self):return_CYBER_TIME.PyTime_to_nsec(self.time)defsleep_until(self,nanoseconds):return_CYBER_TIME.PyTime_sleep_until(self.time,nanoseconds)

定时器接口

classTimer(object):defset_option(self,period,callback,oneshot=0):"""settheoptionoftimer.

paramperiodTheperiodofthetimer,unitisms.

paramcallbackThetasksthatthetimerneedstoperform.

paramoneshot1:performthecallbackonlyafterthefirsttimingcycle0:performthecallbackeverytimedperiod"""defstart(self):defstop(self):

从通道读取(在cyber/python/examples/listener.py中)

importsyssys.path.append("../")fromcyber_pyimportcyberfrommodules.


转载请注明:http://www.aierlanlan.com/grrz/2288.html