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

腿足机器人之二- 运动控制概览

腿足机器人之二运动控制概览

    • 高层运动规划
      • MPC
      • RL
    • 中层逆运动学和逆动力学
    • 底层执行器控制
    • 传感器校正

上一篇博客是腿足机器人的骨架和关节的机械和电气组件,关节不仅需要通过机械设计实现复杂的运动能力,还必须通过电子组件和控制系统来精确控制这些运动。

和人类类似,本篇博客介绍腿足机器人运动系统的设计,机器人关节的控制系统是其运动的大脑,负责解读传感器反馈并向执行器发送指令,以精确调节位置、速度和扭矩。这一系统由传感器、控制器和执行器共同工作,确保运动控制的准确性和效率。

腿足机器人的所有运动,最终都会反应在对关节的控制上,大体上关节的运动一般采用运动学和强化学习两类方法,如运动学逆解算法用于规划关节角度(如肘式/膝式腿的几何求解),强化学习(RL)优化步态生成,如NVIDIA Isaac Lab端侧部署方案。

机器人上的各个传感器连续监测关节的位置、速度及其他相关参数,并向控制器提供反馈。控制器将这一反馈与期望的设定值进行比较,生成纠正信号以调整关节的运动。这种反馈回路允许实时调整,确保关节即使在外部干扰或负载变化的情况下也能准确地遵循预定轨迹。

闭环控制系统提供高精度和稳定性,非常适合需要精确定位和运动控制的应用,如机器人手术和制造过程。

早期机器人运动控制以波士顿波力Spot机器人为典型代表,其采用的PD+前馈控制技术,可以见第三篇博客。
而当前较新主流腿足机器人运动控制以PD+MPC/强化学习为主,流程大致可以分为高层运动规划、中层逆运动学与逆动力学以及底层执行器控制三层。本篇博客先概览简要介绍各个部分,以建立top-down机器人运动控制的整体概念。

一个完整的动作流程大致如下:

传感器数据(IMU、关节编码器、力传感器)→ MPC规划/RL规划 → 逆运动学 → 关节目标角度 → PD控制器 → 电机驱动信号

高层运动规划

在接收到运动指令(行走、奔跑)之后,高层算法(模型预测控制(MPC)或者强化学习(RL)算法)负责全局规划,底层PD确保实时跟踪,两者协同实现动态运动。

MPC

在奔跑/行走的动作规划和控制中,高层运动规划模块主要完成步态生成和轨迹生成两部分。其运行频率在50-100Hz(每10-20ms规划一次)。

对于步态生成则可基于机器人动力学模型,滚动规划未来几步的质心(CoM)轨迹和足端接触力,确保动态平衡,在行走的时候,计算支撑多边形内的零力矩点(ZMP)位置,防止跌倒。躯干姿态和加速度可以使用IMU测量,足端接触力科使用六轴力传感器测量,关节的角度和速度使用关节编码器测量。

对于轨迹生成包括足端轨迹和质心轨迹,足端轨迹指的是规划摆动退的抛物线轨迹(奔跑时)或直线轨迹(行走时),质心轨迹是指通过简化模型(如倒立摆模型)生成质心高度和水平位置的变化曲线。

以ANYmal机器人为例
在这里插入图片描述

传感器数据--->MPC估计--->生成$\theta_{desired}$--->PD控制器--->电机驱动
  • MPC层:每50ms计算一次未来0.5秒的足端轨迹和接触力
  • PD层:以1kHz频率跟踪关节角度,公式:
    τ = K p ( θ d e s i r e d − θ ) + K d ( θ ˙ d e s i r e d − θ ) \tau =K_p(\theta_{desired}-\theta) + K_d(\dot \theta_{desired}-\theta) τ=Kp(θdesiredθ)+Kd(θ˙desiredθ)

模型预测控制存在如下挑战:

挑战解决方案
模型不准确自适应控制(如在线参数估计) + 鲁棒PD参数
执行器延迟提高控制频率 + 预测滤波(如卡尔曼滤波)
地面接触突变阻抗控制(调节PD的 K p K_p Kp为虚拟刚度, K d K_d Kd为虚拟阻尼)
实时计算资源限制简化模型(如单刚体模型) + 代码优化(定点运算、并行计算)
齿轮箱背隙、电机饱和等非线性问题通过前馈和抗饱和策略避免性能下降
多关节联动导致力矩耦合结合解耦控制或全状态反馈(如LQR)
地面反作用力突变力传感器反馈 + 自适应阻抗控制(动态调整 K p K_p Kp K d K_d Kd)

