当前位置: 首页 > news >正文

TinyMPC - CMU (卡耐基梅隆大学)开源的机器人 MPC 控制器

系列文章目录

CasADi - 最优控制开源 Python/MATLAB 库


文章目录

  • 系列文章目录
  • 前言
  • 一、机器人硬件对比
    • 1.1 Teensy 上的微控制器基准测试
    • 1.2 机器人硬件
    • 1.3 BibTeX
  • 二、求解器
  • 三、功能(预期)
    • 3.1 高效
    • 3.2 鲁棒
    • 3.3 可嵌入式
    • 3.4 最小依赖性
    • 3.5 高效热启动
    • 3.6 接口
  • 四、在 Ubuntu 安装
    • 4.1 在终端克隆此 repo
    • 4.2 导航至根目录并运行
    • 4.3 执行 CMake 配置步骤
    • 4.4 构建 TinyMPC
  • 五、示例
    • 5.1 运行四旋翼飞行器悬停示例
    • 5.2 运行 codegen 示例,然后在该目录下按照相同的构建步骤进行操作


前言

TinyMPC: 资源受限微控制器上的模型预测控制

作者:Anoushka Alavilli*, Khai Nguyen*, Sam Schoedel*, Brian Plancher, Zachary Manchester

Carnegie Mellon University, Barnard College


模型预测控制(Model-predictive control,MPC)是控制受复杂约束条件(complex constraints)影响的高动态机器人系统(highly dynamic robotic systems)的有力工具。然而,MPC 的计算要求很高,在资源有限的小型机器人平台上实施往往不切实际。我们推出的 TinyMPC 是一种高速 MPC 求解器,内存占用少,适用于小型机器人上常见的微控制器。我们的方法基于交替方向乘子法(ADMM),并利用 MPC 问题的结构来提高效率。我们以最先进的求解器 OSQP 为基准,对 TinyMPC 进行了演示,速度提高了近一个数量级,同时还在一个重达 27 克的四旋翼机器人上进行了硬件实验,演示了高速轨迹跟踪(high-speed trajectory tracking)和动态避障(dynamic obstacle avoidance)。

一、机器人硬件对比

在这里插入图片描述

在这里插入图片描述

1.1 Teensy 上的微控制器基准测试

在这里插入图片描述

1.2 机器人硬件

在这里插入图片描述

1.3 BibTeX

@misc{tinympc,title={TinyMPC: Model-Predictive Control on Resource-Constrained Microcontrollers}, author={Anoushka Alavilli and Khai Nguyen and Sam Schoedel and Brian Plancher and Zachary Manchester},year={2023},eprint={2310.16985},archivePrefix={arXiv},primaryClass={cs.RO}
}

二、求解器

TinyMPC 求解器是一个数值优化软件包,用于求解默认形式的凸二次规划型模型预测控制(convex quadratic model-predictive control)
minimize: ⁡ 1 2 ( x N − x ˉ N ) T Q f ( x N − x ˉ N ) + ∑ k = 0 N ( 1 2 ( x k − x ˉ k ) T Q ( x k − x ˉ k ) + 1 2 ( u k − u ˉ k ) T R ( u k − u ˉ k ) ) subject  to: ⁡ x k + 1 = A x k + B u k u ‾ ≤ u k ≤ u ‾ x ‾ ≤ x k ≤ x ‾ \begin{array}{l l}{\operatorname*{minimize:}}&{\dfrac{1}{2}(x_{N}-\bar{x}_{N})^{T}Q_{f}(x_{N}-\bar{x}_{N})+{{\sum_{k=0}^{N}\bigl(\frac{1}{2}(x_{k}-\bar{x}_{k})^{T}Q(x_{k}-\bar{x}_{k})+\frac{1}{2}\bigl(u_{k}-\bar{u}_{k}\bigr)^{T}R(u_{k}-\bar{u}_{k})\bigr)}}} \\ {\operatorname*{subject\;to:}}&x_{k+1}=A x_{k}+B u_{k} \\ & \overline{{{u}}}\,\leq\,u_{k}\,\leq\underline{{u}} \\ & \overline{{{x}}}\,\leq\,x_{k}\,\leq\underline{{x}} \end{array} minimize:subjectto:21(xNxˉN)TQf(xNxˉN)+k=0N(21(xkxˉk)TQ(xkxˉk)+21(ukuˉk)TR(ukuˉk))xk+1=Axk+Bukuukuxxkx

