【5】apollo编写python节点步骤及实例

  1. 在workspace/modules下新建包buildtool create --template component modules/test_one
    在这里插入图片描述

  2. 编译包 buildtool build -p modules/test_two/
    在这里插入图片描述

  3. 增加自己的proto消息
    在刚才自动生成的proto文件里面添加自己定义的消息,记得重新编译.

syntax = "proto2";package apollo;// message type of channel, just a placeholder for demo,
// you should use `--channel_message_type` option to specify the real message type
message TestTwoMsg {}message TestTwoConfig {optional string name = 1;
};
// new added
message TestTwoMymessage{optional string twoInfo = 1;
}

也可以新建proto文件, 修改BUILD文件;记得重新编译.
proto文件内容如下

syntax = "proto2";
package apollo;message TestTwoLwlgzy{optional string twoInfo = 1;optional string twoFault = 2;
}

修改对应BUILF的文件

load("//tools:apollo_package.bzl", "apollo_package")
load("//tools/proto:proto.bzl", "proto_library")
load("//tools:cpplint.bzl", "cpplint")package(default_visibility = ["//visibility:public"])proto_library(name = "test_two_proto",srcs = ["test_two.proto"],
)proto_library(name = "test_two_lwlgzy_proto",srcs = ["test_two_lwlgzy.proto"],
)
apollo_package()cpplint()
  1. 生成的pb2文件路径在/opt/apollo/neo/python/modules/test_two/proto
    a). 新建test.py文件加入如下内容 from modules.test_two.proto.test_two_pb2 import TestTwoMymessage
    b). 给运行权限sudo chmod 755 *.py
    运行没有报错即为正常.

本机没有编译or缺少需要引用的proto文件时候, 也可以直接将其他机器生成的pb2.py文件拷贝到类似/opt/apollo/neo/python/xxx/xxx/proto 下import才不会报错.

  1. python 文件中import 路径为from 包名路径.proto.xx_pb2 import xxx. 例如:from modules.test_two.proto.test_two_lwlgzy_pb2 import TestTwoLwlgzy