RL

强化学习的目标是通过试错学习最优策略(Policy),其输出形式取决于具体任务和算法设计。在腿足机器人中,RL的输出通常分为两类:

输出类型描述示例优点缺点
直接关节控制RL策略直接输出各关节的目标角度或扭矩,无需中间计算策略网络输出12个关节的目标角度(对应机器人自由度)1.无需依赖精确的动力学模型,RL通过仿真学习直接优化关节动作; 2.适合复杂动作(如翻滚、跳跃),传统模型难以精确建模1. 需要大量训练数据,计算成本高 2.可解释性差,难以手动调整策略
高层指令生成RL输出末端执行器轨迹(如足端位置)或质心运动指令,需通过IK转换为关节角度RL规划足端轨迹,再通过逆运动学求解关节角度1.结合传统控制方法(如IK),提高稳定性和可解释性 2.减少RL策略的复杂度(输出维度更低)依赖逆运动学求解的准确性,可能受模型误差影响

上面的两种在业界都有案例,比如OpenAI的Dactyl机械手通过RL直接控制关节扭矩实现灵活操作,而MIT Cheetah 3通过RL优化足端轨迹,再通过IK控制关节。也有在RL+IK的基础上再结合MPC的混合架构,如适应复杂地形的波士顿动力Atlas机器人。

RL方法的一个挑战是获得训练数据,在机器人行走之前,采集数据的成本是高昂的,所以一般训练都是先基于仿真环境,在在仿真中定义奖励函数(如前进速度、能量效率、姿态稳定性),然后通过PPO或SAC算法优化策略模型预测结果,然后再迁移到实际的环境中。

挑战解决方案
RL训练效率低使用仿真-现实迁移(Sim2Real)技术,结合域随机化(Domain Randomization)
IK求解不唯一引入优化目标(如最小能量、关节力矩平滑),通过QP求解唯一解
实时性不足部署轻量化神经网络(如TinyML),推理加速框架tensorRT,或使用分层控制(高频PD + 低频RL更新)

现代系统(如ANYmal、Unitree)倾向于结合RL高层规划与传统控制(IK+PD),兼顾学习能力与实时可靠性。

中层逆运动学和逆动力学

运动学关注的是机器人在不受外力影响时的运动状态,如位置、速度和加速度。而动力学则考虑在实际运动过程中力和扭矩如何影响机器人的运动,这包括了对刚体的质量分布及其与关节相互作用的分析。这两个领域是理解机器人如何与外界相互作用并执行任务的基础,对优化机器人的设计和功能至关重要。

在高层中主要是机器人质心规划,逆运动学(IK)是将质心轨迹和足端轨迹映射到各关节角度。例如,给定足端目标位置 ( x , y , z ) (x,y,z) (x,y,z),根据足端轨迹方程(如抛物线轨迹,根据 v v v水平速度, h h h抬腿高度, T T T摆动时间)求解髋、膝、踝关节的角度 ( θ h i p , θ k n e e , θ a n k l e ) (\theta_{hip}, \theta_{knee}, \theta_{ankle}) (θhip,θknee,θankle),这可以使用雅可比矩阵或者数值优化方法(如梯度下降)实时计算求解。

逆动力学则是计算关节所需要的力矩 τ \tau τ,满足运动学和动力学约束:
τ = M ( q ) q ¨ + C ( q , q ˙ ) q ˙ + G ( q ) + J T F e x t \tau = M(q) \ddot q + C(q,\dot q)\dot q + G(q) +J^{T}F_{ext} τ=M(q)q¨+C(q,q˙)q˙+G(q)+JTFext

其中 M M M是惯性矩阵, C C C是科氏力, G G G是重力, J J J是雅可比矩阵, F e x t F_{ext} Fext是地面反作用力。

底层执行器控制

