基于SpringBoot+PostgreSQL+ROS Java库机器人数据可视化管理系统
以下是系统设计的详细方案:
1. 系统架构
+-----------------+ +------------------------+ +---------------------+ +--------------------+
| 用户浏览器 | ---->| 前端应用 (SPA) | ---> | Spring Boot 后端 | ---> | ROS Master(s) |
| (Login, Bind, | | (React/Vue/Angular) | | (API, ROS Sub, Logic)| | (在机器人或网络上) |
| View Data) | +------------------------+ +----------+----------+ +----------^---------+
+-----------------+ | | || | | ROS Topics+---------------------+ | | | (Sensor Data)| 关系型数据库 | <-----+ +---------------------> (订阅)| (用户, 机器人, 绑定) | || (PostgreSQL/MySQL) | |+---------------------+ | +---------------------++->| 时序数据库 (TSDB) || (传感器数据存储) || (InfluxDB/TimescaleDB)|+---------------------+
2. 技术选型
-
后端框架: Spring Boot (Java) - 强大的生态,快速开发,易于集成。
-
ROS Java库:
-
ROS 1: rosjava_core (官方提供,相对成熟但可能有些复杂)。
-
ROS 2: rcljava (ROS 2的官方Java客户端库)。你需要根据你的机器人使用的ROS版本选择。
-
-
时序数据库 (TSDB):
-
InfluxDB: 专门为时间序列数据设计,性能优异,查询语言(Flux/InfluxQL)强大,有良好的Java客户端。
-
TimescaleDB: PostgreSQL的扩展,将PostgreSQL变成一个功能齐全的时序数据库。可以使用标准SQL查询,与Spring Data JPA/JDBC集成更自然。
-
选择建议: 如果对SQL熟悉且希望利用关系型数据库特性,选TimescaleDB。如果追求极致的时序性能和专用工具链,选InfluxDB。
-
-
关系型数据库: PostgreSQL / MySQL / MariaDB - 用于存储用户信息、机器人元数据(ID、名称、ROS Master URI等)、用户与机器人的绑定关系。Spring Data JPA可以很好地支持。
-
前端框架: React / Vue / Angular (或其他现代前端框架) - 用于构建单页应用(SPA),提供动态和交互式用户体验。
-
API通信: RESTful API (通过Spring Web)
-
认证/授权: Spring Security + JWT (JSON Web Tokens) - 标准且安全的方案。
3. 后端设计 (Spring Boot Application)
-
pom.xml / build.gradle:
-
Spring Boot Starters (Web, Security, Data JPA, AOP).
-
ROS Java库依赖 (rosjava_core 或 rcljava).
-
时序数据库Java客户端依赖 (e.g., influxdb-java, postgresql JDBC driver for TimescaleDB).
-
关系型数据库JDBC驱动.
-
Lombok (简化代码).
-
-
核心组件:
-
UserController (@RestController):
-
POST /api/auth/login: 处理用户登录请求,验证成功后返回JWT。
-
POST /api/auth/register: (可选)处理用户注册请求。
-
GET /api/user/me: 获取当前用户信息。
-
-
RobotController (@RestController):
-
GET /api/robots: 获取当前用户绑定的机器人列表。
-
POST /api/robots/bind: 用户绑定机器人(需要提供机器人标识,如ID或名称,以及ROS Master URI)。
-
POST /api/robots/{robotId}/unbind: 用户解绑机器人。
-
-
DataController (@RestController):
-
GET /api/data/{robotId}: 获取指定机器人的传感器数据。
-
查询参数: startTime, endTime, sensorType (可选), topicName (可选), granularity (可选,用于数据聚合)。
-
返回格式化的时序数据(适合图表展示)。
-
-
-
UserService (@Service): 处理用户相关的业务逻辑(登录验证、密码加密、用户信息管理)。
-
RobotService (@Service): 处理机器人相关的业务逻辑(绑定、解绑、查询用户机器人列表、验证机器人所有权)。
-
RosSubscriberService (@Service):
-
关键服务: 负责管理与ROS Master的连接和主题订阅。
-
连接管理: 当机器人被绑定且系统需要接收数据时,根据存储的ROS Master URI建立与对应ROS Master的连接。
-
动态订阅: 维护一个订阅列表。当机器人绑定/解绑时,相应地添加/移除订阅。
-
消息处理: 实现MessageListener接口(或类似机制),接收来自ROS主题的消息。
-
数据转换与存储: 解析接收到的ROS消息(如sensor_msgs/Imu, sensor_msgs/LaserScan, nav_msgs/Odometry等),提取关键数据,添加robotId和时间戳,然后调用DataService存储到TSDB。
-
错误处理: 处理连接失败、消息解析错误等。
-
线程管理: ROS Java库的监听器通常在单独的线程中运行,需要妥善管理。
-
-
DataService (@Service):
-
提供将处理好的传感器数据写入TSDB的接口。
-
提供根据时间范围、机器人ID、传感器类型等条件从TSDB查询数据的接口。
-
-
-
数据模型 (JPA Entities for Relational DB):
-
User: id, username, password (hashed), roles.
-
Robot: id, robotIdentifier (唯一标识), name, rosMasterUri.
-
UserRobotBinding: userId, robotId (复合主键或单独ID + 外键)。
-
-
时序数据模型 (TSDB Schema - e.g., InfluxDB):
-
Measurement: sensor_data (或其他按传感器类型划分的measurement, e.g., imu, lidar).
-
Tags (用于索引和过滤): robotId, topicName, sensorType.
-
Fields (实际数值): 根据传感器类型变化,如 linear_acceleration_x, angular_velocity_z, range_min, range_max, pose_x, pose_y, orientation_w 等。
-
Timestamp: 数据点的时间戳 (由ROS消息头提供或在接收时生成)。
-
-
配置 (application.properties / application.yml):
-
数据库连接信息 (关系型和时序型)。
-
JWT密钥和过期时间。
-
ROS相关配置(可选,如默认订阅主题列表)。
-
-
安全 (SecurityConfig):
-
配置Spring Security。
-
定义哪些API需要认证。
-
配置密码编码器。
-
配置JWT过滤器用于验证请求中的Token。
-
4. 前端设计 (SPA)
-
页面:
-
登录页 (/login): 输入用户名、密码,调用后端登录API。成功后存储JWT,并重定向到主页。
-
主页/仪表盘 (/ or /dashboard):
-
显示欢迎信息。
-
机器人列表: 调用 GET /api/robots 获取并展示用户绑定的机器人。
-
绑定机器人按钮/表单: 触发一个模态框或跳转到绑定页面,输入机器人信息,调用 POST /api/robots/bind。
-
解绑按钮: 在机器人列表中,为每个机器人提供解绑选项,调用 POST /api/robots/{robotId}/unbind。
-
查看数据链接: 点击后跳转到数据查看页面,并带上robotId。
-
-
数据查看页 (/data/{robotId}):
-
显示当前查看的机器人信息。
-
时间范围选择器: 允许用户选择开始和结束时间。
-
(可选) 传感器类型/主题选择器: 允许用户筛选特定数据。
-
图表区域: 使用图表库(如 Chart.js, Plotly.js, ECharts)根据选择的条件调用 GET /api/data/{robotId} 获取数据并进行可视化展示(折线图、散点图等)。
-
数据刷新机制: 可以有手动刷新按钮,或设置定时自动刷新。
-
-
-
状态管理: 使用前端框架自带的状态管理(如Vuex, Redux)或简单的组件状态来管理用户信息、机器人列表、当前查看的数据等。
-
API调用: 使用 axios 或 fetch 与后端API交互。需要设置请求头携带JWT进行认证。
5. ROS集成细节 (RosSubscriberService)
-
初始化: 服务启动时,可以查询数据库中所有已绑定的机器人,并尝试为它们建立ROS连接和订阅。
-
连接: 使用rosjava_core的DefaultNodeMainExecutor和NodeConfiguration来连接到指定的ROS Master URI。每个机器人可能需要一个独立的NodeMain实例或类似的管理机制。
-
订阅: 使用NodeMain实例创建Subscriber对象,指定要订阅的topicName和消息类型(如sensor_msgs.Imu)。
-
消息监听: 在Subscriber的回调函数(onNewMessage)中接收原始ROS消息。
-
数据持久化: 在回调中,提取所需字段,创建数据点对象(包含robotId, timestamp, tags, fields),然后通过DataService异步或同步写入TSDB。注意处理背压和批量写入以提高性能。
-
健壮性: 需要处理ROS Master不可达、网络中断、节点关闭等情况。实现重连逻辑。
6. 部署注意事项
-
网络: 后端服务器必须能够访问所有已绑定机器人的ROS Master URI。这可能需要配置VPN、防火墙规则或确保它们在同一局域网内。
-
资源: 后端服务会持续监听ROS消息,可能会消耗一定的CPU和内存,尤其是在机器人数量多或数据频率高的情况下。TSDB也需要足够的存储和I/O能力。
-
容器化 (Docker): 将后端应用、前端应用、关系型数据库、时序数据库分别打包成Docker镜像,使用Docker Compose进行本地开发和部署,或使用Kubernetes进行生产环境部署。
7. 潜在挑战与扩展
-
ROS Java库的复杂性: rosjava 可能学习曲线较陡峭,文档和社区支持相对Python/C++较少。rcljava (ROS 2)相对更新。
-
性能: 大量机器人或高频数据可能对后端处理能力和TSDB写入/查询性能带来压力。需要考虑异步处理、批量写入、数据聚合、数据库调优。
-
实时性: 如果需要近乎实时的数据展示,前端可能需要使用WebSocket与后端建立连接,由后端在收到新数据时主动推送给前端。
-
错误处理和监控: 需要健壮的错误处理机制(网络、ROS连接、数据解析、数据库写入)和监控系统来跟踪服务状态和性能。
-
数据量: 时序数据增长很快,需要考虑数据保留策略(Data Retention Policies)和存储扩展性。
-
安全性: 除了用户认证,还需要考虑ROS通信本身的安全性(如果需要跨公网通信)。
相关文章:
基于SpringBoot+PostgreSQL+ROS Java库机器人数据可视化管理系统
以下是系统设计的详细方案: 1. 系统架构 ----------------- ------------------------ --------------------- -------------------- | 用户浏览器 | ---->| 前端应用 (SPA) | ---> | Spring Boot 后端 | ---> | ROS…...
机器学习算法-支持向量机SVM
支持向量机-python实现 由于本菜鸟目前还没有学习到软间隔和核函数的处理,so,先分享的硬间隔不带核函数,也就是不涉及非线性可分转化成线性可分的逻辑,后续如果学的懂,就在本篇文章的代码中继续拓展核函数等。 先来看…...
【仿Mudou库one thread per loop式并发服务器实现】服务器边缘测试+性能测试
服务器边缘测试性能测试 1. 长连接连续请求测试2. 超时连接释放测试13. 超时连接释放测试24. 超时连接释放测试35. 数据中多条请求处理测试6. PUT大文件上传测试7. 服务器性能测试 #include "httpserver.hpp" #define WWWROOT "./wwwroot"std::string Requ…...
【Spring Boot】Maven中引入 springboot 相关依赖的方式
Maven中引入 springboot 相关依赖的方式 1. 不使用版本管理(不推荐) 如果项目中没有统一版本管理,那么每个依赖都必须显式声明 <version>。 示例: <dependency><groupId>org.springframework.boot</group…...
SpringCloud核心组件Eureka菜鸟教程
关于Spring Cloud Eureka的核心概念 Eureka 是 Netflix 开源的一款基于 REST 的服务发现工具,主要用于中间层服务器的云端负载均衡。它通过维护一个服务注册表来实现服务之间的通信1。在 Spring Cloud 中,Eureka 提供了一个高可用的服务注册与发现机制&a…...
DuckDB:现代数据分析的“SQLite“内核革命
在数据工程、数据科学快速演进的今天,一个新的名字正在快速蹿红:DuckDB。 有人称它是数据分析领域的SQLite,也有人称它为下一代轻量级OLAP引擎。 无论哪种称呼,都离不开一个事实: DuckDB 重新定义了小型数据仓库和本地…...
【计算机网络分类全解析】从局域网到广域网的工程实践
目录 前言技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解核心作用讲解关键技术模块说明技术选型对比 二、实战演示环境配置要求核心代码实现案例1:局域网IP扫描案例2:VLAN配置 运行结果验证 三、性能对比测试方法论量…...
Spark 技术体系深度总结
一、核心技术架构 1. 分布式计算模型 Spark基于弹性分布式数据集(RDD,Resilient Distributed Dataset)构建核心抽象,通过分区(Partition)实现数据分布式存储,每个分区可独立进行并行计算。RDD…...
金融数据分析(Python)个人学习笔记(13):自然语言处理
一、导入库和函数 pip install wordcloud pip install -i https://pypi.tuna.tsinghua.edu.cn/simple jieba pip install gensimimport pandas as pd import numpy as np import jieba二、载入新闻数据 sinanews pd.read_csv(my_sinanews2.csv,encodinggbk) sinanews结果&a…...
ReACT Agent 实战
1. Agent 概述 关于到底什么是 Agent,目前业界并没有一个统一的定义,比如 OpenAI 倾向于将 Agent 看作是大模型能力的延伸,而 LangChain 则侧重于 Agent 是 workflow 的编排。我们没必要去纠结定义,可以简单理解 Agent 并不是某一…...
【JavaScript】关系运算符--非数值类型、Unicode编码表
1、关系运算符--非数值类型 对于非数值进行比较时,会将其转换为数字然后再比较。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width,…...
【Pandas】pandas DataFrame rtruediv
Pandas2.2 DataFrame Binary operator functions 方法描述DataFrame.add(other)用于执行 DataFrame 与另一个对象(如 DataFrame、Series 或标量)的逐元素加法操作DataFrame.add(other[, axis, level, fill_value])用于执行 DataFrame 与另一个对象&…...
重构数字信任基石:Java 24 网络安全特性的全维度革新与未来防御体系构建
引言:从技术迭代到安全范式的根本性跃迁 在量子计算威胁渐近、分布式系统架构复杂化、数据资产价值指数级增长的 2025 年,Java 平台迎来了自 Java 1.0 以来最具革命性的安全架构升级 ——Java 24 版本。这不仅仅是一次常规的特性更新,而是通…...
HTML倒数
前言 假设您需要一个网页打开后,自动间隔 N 秒进行一次自动刷新,且不依赖 js ,那么本文可以帮助到您,以最简单的方式实现需求。 实现代码 TIPS:借助 <meta http-equiv"refresh" content"X"&g…...
【C++】类和对象(上)
文章目录 上文链接一、类(class)1. 类的定义2. 类与结构体3. 访问限定符4. 类域 二、对象1. 实例化2. 对象大小 三、this 指针1. 什么是 this 指针2. 小练习 上文链接 【C】入门基础知识(下) 一、类(class)…...
Transformer四模型回归打包(内含NRBO-Transformer-GRU、Transformer-GRU、Transformer、GRU模型)
Transformer四模型回归打包(内含NRBO-Transformer-GRU、Transformer-GRU、Transformer、GRU模型) 目录 Transformer四模型回归打包(内含NRBO-Transformer-GRU、Transformer-GRU、Transformer、GRU模型)预测效果基本介绍程序设计参…...
多级缓存入门:Caffeine、Lua、OpenResty、Canal
之前写过——Google Guava Cache简介 本文系统学习一下多级缓存 目录 0.什么是多级缓存商品查询业务案例导入1.JVM进程缓存初识Caffeine实现JVM进程缓存2.Lua语法入门HelloWorld数据类型、变量和循环函数、条件控制3.Nginx业务编码实现多级缓存安装OpenRestyOpenResty快速入门…...
在AWS Glue中实现缓慢变化维度(SCD)的三种类型
根据缓慢变化维度(SCD)的三种核心类型(类型1、类型2、类型3),以下是基于AWS Glue的实现设计、步骤及测试用例: 一、AWS Glue实现SCD的设计与步骤 1. SCD类型1(覆盖旧值) 设计目标&…...
业务校验工具包-validate-utils介绍
validate-utils介绍 1. 概述 validate-utils是一个基于Hibernate Validator的轻量级校验框架,旨在简化和增强Java应用程序中的数据校验工作。该工具包提供了一系列常见的校验场景,帮助开发人员快速实现数据验证,提高代码的可维护性和可靠性。 2. 功能特性 2.1 集合数据量…...
参数规模:衡量大语言模型体量的标尺
大语言模型的体量差异通过参数数量呈现。业界标杆如GPT-3拥有1750亿参数,Grok-1更达到3140亿级别,而Llama系列则提供70亿至700亿参数的轻量化选择。这里的"70B"并非指训练数据量,而是模型内部结构的复杂度指标——每个参数如同微型…...
JS 中call、apply 和 bind使用方法和场景
call 方法 核心特性 立即执行函数,并显式指定 this 值和逐个传递参数。语法:func.call(thisArg, arg1, arg2, …) 使用场景 借用其他对象的方法 const person { name: "Alice" }; function greet(greeting) {console.log(${greeting}, ${t…...
ZeroGrasp:零样本形状重建助力机器人抓取
25年4月来自CMU、TRI 和 丰田子公司 Woven 的论文“ZeroGrasp: Zero-Shot Shape Reconstruction Enabled Robotic Grasping”。 机器人抓取是具身系统的核心能力。许多方法直接基于部分信息输出抓取结果,而没有对场景的几何形状进行建模,导致运动效果不…...
第2讲、Tensor高级操作与自动求导详解
1. 前言 在深度学习模型中,Tensor是最基本的运算单元。本文将深入探讨PyTorch中两个核心概念: Tensor的广播机制(Broadcasting)**自动求导(Autograd)**机制 这些知识点不仅让你更加灵活地操作数据&#…...
(MySQL)表的操作
目录 表的创建 语法 创建表的案例 查看表的结构 修改表的操作 修改表名 编辑 添加一个字段(列) 修改一个字段的类型 修改字段名 删除字段名(删除列) 删除指定的表 表的插入数据 数据库的备份和恢复 我们来学习表的操作 表的创建 语法 CREATE TABLE [if not ex…...
函数的使用
函数绑定 fn.call(obj, param1, param2) fn.apply(obj, [param1, param2]) fn.bind(obj, param1, param2)()相同点: 都是借用别人(fn)的方法,替换其中的this(第一个参数)call和apply的不同点:a…...
LLM应用于自动驾驶方向相关论文整理(大模型在自动驾驶方向的相关研究)
1、《HILM-D: Towards High-Resolution Understanding in Multimodal Large Language Models for Autonomous Driving》 2023年9月发表的大模型做自动驾驶的论文,来自香港科技大学和人华为诺亚实验室(代码开源)。 论文简介: 本文…...
Spring MVC深度解析:从原理到实战
文章目录 一、Spring MVC概述1.1 MVC设计模式1.2 Spring MVC特点 二、Spring MVC核心组件2.1 架构流程图解2.2 核心组件说明 三、环境搭建与配置3.1 Maven依赖3.2 传统XML配置 vs JavaConfig 四、控制器开发实践4.1 基础控制器示例4.2 请求映射注解 五、数据处理与绑定5.1 表单…...
Spark学习全总结
基础概念: Spark 是一个快速、通用的大数据处理引擎,支持多种计算模式,如批处理、流处理、交互式查询和机器学习等。 特点: 速度快:基于内存计算,能将数据缓存在内存中,避免频繁读写磁盘,大幅…...
pytorch写张量pt文件,libtorch读张量pt文件
直接在pytorch中,用torch.save保存的张量,可能因格式差异无法在C中加载。 以下是一个最简单的例子,展示如何在 Pytorch中保存张量到 TorchScript 模块,并在 C 中使用 LibTorch 加载。 Python 代码 (save_tensor.py) import torc…...
关于Android Studio的Gradle各项配置2
好的!你提到的这些文件是 Gradle 构建系统 和 Android 项目 中非常重要的一部分,它们各自有不同的作用,涉及项目的构建配置、Gradle 环境、系统配置等方面。接下来我会为你详细解释每个文件的作用,并提供具体的例子和注释。 1. gr…...
Android Studio中创建第一个Flutter项目
一、Flutter环境验证 创建Flutter项目之前需要验证是否有Flutter环境,如没有Flutter 环境,请参考配置Flutter开发环境 1.1、flutter doctor 验证通过会有以下提示 [√] Flutter (Channel stable, 3.29.3, on Microsoft Windows [版本 10.0.19045.573…...
Linux的例行性工作(crontab)
crontab服务 at 命令是在指定的时间只能执行一次任务, crontab 命令可以循环重复的执行定时任务,与 Windows 中的计划任务有些类似 crond 是 Linux 下用来周期地执行某种任务或等待处理某些事件的一个守护进程,在安装完成操 作系统后,默认会安装 crond …...
03 基于 STM32 的温度控制系统
前言 Protues、KeilC 设计内容:使用STM32设计一个空调温度的显示控制系统 设计要求: 1.温度显示范围为16-30摄氏度 2.按键K1实现显示温度加1,按键K2实现显示温度减1,低于16或高于30,显示数值不变 3.正常按键蜂鸣器响一…...
23种设计模式-行为型模式之备忘录模式(Java版本)
Java 备忘录模式(Memento Pattern)详解 🧠 什么是备忘录模式? 备忘录模式是一种行为型设计模式,它允许在不暴露对象实现细节的情况下,保存和恢复对象的状态。备忘录模式常常用于需要记录对象状态以便随时…...
[三分钟]web自动化测试(二):selenium自动化测试常用函数(上)
文章目录 1.元素定位1.1 cssSelector(选择器)1.2 xpath1.3小示例 2.操作测试对象2.1点击/提交对象-click()2.2 模拟按键输入-sendKeys("")2.3 清除文本内容-clear()2.4 获取文本信息-getText()2.5 获取当前页面标题-getTitle()2.6获取当前页面URL-getCurrentUrl() 3.…...
基于ruoyi-plus实现AI聊天和绘画
项目介绍 基于ruoyi-plus实现AI聊天和绘画功能,打造自己的AI平台。前后端分离,有管理后台,用户端,小程序端。支持对接openai,讯飞星火,通义灵码,deepseek等大语言模型。项目架构 管理后台-前端&…...
假设检验学习总结
目录 一、假设检验1. 两种错误2. z检验和t检验3. t检验3.1 单样本t检验3.2 配对样本t检验3.3 独立样本t检验4 方差齐性检验备注卡方检验样本容量的计算AB测试主要的两种应用场景绝对量的计算公式率的计算公式说明一、假设检验 1. 两种错误 第一类错误 原假设为真,却拒绝了原假…...
C++ 基于多设计模式下的同步异步⽇志系统-2项目实现
⽇志系统框架设计 1.⽇志等级模块:对输出⽇志的等级进⾏划分,以便于控制⽇志的输出,并提供等级枚举转字符串功能。 ◦ OFF:关闭 ◦ DEBUG:调试,调试时的关键信息输出。 ◦ INFO:提⽰,普通的提⽰…...
Tauri窗口与界面管理:打造专业桌面应用体验 (入门系列五)
窗口管理是桌面应用的核心特性之一,良好的窗口管理可以显著提升用户体验。在Web开发中,我们通常被限制在浏览器窗口内,但Tauri允许前端开发者控制应用窗口的方方面面,从而创造出更加原生的体验。 窗口配置基础 初始窗口配置 在…...
golang goroutine(协程)和 channel(管道) 案例解析
文章目录 goroutine和channel概念开启线程与channel简单通信流程多个工作协程并发执行流程 goroutine和channel概念 goroutine(协程),一般我们常见的是进程,线程,进程可以理解为一个软件在运行执行的过程,线程跟协程比较类似&…...
底层源码和具体测试解析HotSpot JVM的notify唤醒有序性(5000字详解)
在大家的认知里,或者大家也可能搜过,notify唤醒机制到底是随机的呢?还是顺序的呢?在网上其实也有很多人说notify的唤醒机制就是随机的,但实际上并不是这样的,notify的唤醒机制是先进先出的! 目…...
Jenkins(CI/CD工具)
1. 什么是 Jenkins? Jenkins 是一个开源的持续集成(CI)和持续交付/部署(CD)工具,用于自动化软件构建、测试和部署过程。 2. Jenkins 优势 (1)开源免费:社区活跃&#…...
Apache Sqoop数据采集问题
Sqoop数据采集格式问题 一、Sqoop工作原理二、Sqoop命令格式三、Oracle数据采集格式问题四、Sqoop增量采集方案 Apache Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql…)间进行数据的传递,可以将一个关系型数据库&…...
再学GPIO(二)
GPIO寄存器 每个GPI/O端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器(GPIOx_IDR和GPIOx_ODR),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。 GPIO…...
err: Error: Request failed with status code 400
好的,今天学习ai的时候从前端发送请求,实在是想不通为啥会啥是一个坏请求,后来从前端方法一个一个找参数,传递的值都有,然后想到我这边需要传递的是一个对象,那么后端使用的RequestParam就接收不到json对象…...
解决qnn htp 后端不支持boolean 数据类型的方法。
一、背景 1.1 问题原因 Qnn 模型在使用fp16的模型转换不支持类型是boolean的cast 算子,因为 htp 后端支持量化数据类型或者fp16,不支持boolean 类型。 ${QNN_SDK_ROOT_27}/bin/x86_64-linux-clang/qnn-model-lib-generator -c ./bge_small_fp16.cpp -b …...
k8s学习记录(五):Pod亲和性详解
一、前言 上一篇文章初步探讨了 Kubernetes 的节点亲和性,了解到它在 Pod 调度上比传统方式更灵活高效。今天我们继续讨论亲和性同时Kubernetes 的调度机制。 二、Pod亲和性 上一篇文章中我们介绍了节点亲和性,今天我们讲解一下Pod亲和性。首先我们先看…...
MongoDB与PHP7的集成与优化
MongoDB与PHP7的集成与优化 引言 随着互联网技术的飞速发展,数据库技术在现代软件开发中扮演着越来越重要的角色。MongoDB作为一种流行的NoSQL数据库,以其灵活的数据模型和强大的扩展性受到众多开发者的青睐。PHP7作为当前最流行的服务器端脚本语言之一,其性能和稳定性也得…...
maven相关概念深入介绍
1. pom.xml文件 就像Make的MakeFile、Ant的build.xml一样,Maven项目的核心是pom.xml。POM(Project Object Model,项目对象模型)定义了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。…...
以科技之力,启智慧出行 —— 阅读《NVIDIA 自动驾驶安全报告》及观看实验室视频有感
作为中南民族大学通信工程专业的学生,近期研读《NVIDIA 自动驾驶安全报告》并观看其实验室系列视频后,我深刻感受到自动驾驶技术不仅是一场交通革命,更是一次社会生产力的解放与民族精神的升华。这场变革的浪潮中,我看到了科技如何…...