其中, x k ∈ R n x_{k}\in\mathbb{R}^{n} xkRn u k ∈ R m u_{k}\in\mathbb{R}^{m} ukRm 分别为时间步长为 k 时的状态和控制输入,N 为时间步长(也称为视平线), A ∈ R n × n A\in\mathbb{R}^{n\times n} ARn×n B ∈ R n × m B\in\mathbb{R}^{n\times m} BRn×m 定义了系统动力学, Q ≥ 0 Q\geq0 Q0 R ≻ 0 R\succ0 R0 Q f ≥ 0 Q_{f}\geq0 Qf0 为对称成本权重矩阵, x ~ k {\tilde{x}}_{k} x~k u ˉ k {\bar{u}}_{k} uˉk 是状态和输入参考轨迹。

三、功能(预期)

3.1 高效

它采用基于 ADMM 的定制一阶方法,无需矩阵因式分解。所有其他操作都非常简单。它还利用 MPC 问题中的结构,为基元更新实现了黎卡提递归(Riccati recursion)。

3.2 鲁棒

该算法完全 free,而且不需要对问题数据做任何假设(问题只需要是凸的)。它就是这么简单!

3.3 可嵌入式

它有一个简单的接口,无需内存管理器即可生成定制的可嵌入 C 代码。

3.4 最小依赖性

它只需要 Eigen 就能运行。

3.5 高效热启动

它可以轻松热启动,并且可以缓存矩阵因式分解,从而极其高效地解决参数化问题。

3.6 接口

它为 C、C++、Julia、Matlab 和 Python 提供了接口。

四、在 Ubuntu 安装

4.1 在终端克隆此 repo

git clone git@github.com:TinyMPC/TinyMPC.git

4.2 导航至根目录并运行

cd TinyMPC
mkdir build && cd build

4.3 执行 CMake 配置步骤

cmake ../

4.4 构建 TinyMPC

make 

五、示例

5.1 运行四旋翼飞行器悬停示例

./examples/example_quadrotor_hovering
tracking error at step  0: 2.2472
tracking error at step  1: 2.9549
tracking error at step  2: 2.5478
tracking error at step  3: 2.6331
tracking error at step  4: 3.1375
tracking error at step  5: 3.6413
tracking error at step  6: 4.0214
tracking error at step  7: 4.2898
tracking error at step  8: 4.5070
tracking error at step  9: 4.6282
tracking error at step 10: 4.3689
tracking error at step 11: 3.8895
tracking error at step 12: 3.3699
tracking error at step 13: 2.8681
tracking error at step 14: 2.3877
tracking error at step 15: 1.9336
tracking error at step 16: 1.5516
tracking error at step 17: 1.2588
tracking error at step 18: 1.0420
tracking error at step 19: 0.8844
tracking error at step 20: 0.7680
tracking error at step 21: 0.6773
tracking error at step 22: 0.6009
tracking error at step 23: 0.5316
tracking error at step 24: 0.4658
tracking error at step 25: 0.4024
tracking error at step 26: 0.3416
tracking error at step 27: 0.2839
tracking error at step 28: 0.2305
tracking error at step 29: 0.1822
tracking error at step 30: 0.1393
tracking error at step 31: 0.1023
tracking error at step 32: 0.0715
tracking error at step 33: 0.0472
tracking error at step 34: 0.0301
tracking error at step 35: 0.0217
tracking error at step 36: 0.0218
tracking error at step 37: 0.0251
tracking error at step 38: 0.0279
tracking error at step 39: 0.0291
tracking error at step 40: 0.0290
tracking error at step 41: 0.0277
tracking error at step 42: 0.0254
tracking error at step 43: 0.0227
tracking error at step 44: 0.0197
tracking error at step 45: 0.0167
tracking error at step 46: 0.0140
tracking error at step 47: 0.0116
tracking error at step 48: 0.0097
tracking error at step 49: 0.0082
tracking error at step 50: 0.0072
tracking error at step 51: 0.0067
tracking error at step 52: 0.0065
tracking error at step 53: 0.0065
tracking error at step 54: 0.0065
tracking error at step 55: 0.0064
tracking error at step 56: 0.0063
tracking error at step 57: 0.0062
tracking error at step 58: 0.0061
tracking error at step 59: 0.0059
tracking error at step 60: 0.0058
tracking error at step 61: 0.0056
tracking error at step 62: 0.0055
tracking error at step 63: 0.0054
tracking error at step 64: 0.0053
tracking error at step 65: 0.0052
tracking error at step 66: 0.0052
tracking error at step 67: 0.0052
tracking error at step 68: 0.0052
tracking error at step 69: 0.0052