腿足机器人的驱动器控制算法(如PID和PD)是实现其运动稳定性和动态响应的核心技术。
PID/PD):跟踪高层指令,实现高频率(1-10kHz,即每0.1~1ms更新一次)的精确执行。
以PD控制为例,为了跟踪关节目标角度 q d e s i r e d q_{desired} qdesired和速度 q ˙ d e s i r e d \dot q_{desired} q˙desired,需要给电机一定的力矩,其计算如下:

τ f b = K p ( q d e s i r e d − q a c t u a l ) + K d ( q ˙ d e s i r e d − q ˙ a c t u a l ) \tau_{fb}=K_p(q_{desired}-q_{actual})+K_d(\dot q_{desired}-\dot q_{actual}) τfb=Kp(qdesiredqactual)+Kd(q˙desiredq˙actual)

由于机器人自重、惯性带来的影响,可以加上逆动力学计算的理想力矩 τ f f \tau_{ff} τff,则最终的力矩可以表示为:
τ = τ f f + τ f b \tau = \tau_{ff} + \tau_{fb} τ=τff+τfb
这一力矩通过液压阀或者电机驱动器转为物理动作。

传感器校正

开篇提到一个完整动作流程的第一步是传感器的数据获取,然后才是估计姿态,这是因为传感器有噪声、环境也不确定性,此外还有动态系统的随机性。这里使用到的是概率机器人理论(后续博客揭示),这里简要看一下。

腿足机器人需要实时估计自身姿态(如躯干角度、关节位置)和运动状态(如速度、加速度),但传感器数据(IMU、编码器、力传感器)通常包含噪声。其核心思想是先不参考传感器数据,会有一个先验状态,然后结合传感器对状态进行修正,使用到的方法有卡尔曼滤波、粒子滤波等。

此外在腿足机器人动态环境中运动时,需考虑障碍物位置、地面摩擦系数等不确定性因素。概率方法用于增强规划的鲁棒性,会使用概率路线图(Probabilistic Roadmap, PRM)、蒙特卡洛树搜索(Monte Carlo Tree Search, MCTS)等方法评估候选路径和不同动作序列成功的概率。

概率方法的核心作用

控制流程概率方法解决的问题
状态估计卡尔曼滤波、粒子滤波传感器噪声与动态不确定性
运动规划PRM、MCTS环境障碍物与地形不确定性
强化学习随机策略、熵正则化探索-利用权衡与策略鲁棒性
模型预测控制高斯过程、随机MPC动力学模型误差与外部干扰
足地交互贝叶斯估计、概率摩擦锥接触状态与地面特性不确定性

相关文章:

腿足机器人之二- 运动控制概览

腿足机器人之二运动控制概览 高层运动规划MPCRL 中层逆运动学和逆动力学底层执行器控制传感器校正 上一篇博客是腿足机器人的骨架和关节的机械和电气组件,关节不仅需要通过机械设计实现复杂的运动能力,还必须通过电子组件和控制系统来精确控制这些运动。…...

前端面试大全

前端面试大全 一、htmlcss1、垂直定位的实现方式 二、javascript1、深拷贝浅拷贝2、作用域3、原型原型链4、防抖节流5、设计模式 三、ES61、 四、typescript五、vue1、vue2和vue3的区别2、生命周期3、computedwatch 六、react七、uni-app八、Cesiumopenlayer九、Threejs十、ngi…...

如何使用智能化RFID管控系统,对涉密物品进行安全有效的管理?

载体主要包括纸质文件、笔记本电脑、优盘、光盘、移动硬盘、打印机、复印机、录音设备等,载体(特别是涉密载体)是各保密、机要单位保证涉密信息安全、防止涉密信息泄露的重要信息载体。载体管控系统主要采用RFID射频识别及物联网技术&#xf…...

Python 调用 DeepSeek API 案例详细教程

本案例为以 Python 为例的调用 DeepSeek API 的小白入门级详细教程 步骤 先注册并登录 DeepSeek 官网:https://www.deepseek.com/ 手机号验证码注册或登录即可 创建 API KEY 注意保存,写代码时必须提供的 打开 Pycharm 创建工程 并安装 OpenAI 库编写代…...

牛客面筋学习

准备阶段: 楼主其实很早就开始准备了,大概从年初开始,陆陆续续总结自己的项目,复盘,然后复习数电模电信号电路等,复习完后,便开始刷题;顺便说一下,如果需要发小论文的也…...

对指针的深入运用-通讯录的初步实现