modules/test_two/
|-- BUILD
|-- conf
|   |-- test_two.conf
|   `-- test_two.pb.txt
|-- cyberfile.xml
|-- dag
|   `-- test_two.dag
|-- launch
|   `-- test_two.launch
|-- proto
|   |-- BUILD
|   |-- test_two.proto
|   `-- test_two_lwlgzy.proto
|-- test.py
|-- test_two_component.cc
`-- test_two_component.h4 directories, 12 files
  1. 播包cyber_recorder play -f modules/chassis.00000.20210622135417

订阅底盘话题处理故障实例

import time
import asyncio
from datetime import datetime
from cyber.python.cyber_py3 import cyber
from modules.canbus_vehicle.yt.proto.yt_pb2 import Yt
from od_health_test.proto.od_health_test_pb2 import OdErrorInfo, OdErrorMsgsimport logging
from modules.tools.common.logger import Logger
import osAPOLLO_ROOT = "/apollo"class xxHealthMonitor:def __init__(self) -> None:self.health_node_ = cyber.Node("xx_health_monitor_node")Logger.config(log_file = os.path.join(APOLLO_ROOT, 'data/log/xx_health.log'),use_stdout=True,log_level=logging.DEBUG)self.logger = Logger.get_logger("OdHealthMonitor")self.logger.info("od_health_monitor_node is started. ")self.health_node_.create_reader("/apollo/canbus/chassis_detail",Yt,self._chassis_cb_)self.health_writer = self.health_node_.create_writer("/od/health", OdErrorMsgs)self.has_data = Falseself.bat_total_voltage = 0self.bat_total_current = 0self.od_ErrMessages = OdErrorMsgs()e_info = OdErrorInfo()e_info.err_level = ''e_info.err_message = ''self.od_ErrMessages.error_msgs.append(e_info)self.last_data_time = None# /apollo/canbus/chassis_detail  100hzdef _chassis_cb_(self,msg):self.last_data_time = time.time()#...解析数据,添加逻辑判断def _padding_fault_msgs(self, level, msg):err_info = OdErrorInfo()err_info.err_level = levelerr_info.err_message = msgself.od_ErrMessages.error_msgs.append(err_info)def _error_checking(self):passdef run(self):while not cyber.is_shutdown():try:current_time = time.time()if self.last_data_time is None or (current_time -  self.last_data_time)>1:self.od_ErrMessages = OdErrorMsgs()e_info = OdErrorInfo()e_info.err_level = '1'e_info.err_message = 'No data received from chassis_detail'self.od_ErrMessages.error_msgs.append(e_info)self.health_writer.write(self.od_ErrMessages)else:self.od_ErrMessages = OdErrorMsgs()self._error_checking()self.health_writer.write(self.od_ErrMessages)                 # print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))self.dump2log()except Exception as e:print("Error:", e)time.sleep(1) # 1hzself.has_data = Falsedef dump2log(self):dumpMsg = ""for oo in self.od_ErrMessages.error_msgs:dumpMsg += f"[{oo.err_level}:{oo.err_message}],"# print(writemsg.strip(','))self.logger.info(dumpMsg.strip(','))if __name__=="__main__":cyber.init()print("health monitor is starting!")health_monitor = OdHealthMonitor()health_monitor.run()print("health monitor is closing!")cyber.shutdown()

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

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

相关文章

UltraEditUEStudio软件安装包下载及安装教程

​根据软件大数据显示提供预定义的或使用者创建的编辑“环境”,能记住 UltraEdit 的所有可停靠窗口、工具栏等的状态。实际上我们可以这样讲HTML 工具栏,对常用的 HTML 功能作了预配置;文件加密/解密;多字节和集成的 IME。根据使用者情况表明Git Editor&…

vue3项目使用Electron打包成exe的方法与打包报错解决

将vue3项目打包成exe文件方法 一、安装 1.安装electron npm install electron --save-devnpm install electron-builder --save-dev 2.在vue项目根目录新建文件index.js // index.js// Modules to control application life and create native browser window const { app…

font-spider按需生成字体文件

font-spider可以全局安装,也可以单个项目内安装,使用npm run xxxx的形式 npm i font-spider "dev": "font-spider ./*.html" <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name&…

什么是APP分发-了解APP分发的核心概念

APP分发的定义和意义 大家有没有过这样的经历&#xff1a;辛辛苦苦开发了一款APP&#xff0c;却不知道该怎么让更多人知道和使用&#xff1f;APP分发的重要性就凸显出来了。APP分发就是将你的应用推送到不同的应用市场和平台&#xff0c;让更多用户能够下载和使用。 小猪app封…

[机器学习算法]支持向量机

支持向量机&#xff08;SVM&#xff09;是一种用于分类和回归分析的监督学习模型。SVM通过找到一个超平面来将数据点分开&#xff0c;从而实现分类。 1. 理解基本概念和理论&#xff1a; 超平面&#xff08;Hyperplane&#xff09;&#xff1a;在高维空间中&#xff0c;将数据…

【Python机器学习】k均值聚类——k均值的失败案例

k均值可能不总能找到“正确”的簇个数&#xff0c;每个簇仅由其中心定义&#xff0c;这意味着每个簇都是凸形。因此&#xff0c;k均值只能找到相对简单的形状。k均值还假设所有簇在某种程度上具有相同的“直径”&#xff0c;它总是将簇之间的边界刚好画在簇中心的之间位置。有时…

python使用pywebview打造一个现代化的可视化GUI界面

&#x1f308;所属专栏&#xff1a;【python】✨作者主页&#xff1a; Mr.Zwq✔️个人简介&#xff1a;一个正在努力学技术的Python领域创作者&#xff0c;擅长爬虫&#xff0c;逆向&#xff0c;全栈方向&#xff0c;专注基础和实战分享&#xff0c;欢迎咨询&#xff01; 您的…

海洋生物识别系统+图像识别+Python+人工智能课设+深度学习+卷积神经网络算法+TensorFlow

一、介绍 海洋生物识别系统。以Python作为主要编程语言&#xff0c;通过TensorFlow搭建ResNet50卷积神经网络算法&#xff0c;通过对22种常见的海洋生物&#xff08;‘蛤蜊’, ‘珊瑚’, ‘螃蟹’, ‘海豚’, ‘鳗鱼’, ‘水母’, ‘龙虾’, ‘海蛞蝓’, ‘章鱼’, ‘水獭’, …

Linux配置中文环境

文章目录 前言中文语言包中文输入法中文字体 前言 在Linux系统中修改为中文环境&#xff0c;通常涉及以下几个步骤&#xff1a; 中文语言包 更新源列表&#xff1a; 更新系统的软件源列表和语言环境设置&#xff0c;确保可以安装所需的语言包。 sudo apt update sudo apt ins…

《计算机英语》 Unit 3 Software Engineering 软件工程

Section A Software Engineering Methodologies 软件工程方法论 Software development is an engineering process. 软件开发是一个工程过程。 The goal of researchers in software engineering is to find principles that guide the software development process and lea…

如何选择服务器?快解析能搭建私人服务器吗?

随着网络的发展&#xff0c;搭建私人服务器逐渐成为网络达人们的热门选择&#xff0c;比如建立私人性质的博客、论坛、FTP、个人网站、服务器集群等。通过源搭建私人服务器&#xff0c;就可以将很多资源分享到网络上进行信息共享。随之而来的是服务器市场不断扩大&#xff0c;在…

网络安全:Web 安全 面试题.(XSS)

网络安全&#xff1a;Web 安全 面试题.&#xff08;XSS&#xff09; 网络安全面试是指在招聘过程中,面试官会针对应聘者的网络安全相关知识和技能进行评估和考察。这种面试通常包括以下几个方面&#xff1a; &#xff08;1&#xff09;基础知识:包括网络基础知识、操作系统知…

# Kafka_深入探秘者(1):初识 kafka

Kafka_深入探秘者&#xff08;1&#xff09;&#xff1a;初识 kafka 一、kafka 特性 1、Kafka &#xff1a;最初是由 Linkedln 公司采用 Scala 语言开发的一个多分区、多副本并且基于 ZooKeeper 协调的分布式消息系统&#xff0c;现在已经捐献给了 Apache 基金会。目前 Kafka…

CentOS系统查看版本的各个命令

cat /etc/centos-release 查看CentOS版本 uname -a 命令的结果分别代表&#xff1a;当前系统的内核名称、主机名、内核发型版本、节点名、系统时间、硬件名称、硬件平台、处理器类型以及操作系统名称 cat /proc/version 命令用于查看Linux内核的版本信息。执行该命令后&#xf…

【Linux基础】SSH登录

SSH简介 安全外壳协议&#xff08;Secure Shell Protocol&#xff0c;简称SSH&#xff09;是一种加密的网络传输协议&#xff0c;可在不安全的网络中为网络服务提供安全的传输环境。 SSH通过在网络中建立安全隧道来实现SSH客户端与服务器之间的连接。 SSH最常见的用途是远程登…

为什么用excel求出的和是错误的?

Excel中求和结果错误的原因可能有几种常见的情况&#xff1a;1. **数据格式问题**&#xff1a;有时候数字可能被错误地视为文本格式。这种情况下&#xff0c;Excel 在求和时会忽略这些单元格。你可以通过将这些单元格的格式改为数值格式来解决。2. **隐藏的行或列**&#xff1a…

Java程序之动物声音“模拟器”

题目&#xff1a; 设计一个“动物模拟器”&#xff0c;希望模拟器可以模拟许多动物的叫声和行为&#xff0c;要求如下&#xff1a; 编写接口Animal&#xff0c;该接口有两个抽象方法cry()和getAnimalName()&#xff0c;即要求实现该接口的各种具体的动物类给出自己的叫声和种类…

Linux 特殊变量 $?

一. 说明 在 Linux 和其他类 Unix 系统中&#xff0c;$? 是一个特殊的变量&#xff0c;用于获取上一个命令的退出状态码。 退出状态码是一个整数值&#xff0c;通常用来表示命令的执行结果。 ⏹退出状态码的含义 0&#xff1a;命令成功执行。0以外的数字&#xff1a;命令执…

[实践篇]13.29 再来聊下Pass Through设备透传

写在前面 为什么要再聊天Pass Through? 因为在QNX + Linux Android的技术方案下,我们会遇到LA发生reboot或异常panic后,无法正常开机。而再次异常的原因确实最头疼的Memory Corruption。观察下来是由于一些DMA外设如使用UART的一些设备在重启或panic后,没有正常走Shutdow…

【Ubuntu】--- 创建用户 删除用户 及其他用户操作大全 持续更新中

在编程的艺术世界里&#xff0c;代码和灵感需要寻找到最佳的交融点&#xff0c;才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里&#xff0c;我们将共同追寻这种完美结合&#xff0c;为未来的世界留下属于我们的独特印记。 【Ubuntu】--- 创建用户 删除用户 及其他…