5.2 运行 codegen 示例,然后在该目录下按照相同的构建步骤进行操作

./examples/example_codegen
A = [1, 1]
[5, 2]
B = [3, 4]
[3, 1]
Q = [1.1,   0]
[  0, 1.1]
R = [2.1,   0]
[  0, 2.1]
rho = 0.1
Kinf converged after 5 iterations
Precomputing finished
Kinf = [   1.36,  0.5335]
[-0.6323, -0.1066]
Pinf = [8.899, 2.664]
[2.664, 2.046]
Quu_inv = [  0.1076, -0.09799]
[-0.09799,  0.09522]
AmBKt = [-0.5502,   1.553]
[-0.1739,  0.5062]
coeff_d2p = [7.438e-06, 8.381e-06]
[2.127e-06, 2.398e-06]
Creating generated code directory at /home/khai/SSD/Code/TinyMPC/generated_code
ERROR OPENING DATA WORKSPACE FILE
Segmentation fault

相关文章:

TinyMPC - CMU (卡耐基梅隆大学)开源的机器人 MPC 控制器

系列文章目录 CasADi - 最优控制开源 Python/MATLAB 库 文章目录 系列文章目录前言一、机器人硬件对比1.1 Teensy 上的微控制器基准测试1.2 机器人硬件1.3 BibTeX 二、求解器三、功能(预期)3.1 高效3.2 鲁棒3.3 可嵌入式3.4 最小依赖性3.5 高效热启动3.…...

C++ 对象的初始化和清理:构造函数和析构函数

目录 构造函数和析构函数 构造函数 析构函数 构造函数的分类及调用 括号法 显示法 隐式转换法 拷贝构造函数的调用时机 使用一个已经创建完毕的对象来初始化一个新对象 值传递的方式给函数参数传值 以值方式返回局部对象 构造函数调用规则 初始化列表 类对象作…...

Tmux中使用Docker报错 - 解决方案

问题 进入Tmux会话后,在其中使用Docker可能会出现如下报错: Got permission denied while trying to connect to the Docker ……解决方案 退出tmux会话: tmux detach在tmux会话外部杀掉tmux进程: pkill -f tmux重新进入tmux&#xff1a…...

如何在WordPress中批量替换图片路径?

很多站长在使用WordPress博客或者搬家时,需要把WordPress文章中的图片路径进行替换来解决图片不显示的问题。总结一下WordPress图片路径批量替换的过程,方便有此类需求的站长们学习。 什么情况下批量替换图片路径 1、更换了网站域名 有许多网站建设初期…...

el-pagination 纯前端分页

需求&#xff1a;后端把所有数据都返给前端&#xff0c;前端进行分页渲染。 实现思路&#xff1a;先把数据存储到一个大数组中&#xff0c;然后调用方法进行切割。主要使用数组的slice方法 所有代码&#xff1a; html <template><div style"padding: 20px&qu…...

基于springboot的校园二手市场

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…...

【开源】基于Vue和SpringBoot的在线课程教学系统

项目编号&#xff1a; S 014 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S014&#xff0c;文末获取源码。} 项目编号&#xff1a;S014&#xff0c;文末获取源码。 目录 一、摘要1.1 系统介绍1.2 项目录屏 二、研究内容2.1 课程类型管理模块2.2 课程管理模块2…...

Mysql分布式集群部署---MySQL集群Cluster将数据分成多个片段,每个片段存储在不同的服务器上