1.通讯录的功能 手机里的通讯录,是能够存放联系人的信息,包括姓名,性别,地址,电话号码,也可以加上性别。而且手机中的通讯录肯定有增删查改的功能,而且在list里是按照顺序排序的,可以…...

VUE环境搭建

node.js安装 node npm – node Package Management 安装完成后,需要设置: npm config set prefix "D:\nodejs"注意:“D:\nodejs” 此处为自己安装的node.js路径。管理员身份运行 切换镜像源 npm config set registry https://r…...

DeepSeek应用——与PyCharm的配套使用

目录 一、配置方法 二、使用方法 三、注意事项 1、插件市场无continue插件 2、无结果返回,且在本地模型报错 记录自己学习应用DeepSeek的过程,使用的是自己电脑本地部署的私有化蒸馏模型...... (举一反三,这个不单单是可以用…...

C# ASP.NET的未来发展趋势

.NET学习资料 .NET学习资料 .NET学习资料 在快速发展的技术浪潮中,C# ASP.NET不断顺应时代潮流,展现出一系列令人瞩目的未来发展趋势。这些趋势不仅反映了技术的进步,也为开发者带来了更多的机遇和挑战。 云原生应用开发 随着云计算的普及…...

leetcode 416. 分割等和子集

题目如下 数据范围 本题和leetcode 2915. 和为目标值的最长子序列的长度类似&#xff0c;这里不过多赘述。leetcode 2915. 和为目标值的最长子序列的长度 通过代码 class Solution { public:bool canPartition(vector<int>& nums) {int n nums.size();int an…...

WPF进阶 | 深入 WPF 依赖项属性:理解其强大功能与应用场景

WPF进阶 | 深入 WPF 依赖项属性&#xff1a;理解其强大功能与应用场景 前言一、依赖项属性基础概念1.1 什么是依赖项属性1.2 依赖项属性与 CLR 属性的区别1.3 依赖项属性的定义与注册 二、依赖项属性的原理深入剖析2.1 依赖项属性系统的工作机制2.2 元数据&#xff08;Metadata…...

浅聊MQ之Kafka与RabbitMQ简用

Kafka与RabbitMQ的使用举例 Kafka的使用举例 安装与启动&#xff1a; 从Apache Kafka官网下载Kafka中间件的运行脚本。解压后&#xff0c;通过命令行启动Zookeeper&#xff08;Kafka的运行依赖于Zookeeper&#xff09;。启动Kafka的服务器进程。 基本功能实现&#xff1a; 生…...

2.1 JUnit 5 测试发现机制详解

JUnit 5 测试发现机制详解 JUnit 5 的测试发现机制是框架的核心功能之一&#xff0c;负责识别测试类、方法和其他可执行元素&#xff0c;并构建出可执行的测试计划。该机制通过模块化设计支持高度扩展性&#xff0c;允许开发者自定义测试发现规则。以下是其工作原理的详细解析…...

【Elasticsearch】match查询

Elasticsearch 的match查询是全文搜索中最常用和最强大的查询类型之一。它允许用户在指定字段中搜索文本、数字、日期或布尔值&#xff0c;并提供了丰富的功能来控制搜索行为和结果。以下是match查询的详细解析&#xff0c;包括其工作原理、参数配置和使用场景。 1.match查询的…...

【开发心得】CentOS7编译Redis7.4.2打包RPM完整方案

概述 由于最近客户需要解决redis版本升级问题&#xff0c;故而全网寻找安全版本&#xff0c;redis7.4.x版本求而为果&#xff0c;只能自己编译了。 截止发文时间2025-02-12 最新稳定版的redis版本号为7.4.2 Security fixes (CVE-2024-46981) Lua script commands may lead t…...

云计算——AWS Solutions Architect – Associate(saa)6.CloudWatch

Amazon CloudWatch 是一种面向开发运营工程师、开发人员、站点可靠性工程师(SRE)和 IT 经理的监控和可观测性服务。CloudWatch 为我们提供相关数据和切实见解&#xff0c;以监控应用程序、响应系统范围的性能变化、优化资源利用率&#xff0c;并在统一视图中查看运营状况。 Clo…...

面试实战题:手写一个队列和介绍Stream流怎么使用

手写一个队列 思路解析&#xff1a; 队列要有入队和出队操作&#xff0c;还要有查看队列大小&#xff0c;查看队头元素&#xff0c;查看队列是否为空&#xff0c;查看队列是否满了这些功能 package com.example.transational.MyQueue;public class MyQueue<T> {privat…...

Jmeter+Influxdb+Grafana平台监控性能测试过程

一、Jmeter自带插件监控 下载地址&#xff1a;https://jmeter-plugins.org/install/Install/ 安装&#xff1a;下载后文件为jmeter-plugins-manager-1.3.jar&#xff0c;将其放入jmeter安装目录下的lib/ext目录&#xff0c;然后重启jmeter&#xff0c;即可。 启动Jmeter&…...

【现代深度学习技术】深度学习计算 | GPU

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上&#xff0c;结合当代大数据和大算力的发展而发展出来的。深度学习最重…...

基于斜坡单元的机器学习模型预测滑坡易发性,考虑条件因素的异质性

&#xff11;、引用 Chang Z, Catani F, Huang F, et al. Landslide susceptibility prediction using slope unit-based machine learning models considering the heterogeneity of conditioning factors[J]. Journal of Rock Mechanics and Geotechnical Engineering, 2023…...

Node.js调用DeepSeek Api 实现本地智能聊天的简单应用

在人工智能快速发展的今天&#xff0c;如何快速构建一个智能对话应用成为了开发者们普遍关注的话题。本文将为大家介绍一个基于Node.js的命令行聊天应用&#xff0c;它通过调用硅基流动&#xff08;SiliconFlow&#xff09;的API接口&#xff0c;实现了与DeepSeek模型的智能对话…...

实战 - 编写一个最简单的 Hello World 内核模块

实战 - 编写一个最简单的 Hello World 内核模块 在嵌入式开发中&#xff0c;编写 Linux 内核模块是设备驱动开发的重要基础。内核模块可以帮助我们在不修改内核源码的情况下扩展内核功能。本篇博客将指导你如何编写并运行一个简单的 Hello World 内核模块&#xff0c;让你快速…...

面向对象程序设计-实验七

6-1 计算捐款总量 这里需要设计一个捐款人类Donator及一个相关函数getMaxName( )&#xff0c;Donator类中包含捐款人的姓名及其捐款额 代码清单&#xff1a; #include <iostream> using namespace std; class Donator { private: string name; float money; //单位&…...

JVM组成

JVM是什么&#xff1f; JVM&#xff08;Java Virtual Machine&#xff09;&#xff1a;Java程序的运行环境(java二进制字节码的运行环境) 好处&#xff1a; 1.一次编写&#xff0c;到处运行 Java代码是如何做到一次编写&#xff0c;到处运行&#xff1f; 计算机的最底层是计…...

java.lang.NoClassDefFoundError: javax/xml/bind/ValidationException

Java8升级到17之后, 启动报错, :LocalValidatorFactoryBean]: Factory method defaultValidator threw exception; nested exception is java.lang.NoClassDefFoundError: javax/xml/bind/ValidationException 报错原因:这个错误通常是由于缺少 javax.xml.bind 相关的依赖引起…...