1.1 目的 部署MysqlCluster集群环境 1.2 MySQL集群Cluster原理 1 数据分片 MySQL集群Cluster将数据分成多个片段&#xff0c;每个片段存储在不同的服务器上。这样可以将数据负载分散到多个服务器上&#xff0c;提高系统的性能和可扩展性。 2. 数据同步 MySQL集群Cluster使…...

身份认证技术

身份认证是对系统的用户进行有效性、真实性验证。 1&#xff0e;口令认证方式 使用口令认证方式&#xff0c;用户必须具有一个唯一的系统标识&#xff0c;并且保证口令在系统的使用和存储过程中是安全的&#xff0c;同时口令在传输过程中不能被窃取、替换。另外特别要注意的是在…...

Centos7、Mysql8.0 load_file函数返回为空的终极解决方法--暨selinux的深入理解

零、问题背景 最近想换房&#xff0c;为了方便自己对比感兴趣的房子&#xff0c;因此决定将目标房源的基本信息放在表里&#xff0c;特别是要一目了然的看到众多房子的各种图纸和照片&#xff0c;因此决定要在Mysql8.0.34数据库中以二进制形式保存图片&#xff08;抛开合理性和…...

基于Spring Boot的水产养殖管理系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于Spring Boot的水产养殖管理系统,jav…...

LCR 090. 打家劫舍 II(leetcode)动态规划

文章目录 前言一、题目分析二、算法原理1.状态表示2.状态转移方程3.初始化4.填表顺序5.返回值是什么 三、代码实现总结 前言 在本文章中&#xff0c;我们将要详细介绍一下LeetcodeLCR 090. 打家劫舍 II。采用动态规划解决&#xff0c;这是一道经典的多状态dp问题 一、题目分析…...

【小沐学Python】Python实现语音识别(Whisper)

文章目录 1、简介1.1 whisper简介1.2 whisper模型 2、安装2.1 whisper2.2 pytorch2.3 ffmpeg 3、测试3.1 命令测试3.2 代码测试&#xff1a;识别声音文件3.3 代码测试&#xff1a;实时录音识别 结语 1、简介 https://github.com/openai/whisper 1.1 whisper简介 Whisper 是…...

Nginx负载均衡实战

&#x1f3b5;负载均衡组件 ngx_http_upstream_module https://nginx.org/en/docs/http/ngx_http_upstream_module.html upstream模块允许Nginx定义一组或多组节点服务器组&#xff0c;使用时可以通过多种方式去定义服务器组 样例&#xff1a; upstream backend {server back…...

Redis skiplist源码解析(支持范围查询)

跳表是一个多层的有序链表&#xff0c;在跳表中进行查询操作时&#xff0c;查询代码可以从最高层开始查询。层数越高&#xff0c;结点数越少&#xff0c;同时高层结点的跨度会比较大。因此&#xff0c;在高层查询结点时&#xff0c;查询一个结点可能就已经查到了链表的中间位置…...

MVSNeRF:多视图立体视觉的快速推广辐射场重建(2021年)

MVSNeRF&#xff1a;多视图立体视觉的快速推广辐射场重建&#xff08;2021年&#xff09; 摘要1 引言2 相关工作3 MVSNeRF实现方法3.1 构建代价体3.2 辐射场的重建3.3 体渲染和端到端训练 3.4 优化神经编码体 Anpei Chen and Zexiang Xu and Fuqiang Zhao et al. MVSNeRF: Fast…...

华为OD机试真题-CPU算力分配-2023年OD统一考试(C卷)

题目描述: 现有两组服务器A和B,每组有多个算力不同的CPU,其中A[i]是A组第i个CPU的运算能力,B[i]是B组第i个CPU的运算能力。一组服务器的总算力是各CPU的算力之和。为了让两组服务器的算力相等,允许从每组各选出一个CPU进行一次交换,求两组服务器中,用于交换的CPU的算力,…...

校验数据是否重叠(各种操作符>,<,>=,<=,or,and)

最近接到一个需求&#xff0c;其中部分功能涉及到数据的重叠校验&#xff0c;并且录入的数据需要包含各种操作符。如果只通过java代码来查询并进行循环判断的话&#xff0c;判断情况会很复杂&#xff0c;幸好有同事的帮忙提供了一个用sql查询重叠部分的方法&#xff0c;现在分享…...

大一C语言作业 12.8