Electron 实现自定义系统托盘菜单

效果如下&#xff1a; 其实实现自定义托盘菜单的本质上&#xff0c;就是开一个新窗口&#xff0c;下面直接给出核心代码。 // 加载窗口 const loadWindow (example, path) > {if (is.dev && process.env[ELECTRON_RENDERER_URL]) {example.loadURL(process.env[EL…...

HCIA-路由器相关知识和面试问题

二、 路由器 2.1 关于路由器的知识 2.1.1 什么是路由器 路由器是一种网络层互联设备&#xff0c;主要用于连接多个逻辑上分开的网络&#xff0c;实现不同网络之间的数据路由和通信。它能根据网络层地址&#xff08;如 IP 地址&#xff09;来转发数据包&#xff0c;在网络中起…...

2.【BUUCTF】bestphp‘s revenge

进入题目页面如下 进行代码审计 <?php // 1. 高亮显示当前PHP文件的源代码&#xff0c;方便开发者查看代码内容&#xff0c;在生产环境中不应使用此函数&#xff0c;可能会导致代码泄露。 highlight_file(__FILE__);// 2. 定义变量 $b &#xff0c;其值为字符串 implode &…...

wx060基于springboot+vue+uniapp的宿舍报修系统小程序

开发语言&#xff1a;Java框架&#xff1a;springbootuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#…...