1.C 对一维数组初始化时&#xff0c;如果全部元素都赋了初值&#xff0c;可以省略数组长度。 这里没有指定数组长度&#xff0c;编译器会根据初始化列表的元素个数来确定数组长度。 2.C 在C语言中&#xff0c;字符数组是不能用赋值运算符直接赋值的。 3.C 在二维数组a中&#x…...

ELasticsearch:什么是语义搜索?

语义搜索定义 语义搜索是一种解释单词和短语含义的搜索引擎技术。 语义搜索的结果将返回与查询含义匹配的内容&#xff0c;而不是与查询中的单词字面匹配的内容。 语义搜索是一组搜索引擎功能&#xff0c;其中包括根据搜索者的意图及其搜索上下文理解单词。 此类搜索旨在通过…...

ooTD I 女儿是自己的,尽情打扮尽情可爱

分享女宝的时尚穿搭 奶乎乎的黄色也太好看了 超足充绒量&#xff0b;优质面料 柔软蓬松上身体验感超赞 怎么穿都好看系列 轻轻松松打造时尚造型&#xff01;&#xff01;...

第62天:django学习(十一)

cookie和session 发展史 一开始,只有一个页面&#xff0c;没有登录功能&#xff0c;大家看到东西都一样。 时代发展&#xff0c;出现了需要登录注册的网站&#xff0c;要有一门技术存储我们的登录信息&#xff0c;于是cookie诞生了。 cookie: - 存储形式&#xff1a;k:v键值对…...

Rust测试字符串的移动,Move

代码创建了一个结构体&#xff0c;结构体有test1 字符串&#xff0c;还有指向字符串的指针。一共创建了两个。 然后我们使用swap 函数 交换两个结构体内存的内容。 最后如上图。相同的地址&#xff0c;变成了另外结构体的内容。注意看指针部分&#xff0c;还是指向原来的地址…...

vue+electron问题汇总

1. Vue_Bug Failed to fetch extension, trying 4 more times 描述&#xff1a;项目启动时报错 解决&#xff1a;注释图片中内容 2. Module not found: Error: Can’t resolve ‘fs’ in 描述&#xff1a;项目启动报错 解决&#xff1a;vue.config.js中添加图中数据 3.导入…...

Linux中的网络时间服务器

本章主要介绍网络时间的服务器 使用chrony配置时间服务器配置chrony客户端服务器同步时间 1.1 时间同步的重要性 一些服务对时间要求非常严格&#xff0c;例如如图所示的由三台服务器搭建的ceph集群 这三台服务器的时间必须保持一致&#xff0c;如果不一致&#xff0c;就会显…...

fastadmin打印页面

如下图选中订单号进行打印 html中增加代码 <div id"toolbar" class"toolbar"><a href"javascript:;" class"btn btn-primary btn-refresh" title"{:__(Refresh)}" ><i class"fa fa-refresh">&l…...

Java 将word转为PDF的三种方式和处理在服务器上下载后乱码的格式

我这边是因为业务需要将之前导出的word文档转换为PDF文件&#xff0c;然后页面预览下载这样的情况。之前导出word文档又不是我做的&#xff0c;所以为了不影响业务&#xff0c;只是将最后在输出流时转换成了PDF&#xff0c;当时本地调用没什么问题&#xff0c;一切正常&#xf…...

C\C++ 获取最值

C C 语言的不同类型的最值可以在 limits.h 头文件里找到定义 #include <limits.h>int main() {printf("%d", INT_MAX); // 整数最大值printf("%d", INT_MIN); // 整数最小值 } C C 有模板&#xff0c;可以通过替换下面的 int 和 double&#xff…...

机器学习之无监督学习:九大聚类算法

今天&#xff0c;和大家分享一下机器学习之无监督学习中的常见的聚类方法。 今天&#xff0c;和大家分享一下机器学习之无监督学习中的常见的聚类方法。 在无监督学习中&#xff0c;我们的数据并不带有任何标签&#xff0c;因此在无监督学习中要做的就是将这一系列无标签的数…...

Linux高级管理-搭建网站服务

在Ihternet 网络环境中&#xff0c;Web 服务无疑是最为流行的应用系统。有了Web站点&#xff0c;企业可以充分 展示自己的产品&#xff0c;宣传企业形象。Web站点还为企业提供了与客户交流、电子商务交易平台等丰富 的网络应用。部署与维护Web 服务是运维工程师必须掌握的一个技…...

Windows 系统,TortoiseSVN 无法修改 Log 信息解决方法

使用SVN提交版本信息时&#xff0c;注释内容写的不全。通过右键TortoiseSVN的Show log看到提交的的注释&#xff0c;右键看到Edit log message的选项&#xff0c;然而提交后却给出错误提示&#xff1a; Repository has not been enabled to accept revision propchanges; ask …...

编译 Android gradle-4.6-all.zip 报错问题记录

编译 Android gradle-4.6-all.zip 报错问题记录 方法一&#xff1a;替换资源&#xff1a;方法二&#xff1a;修改源方法三&#xff1a;修改版本 编译时候无法下载 gradle-4.6-all Downloading https://services.gradle.org/distributions/gradle-4.6-all.zip 方法一&#xf…...

Linux系统调试课:Valgrind 内存调试

文章目录 一、为什么要学会Valgrind二、什么是内存泄露三、Valgrind的移植四、Valgrind相关参数沉淀、分享、成长,让自己和他人都能有所收获!😄 📢Valgrind 是一个开源的内存调试和性能分析工具,用于帮助开发者找出程序中的内存错误,如内存泄漏、使用未初始化的内存、非…...

python主流开发工具排名,python开发工具有哪些

本篇文章给大家谈谈python的开发工具软件有哪些&#xff0c;以及python主流开发工具排名&#xff0c;希望对各位有所帮助&#xff0c;不要忘了收藏本站喔。 python中用到哪些软件 一、Python代码编辑器1、sublime Textsublime Text是一款非常流行的代码编辑器&#xff0c;支持P…...

Spring Boot Async:从入门到精通,原理详解与最佳实践

Spring Boot 的异步功能&#xff08;Async&#xff09;允许我们将某些任务异步执行&#xff0c;而不会阻塞主线程。这对于处理耗时的操作非常有用&#xff0c;如发送电子邮件、生成报表、调用外部 API 等。通过异步处理&#xff0c;我们可以释放主线程&#xff0c;让它继续处理…...

oracle 19c创建db_link名称带.com域名问题处理

文章目录 一、修改PDB的global_name二、重启数据库实例三、修改domain后重试 一、修改PDB的global_name SYSorcl1>sho pdbsCON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ----------2 PDB$SEED …...

银行卡二要素API的应用案例:从在线购物到金融投资

引言 随着互联网技术的不断发展&#xff0c;人们的金融需求也在不断增加。随之而来的是各种新型金融服务的涌现&#xff0c;让用户的金融体验更加便利快捷。其中&#xff0c;银行卡二要素API的应用&#xff0c;则为用户的金融体验和安全性提供了极大的保障。 银行卡二要素API…...

MySQL 忘记root密码后重置密码操作

在忘记 MySQL 密码的情况下&#xff0c;可以通过 --skip-grant-tables 关闭服务器的认证&#xff0c;然后重置 root 的密码&#xff0c;具体操作步骤如下。 步骤 1)&#xff1a;关闭正在运行的 MySQL 服务。打开 cmd 进入 MySQL 的 bin 目录。 步骤 2)&#xff1a;输入mysqld -…...

开源电子合同签署平台小程序源码/电子文件签字+在线合同签署系统源码/电子合同小程序源码

源码简介&#xff1a; 开源电子合同签署平台小程序源码&#xff0c;它是电子文件签字在线合同签署系统源码/电子合同小程序源码 目前商业端和开源端一致&#xff0c;免费开源状态&#xff01; 聚合市场上各类电子合同解决方案商&#xff0c;你无需一个一个的对接电子合同厂商…...

J.408之数据结构

J-408之数据结构_北京信息科技大学第十五届程序设计竞赛&#xff08;同步赛&#xff09; (nowcoder.com) 思维好题&#xff0c;直接用两个set存没出现的数字就好了 // Problem: 408之数据结构 // Contest: NowCoder // URL: https://ac.nowcoder.com/acm/contest/68572/J // Me…...