使用 meshgrid函数绘制网格点坐标的原理与代码实现

使用 meshgrid 绘制网格点坐标的原理与代码实现 在 MATLAB 中&#xff0c;meshgrid 是一个常用函数&#xff0c;用于生成二维平面网格点的坐标矩阵。本文将详细介绍如何利用 meshgrid 函数生成的矩阵绘制网格点的坐标&#xff0c;并给出具体的代码实现和原理解析。 实现思路 …...

快速上手Vim的使用

Vim Linux编辑器-vim使用命令行模式下所有选项都可以带数字底行模式可视块模式&#xff08;ctrlV进入&#xff09; Linux编辑器-vim使用 Vim有多种模式的编辑器。能帮助我们很快的进行代码的编辑&#xff0c;甚至完成很多其他事情。 默认情况下我们打开vim在命令模式下&#x…...

HCIA项目实践---ACL访问控制列表相关知识和配置过程

十 ACL访问控制列表 1 策略的概念 在网络连通之后&#xff0c; 把所有为了追求控制而实现的技术都叫策略 2 访问控制 在路由器流量流入或者流出的接口上&#xff0c;匹配流量&#xff0c;执行相应的动作。&#xff08;流量流入或者流出的接口并不是一个固定的概念而是一个相对的…...

机器学习核心算法解析

机器学习核心算法解析 机器学习是人工智能的核心技术之一&#xff0c;它通过从数据中学习模式并做出预测或决策。本文将深入解析机器学习的核心算法&#xff0c;包括监督学习、无监督学习和强化学习&#xff0c;并通过具体案例和代码示例帮助读者理解这些算法的实际应用。 1. …...

Oracle 12c 并发统计信息收集功能:技术解析与实践指南

一、功能背景与核心价值 在Oracle数据库的早期版本中&#xff0c;统计信息收集&#xff08;如通过DBMS_STATS包&#xff09;是串行执行的&#xff0c;即一次仅处理一个表或分区。对于大规模数据库或数据仓库环境&#xff0c;这种串行模式可能导致统计信息收集耗时过长&#xf…...

Android Studio:EditText常见4种监听方式

1. 文本变化监听&#xff08;TextWatcher&#xff09; TextWatcher 主要用于监听 EditText 里的文本变化&#xff0c;它有三个方法&#xff1a; beforeTextChanged&#xff08;文本变化前&#xff09;onTextChanged&#xff08;文本正在变化时&#xff09;afterTextChanged&a…...

【第2章:神经网络基础与实现——2.3 多层感知机(MLP)的构建与调优技巧】

在当今科技飞速发展的时代,人工智能早已不是一个陌生的词汇,它已经渗透到我们生活的方方面面,从智能语音助手到自动驾驶汽车,从图像识别到自然语言处理。而支撑这一切的核心技术之一,就是神经网络。作为机器学习领域的璀璨明星,神经网络已经在众多任务中取得了令人瞩目的…...

C++ 网络编程

1. socket Socket 是一种用于网络通信的编程接口&#xff0c;它提供了一种类似于文件描述符的接口&#xff0c;允许不同计算机之间的进程进行通信。Socket 可以工作在多种协议上&#xff0c;最常用的是 TCP/IP 和 UDP/IP 协议 1.1 UDP 1.1.1 概念 UDP&#xff08;用户数据报协…...

SQL-leetcode—1683. 无效的推文

1683. 无效的推文 表&#xff1a;Tweets ----------------------- | Column Name | Type | ----------------------- | tweet_id | int | | content | varchar | ----------------------- 在 SQL 中&#xff0c;tweet_id 是这个表的主键。 content 只包含美式键盘上的字符&am…...

vue前端可视化大屏页面适配方案

参考了其他博主的代码&#xff0c;但发现会有滚动条&#xff0c;并且居中的位置不太对&#xff0c;所以改了一下css&#xff0c;修复了这些问题&#xff0c;直接上代码 <template> <div class"ScaleBoxA"><divclass"ScaleBox"ref"Sca…...

mars3d接入到uniapp的时候ios上所有地图的瓦片都无法加载解决方案

用的是【Mars3d】官网的uniapp的仓库&#xff0c;安卓没有问题&#xff0c;但是ios的不行 相关链接 mars3d-uni-app: uni-app技术栈下的Mars3D项目模板 解决方案&#xff1a;感觉所有图片请求全被拦截了 uniapp的ios内核不允许跨域&#xff0c;需要先把瓦片下载后转base64&…...

Dockfile语法

目录 dockerfile的作用 1. 构建 Docker 映像 2. 提高开发和运维效率 3. 版本控制 4. 提供可移植性和灵活性 使用示例 总结 dockerfile应该放的位置 为什么放在根目录&#xff1f; 例外情况 调用构建 dockerfile的基本结构和常用指令 基本结构和常用指令 示例 Dock…...

Nginx负载均衡

一。Nginx负载均衡的算法以及过程 二。nginx四层负载均衡的配置&#xff08;四层&#xff09; 1.vi /etc/nginx/conf.d/lb.conf 比较常见&#xff1a;weight&#xff1a;设置权重&#xff0c;backup&#xff1a;当其他主机全部用不了&#xff0c;这个作为备份 2.systemctl r…...

【C】初阶数据结构5 -- 栈

前面学习了两种最基本的数据结构 -- 顺序表和链表&#xff0c;接下来就可以基于这两种数据结构来实现其他数据结构了。其实&#xff0c;其他的数据结构的物理结构要么是数组&#xff0c;要么就是链表&#xff0c;所以学好顺序表和链表是学好其他数据结构的基础。接下里&#xf…...

Linux查找占用的端口,并杀死进程的简单方法

在Linux系统管理中&#xff0c;识别并管理占用特定端口的进程是一项常见且重要的任务。以下是优化过的步骤指南&#xff0c;帮助您高效地完成这一操作&#xff0c;同时提供了一个简洁的命令参考表。 Linux下识别并终止占用端口的进程 1. 探寻端口占用者 使用 lsof命令 lsof…...

为什么Pytorch中实例化模型会直接调用forward方法?

在 PyTorch 中&#xff0c;为何定义一个继承自 nn.Module 的自定义类并实现 forward 方法后&#xff0c;直接调用模型实例时&#xff0c;便会自动调用其 forward 方法&#xff1f;例如使用 output model(x) 这种形式。 因为自定义的神经网络类所继承的 nn.Module 类对 __call_…...

easyexcel快速使用

1.easyexcel EasyExcel是一个基于ava的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel 即通过java完成对excel的读写操作&#xff0c; 上传下载 2.easyexcel写操作 把java类中的对象写入到excel表格中 步骤 1.引入依赖 <depen…...

DeepSeek的出现会对百度有多大影响?

当DeepSeek与ChatGPT等大模型接管搜索入口&#xff0c;我们正见证百年一遇的信息革命。 01 传统搜索已死&#xff1f;AI助手正在重写游戏规则&#xff01; 当DeepSeek与ChatGPT等大模型接管搜索入口&#xff0c;我们正见证百年一遇的信息革命。 就像汽车淘汰马车、触屏终结按键…...

生成格雷码

以下是Verilog实现格雷码的两种常见方法&#xff1a; 1. 二进制转格雷码&#xff08;组合逻辑实现&#xff09; module binary_to_gray #(parameter N 4 // 默认4位位宽 )(input [N-1:0] binary, // 二进制输入output [N-1:0] gray // 格雷码输出 );assign gray binary…...

【STM32】BootLoader和IAP详解

文章目录 0 前言1 基本概念2 BootLoader3 主程序相关配置4 相关理论&#xff1a;芯片启动与中断响应5 特殊情况&#xff1a;Cortex-M0内核的芯片 0 前言 最近在研究一个RT-Thread的项目&#xff0c;遇到很多之前没咋遇见过的STM32相关的知识&#xff0c;想着顺带也整体过一遍。…...

Threadlocal的实现原理

文章目录 ThreadLocal与Thread关系分析Threadlocal 不支持继承性lnheritableThreadLocal 类 ThreadLocal与Thread关系分析 由该图可知&#xff0c; Thread 类中有一个 threadLocals 和一个 inheritableThreadLocals &#xff0c; 它们 都是 ThreadLocalMap 类型 的变量 &#x…...