前端食堂技术周刊第 107 期:技术播客节、Deno Cron、FEDAY、XState v5、Electron 2023 生态系统回顾

美味值&#xff1a;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f; 口味&#xff1a;烤椰拿铁 食堂技术周刊仓库地址&#xff1a;https://github.com/Geekhyt/weekly 大家好&#xff0c;我是童欧巴。欢迎来到前端食堂技术周刊&#xff0c;我们先来看下…...

三防平板|手持终端PDA|8寸/10寸工业三防平板电脑主板方案定制

近年来&#xff0c;随着科技的快速发展&#xff0c;三防平板成为了各行各业中不可或缺的工具。三防平板采用IP67级别的防护设计&#xff0c;通过了多项测试标准&#xff0c;如国标和美标&#xff0c;具备防水、防摔、防尘、防撞、防震、防跌落以及防盐雾等多重防护功能。因此&a…...

【C语言】动态内存管理(C语言的难点与精华,数据结构的前置知识,你真的掌握了吗?)

文章目录 引言一、为什么要动态内存分配二、动态内存分配的相关函数2.1 malloc2.2 free2.3 calloc2.4 realloc 三、常见的动态内存的错误3.1 对NULL指针的解引用3.2 对动态内存越界访问3.3 对非动态内存释放3.4 对动态内存部分释放3.5 对动态内存多次释放3.6 未对动态内存释放&…...

最长子序列问题(LCS)--动态规划解法

题目描述&#xff1a; 如果Z既是X的子序列&#xff0c;又是Y的子序列&#xff0c;则称Z为X和Y的公共子序列。 如果给定X、Y&#xff0c;求出Y及其长度。 示例&#xff1a; 输入 ABCPDSFJGODIHJOFDIUSHGD OSDIHGKODGHBLKSJBHKAGHI 输出 SDIHODSHG 9 分析&#xff1a; c…...

实时流式计算 kafkaStream

文章目录 实时流式计算Kafka StreamKafka Streams 的关键概念KStreamKafka Stream入门案例编写SpringBoot 集成 Kafka Stream 实时流式计算 一般流式计算会与批量计算相比较 流式计算就相当于上图的右侧扶梯&#xff0c;是可以源源不断的产生数据&#xff0c;源源不断的接收数…...

西南科技大学模拟电子技术实验七(集成运算放大器的非线性应用)预习报告

一、计算/设计过程 说明:本实验是验证性实验,计算预测验证结果。是设计性实验一定要从系统指标计算出元件参数过程,越详细越好。用公式输入法完成相关公式内容,不得贴手写图片。(注意:从抽象公式直接得出结果,不得分,页数可根据内容调整) 预习计算内容根据运放的非线…...

Ubuntu与Windows通讯传输文件(FTP服务器版)(没用的方法,无法施行)

本文介绍再Windows主机上建立FTP服务器&#xff0c;并且在Ubuntu虚拟机上面访问Windows上FTP服务器的方法 只要按照上图配置就可以了 第二部&#xff1a;打开IIS管理控制台 右击网站&#xff0c;新建FTP站点。需要注意的一点是在填写IP地址的时候&#xff0c;只需要填写Window…...

2024年AI视频识别技术的6大发展趋势预测

随着人工智能技术的快速发展&#xff0c;AI视频识别技术也将会得到进一步的发展和应用。2023年已经进入尾声&#xff0c;2024年即将来临&#xff0c;那么AI视频识别技术又将迎来怎样的发展趋势&#xff1f;本文将对2023年的AI视频技术做一个简单的盘点并对2024年的发展趋势进行…...

一篇文章了解JDK的前世今生

我们每天都在开发Java,每天都在使用JDK,那么我们了解JDK的发展史吗,这篇文章将带你深入了解JDK的发展史。 JDK(Java Development Kit)是Java开发者工具包,是用于编写Java程序和运行Java程序的软件开发工具集。自从1995年Java语言首次发布以来,JDK已经经历了数十年的发展…...

Redisson出现问题总结

org.redisson.client.RedisAuthRequiredException: NOAUTH Authentication required… channel: 出现此问题的原因为没有redis权限。解决方案在setAddress()后面加上setPassword()方法。 config.useSingleServer().setAddress("redis://localhost:6379").setPasswo…...