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

腿足机器人之六- 前向运动学

腿足机器人之六- 前向运动学

  • 刚体运动学基础
    • 坐标系定义
    • 旋转矩阵与欧拉角
    • 齐次变换矩阵(平移+旋转的统一表示)
  • 运动链建模
    • 串联运动链结构(从基座到末端的关节连接)
    • 标准Denavit-Hartenberg(D-H)参数法
    • 改进D-H参数法(针对复杂关节轴对齐问题)
  • 多腿协调与基座标系转换
    • 基座标系(机器人本体)到世界坐标系的变换
    • 多腿独立运动学链的全局坐标统一
  • 真实机器人中的挑战
  • 仿真工具推荐

想象一下,你正在控制一个四足机器人(比如波士顿动力的Spot)在复杂地形中行走。要让它的“脚”准确踩到目标位置,首先需要知道一个问题:
“如果机器人的关节转动某个角度,它的脚会移动到哪里?”
这就是**前向运动学(Forward Kinematics)**解决的问题。
它是机器人控制的基石,也是理解步态规划、避障等高级功能的第一步。

机器人在运动的时候,还需要根据未来的姿态动作,倒推计算关节的控制信息,这被称为逆运动学,下一篇博客揭晓,欢迎关注,前向运动学的基础是刚体变换和坐标系转换,这部分和普通机械臂类似(如成熟的工业机械臂),用到的核心知识是D-H参数,但腿足机器人的结构更加多变,比如关节的串联和并联以及多个自由度。

腿足机器人通常有两或四个腿,需要考虑基坐标系到每个腿的基座,再到脚端的位置,这里涉及多个运动链,比如四足机器人每条腿独立,但身体作为基座。需要确定每个连杆的坐标系,然后通过变换矩阵相乘得到末端位置。

在第二篇 腿足机器人之二- 运动控制概览我们提到前向运动学是中间层,运动的规划(步态规划)则是MPC/RL等算法实现,前向运动学主要是关注单腿的运动学,而不是步态规划。但前向运动学需要考虑基坐标系的变化,比如当机器人身体移动时,各腿末端的位置会相对世界坐标系变化,可能需要将身体坐标系到世界坐标系的转换也包括进去。

前向运动学知识点主要包括:刚体运动学基础(坐标系、旋转矩阵、齐次变换)、关节类型(旋转和移动关节)、运动链建模(串联结构)、正运动学公式推导(变换矩阵连乘)、多腿协调中的基座变换(比如身体移动对脚端位置的影响)、以及可能的并联机构(如果腿有并联结构的话)。

刚体运动学基础

在腿足机器人中,坐标系定义是运动学建模的核心,经典运动学中主要包括三种坐标系,分别是基坐标系,关节坐标系、末端坐标系,这是描述机器人运动控制、步态规划,注意和环境感知、定位导航的坐标系(如Camera传感器上的坐标、地图坐标等等)区别。

坐标系定义

在这里插入图片描述

基坐标系(base frame):通常固定在机器人躯干或髋关节处(如上图中间的圆圈位置,在髋关节的旋转中心),通常以髋关节的初始位置为原点,Z轴(Yaw)垂直于躯干平面(竖直方向,人体直立时从脚到头的连线),X轴(Roll)指向机器人前进方向(平行于地面),Y轴(Pitch,从左肩到右肩的连线)。
关节坐标系:每个关节的局部坐标系,用于描述相邻连杆的相对运

  • 髋关节坐标系:与基坐标系重合(初始状态),当髋关节偏航(Yaw)时,绕基坐标系的Z轴旋转。
  • 膝关节坐标系:位于大腿末端,绕髋关节俯仰轴(Y轴)旋转。
  • 踝关节坐标系:位于小腿末端,绕膝关节俯仰轴(Y轴)旋转。
  • 肩关节坐标系:位于肩部,提供三个方向运动。
  • 肘关节坐标系:位于手肘不,沿X轴(Roll)平移运动。
    末端坐标系:固定在足端或执行器(如足底、手掌)的坐标系。

旋转矩阵与欧拉角

在腿足机器人中,每个关节的旋转会改变后续连杆的方向,以髋关节的偏航 Y a w Yaw Yaw为例:
假设髋关节绕基坐标系的Z轴旋转角度为 θ \theta θ,则其旋转矩阵为:
R z ( θ ) = [ cos ⁡ θ − sin ⁡ θ 0 sin ⁡ θ cos ⁡ θ 0 0 0 1 ] R_z(\theta)=\begin{bmatrix} \cos \theta & -\sin \theta & 0 \\ \sin \theta & \cos \theta & 0 \\ 0 & 0 & 1 \end{bmatrix} Rz(θ)= cosθsinθ0sinθcosθ0001

矩阵元素物理意义
R 11 = cos ⁡ θ R_{11}=\cos \theta R11=cosθ表示新坐标系Z轴在原坐标系X轴上的投影比例
R 12 = − sin ⁡ θ R_{12}=-\sin \theta R12=sinθ$表示新坐标系Y轴在原坐标系X轴上的投影比例(因旋转后Y轴向左偏移)
R 21 = sin ⁡ θ R_{21}=\sin \theta R21=sinθ表示新坐标系X轴在原坐标系Y轴上的投影比例(X轴向右前方倾斜)
R 22 = cos ⁡ θ R_{22}=\cos \theta R22=cosθ表示新坐标系Y轴在原坐标系Y轴上的投影比例
R 33 = 1 R_{33}=1 R33=1$表示新坐标系Z轴和原坐标系Z轴始终重合(绕Z轴旋转不影响竖直方向)

其他轴(X/Y)的旋转矩阵类似,需注意旋转顺序(如Z-Y-Z欧拉角)

齐次变换矩阵(平移+旋转的统一表示)

齐次变换矩阵用于描述从一个坐标系到另一个坐标系的平移和旋转,是串联关节运动的核心工具,还是以上面的髋关节俯仰(绕Y轴旋转)为例,其变换矩阵为:
将平移向量 p = [ x , y , z ] T \mathbf p=[x,y,z]^T p=[x,y,z]T和旋转矩阵 R R R合并为4x4矩阵:
T = [ R p 0 1 ] T=\begin{bmatrix} R & p \\ 0 & 1 \end{bmatrix} T=[R0p1]
用于统一描述刚体的位姿变换。

  • 髋关节偏航(Yaw)
    假设基座标系为( O 0 O_0 O0),髋关节旋转后的坐标系为 O 1 O_1 O1,则变换矩阵 T 1 0 T_1^0 T10包含绕Z轴(脚到头连线)旋转 θ 1 \theta_1 θ1,无平移(假设关节在原点):
    T 1 0 [ cos ⁡ θ 1 − sin ⁡ θ 1 0 0 sin ⁡ θ 1 cos ⁡ θ 1 0 0 0 0 1 0 0 0 0 1 ] T_1^0\begin{bmatrix} \cos \theta_1 & -\sin \theta_1 & 0 &0\\ \sin \theta_1 & \cos \theta_1 & 0 & 0\\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1\end{bmatrix} T10 cosθ1sinθ100sinθ1cosθ10000100001

  • 髋关节俯仰
    髋关节旋转后的坐标系为 O 1 O_1 O1,大腿末端的坐标系为 O 2 O_2 O2,绕Y轴(左肩到右肩连线)旋转 θ 2 \theta_2 θ2,并沿大腿长度方向(新
    的X轴)平移 L 1 L_1 L1(大腿长度):
    T 2 1 [ cos ⁡ θ 2 0 sin ⁡ θ 2 L 1 cos ⁡ θ 2 0 1 0 0 − sin ⁡ θ 2 0 cos ⁡ θ 2 − L 1 sin ⁡ θ 2 0 0 0 1 ] T_2^1\begin{bmatrix} \cos \theta_2 & 0 & \sin \theta_2 & L_1 \cos \theta_2 \\ 0 & 1& 0 & 0\\ - \sin \theta_2 & 0 & \cos \theta_2 & -L_1 \sin \theta_2 \\ 0 & 0 & 0 & 1\end{bmatrix} T21 cosθ20sinθ200100sinθ20cosθ20L1cosθ20L1sinθ21

  • 膝关节俯仰
    大腿末端的坐标系为 O 2 O_2 O2,小腿末端的坐标系为 O 3 O_3 O3,绕Y轴(左肩到右肩连线)旋转 θ 3 \theta_3 θ3,并沿小腿长度方向(新
    的X轴)平移 L 2 L_2 L2(大腿长度):
    T 3 2 [ cos ⁡ θ 3 0 sin ⁡ θ 3 L 2 cos ⁡ θ 3 0 1 0 0 − sin ⁡ θ 3 0 cos ⁡ θ 3 − L 2 sin ⁡ θ 3 0 0 0 1 ] T_3^2\begin{bmatrix} \cos \theta_3 & 0 & \sin \theta_3 & L_2 \cos \theta_3 \\ 0 & 1& 0 & 0\\ - \sin \theta_3 & 0 & \cos \theta_3 & -L_2 \sin \theta_3 \\ 0 & 0 & 0 & 1\end{bmatrix} T32 cosθ30sinθ300100sinθ30cosθ30L2cosθ30L2sinθ31

  • 全局变换矩阵
    足端在基座标系中的位置为:
    T 3 0 = T 1 0 ⋅ T 2 1 ⋅ T 3 2 T_3^0=T_1^0\cdot T_2^1 \cdot T_3^2 T30=T10T21T32
    足端坐标 P e n d = [ x , y , z ] T P_{end}=[x,y,z]^T Pend=[x,y,z]T T 3 0 T_3^0 T30的最后一列前三行给出。

注意事项:

  • 旋转顺序的影响:若关节旋转顺序不同(如先俯仰后偏航),结果会完全不同。
  • 实际机器人的校准:需测量真实的 L 1 L_1 L1 L 2 L_2 L2(可能因装配误差而偏离设计值)。
  • 姿态计算:足端的姿态(如是否水平着地)由旋转矩阵部分决定,需额外分析。
  • 实际的机器人还有踝关节,即图中的(Ankle),因为和膝关节类似,自由度是俯仰方向,且计算方法也类似,所以这里并没有列出。

运动链建模

串联运动链结构(从基座到末端的关节连接)

标准Denavit-Hartenberg(D-H)参数法

D-H参数(Denavit-Hartenberg参数) 是一种用于描述机器人连杆和关节几何关系的标准化方法,由 Jacques Denavit 和 Richard S. Hartenberg 于1955年提出。它是机器人运动学建模的基础工具,尤其适用于串联式机械臂或腿足机器人的运动学分析。

D-H参数的核心思想是机器人每个关节的运动(旋转或平移)会影响末端的位置和姿态,因此D-H参数通过定义相邻连杆之间的相对位姿关系,将复杂的多关节运动分解为一系列简单的坐标系变换,最终通过矩阵乘法得到末端位姿。

D-H参数法
每个关节需要定义 4个参数,用于描述相邻两个连杆之间的几何关系:

参数符号意义
连杆长度 a i a_i ai从关节 i i i i + 1 i+1 i+1沿 X i X_i Xi轴的距离
连杆转角 α i \alpha_i αi X i X_i Xi轴从 Z i Z_i Zi旋转到 Z i + 1 Z_{i+1} Zi+1的角度
连杆偏距 d i d_i di沿 Z i Z_i Zi轴从 X i − 1 X_{i-1} Xi1 X i X_i Xi的距离
关节角度 θ i \theta_i θi Z i Z_i Zi轴从 X i − 1 X_{i-1} Xi1 X i X_i Xi的旋转角

从坐标系 i − 1 i-1 i1 i i i的齐次变换矩阵 T i − 1 i T_{i-1}^i Ti1i由一下四个参数计算得到:
T i − 1 i [ cos ⁡ θ i − sin ⁡ θ i cos ⁡ α i sin ⁡ θ i sin ⁡ α i a i cos ⁡ θ i sin ⁡ θ i cos ⁡ θ i cos ⁡ α i − cos ⁡ θ i sin ⁡ α i a i sin ⁡ θ i 0 sin ⁡ α i cos ⁡ α i d i 0 0 0 1 ] T_{i-1}^i\begin{bmatrix} \cos \theta_i & -\sin \theta_i \cos \alpha_i & \sin \theta_i \sin \alpha_i & a_i \cos \theta_i \\ \sin \theta_i & \cos \theta_i \cos \alpha_i& -\cos \theta_i \sin \alpha_i & a_i \sin \theta_i\\ 0 & \sin \alpha_i & \cos \alpha_i & d_i \\ 0 & 0 & 0 & 1\end{bmatrix} Ti1i cosθisinθi00sinθicosαicosθicosαisinαi0sinθisinαicosθisinαicosαi0aicosθiaisinθidi1

其中:
1.绕 Z i − 1 Z_{i-1} Zi1旋转 θ i \theta_i θi:修正关节角度
2.沿 Z i − 1 Z_{i-1} Zi1平移 d i d_i di:处理滑动关节的偏移
3.沿 X i X_i Xi平移 a i a_i ai:定义连杆长度
4.绕 X i X_i Xi旋转 α i \alpha_i αi:修正连杆的扭转角度。

这样从基座到末端的全局变换矩阵为各局部变换矩阵的连乘:
T e n d b a s e = T 1 ⋅ T 2 ⋅ . . . ⋅ T n T_{end}^{base}=T_1 \cdot T_2 \cdot... \cdot T_n Tendbase=T1T2...Tn
其中 T i T_i Ti是第i个关节的变换矩阵,如上例的 T 3 0 T_3^0 T30所求解示例。

改进D-H参数法(针对复杂关节轴对齐问题)

标准的D-H参数法坐标系建立在连杆的远端,而改进的D-H参数法,将坐标系建立在连杆的近端,主要是为了更加适应树状结构机器人。

D-H参数法统一了运动学建模的流程,通过链式矩阵乘法即可得到末端位置,适用于大多数串联式机器人(尤其是成熟的机械臂工业机器人),但是对并联或者闭链结构不友好。

多腿协调与基座标系转换

上面的例子都是单腿,但是对于韧性的双足或者机器狗的四足,在步态的运动中,就涉及到两足或者四足之间的协调,以实现动态环境下的步态规划,其中一个重要点是通过将各腿运动学链与基座变换结合实现全局坐标统一,在此基础上更容易规划步态。

基座标系(机器人本体)到世界坐标系的变换

若机器人躯干(基座)在三维空间世界中运动,坐标系中运动(平移 T b = [ x b , y b , z b ] T T_b=[x_b, y_b, z_b]^T Tb=[xb,yb,zb]T和旋转 R b ∈ S O ( 3 ) R_b \in SO(3) RbSO(3)描述,则腿末端(足端)在基座标系位置为 T e n d b a s e T_{end}^{base} Tendbase,则其在世界坐标系(全局坐标系)为:
T e n d w o r l d = T b w o r l d + R b ⋅ T e n d b a s e T_{end}^{world}=T_{b}^{world} + R_b \cdot T_{end}^{base} Tendworld=Tbworld+RbTendbase
其中:

  • T b T_b Tb是基座原点在世界坐标系中的位置。表示从世界坐标系原点(如地面上的固定点)到机器人基座中心的位移。 x b x_b xb是沿世界坐标系x轴的位移(前后方向,可参考一开始的图)。
    假设机器人的足端在基座标系中的位置为 P b a s e = [ 1 , 0 , 0 ] T P_{base}=[1,0,0]^T Pbase=[1,0,0]T,若基座向右移动了2米,即 T b = [ 0 , 2 , 0 ] T T_b=[0,2,0]^T Tb=[0,2,0]T,则足端的世界坐标为:
    P w o r l d = T b + P b a s e = [ 1 , 2 , 0 ] T P_{world}=T_b+P_{base}=[1,2,0]^T Pworld=Tb+Pbase=[1,2,0]T

  • R b R_b Rb是基座姿态的旋转矩阵,由欧拉角(横滚 ϕ \phi ϕ,俯仰 θ \theta θ和偏航 ψ \psi ψ)定义:
    R b = R z ( ψ ) ⋅ R y ( θ ) ⋅ R x ( ϕ ) R_b=R_z(\psi)\cdot R_y(\theta) \cdot R_x(\phi) Rb=Rz(ψ)Ry(θ)Rx(ϕ)
    R x R_x Rx R y R_y Ry R z R_z Rz是绕各轴的旋转矩阵。

  • SO(3) 是 特殊正交群(Special Orthogonal Group) 的缩写,表示所有三维旋转矩阵的集合。满足正交性(即旋转不改变向量长度和夹角, R T R = I R^TR=I RTR=I)和纯旋转,无镜像反射(即 d e t ( R ) = 1 det(R)=1 det(R)=1)。SO(3)中的矩阵除了能唯一描述物理上可能的旋转,还方便了逆向计算( R − 1 = R T R^{-1}=R^T R1=RT)。

基座到世界坐标系的齐次变换矩阵为:
H b w o r l d = = [ R b T b 0 1 ] H_b^{world}==\begin{bmatrix} R_b & T_b \\ 0 & 1 \end{bmatrix} Hbworld==[Rb0Tb1]

足端位置变换为:
[ P e n d w o r l d 1 ] = H b w o r l d ⋅ [ P b a s e w o r l d 1 ] \begin{bmatrix} P_{end}^{world} \\ 1 \end{bmatrix}=H_b^{world} \cdot \begin{bmatrix} P_{base}^{world} \\ 1 \end{bmatrix} [Pendworld1]=Hbworld[Pbaseworld1]

在动态步态中,基座位姿随时间变化(如行走时躯干起伏),需实时更新 T b T_b Tb R b R_b Rb,可通过IMU测量姿态角,编码器或视觉里程计估计位置,通常要求更新频率 ≥ 100Hz(如ROS(机器人操作系统)中的tf库)。

如控制右前腿在摆动相中沿抛物线轨迹运动,同时基座移动,支撑腿左腿需调整关节角度以保持足端静止(全局坐标),这可以用逆运动学(下一篇博客)计算基座运动导致的足端位移,调整关节角度抵消。

多腿独立运动学链的全局坐标统一

在多腿运动学模型中,每条腿为串联结构(如3自由度),使用D-H参数建模,所有腿共享同一基座坐标系,但运动独立(并联驱动),当基座运动时,各腿的末端全局位置需统一到世界坐标系,以协调步态。

全局坐标统一步骤主要分为三步:
1.单腿前向运动学:计算每条腿末端在基座标系中的位置 T e n d b a s e T_{end}^{base} Tendbase(基于关节角度);
2.坐标变换到世界系:应用基座标系的 H b w o r l d H_b^{world} Hbworld变换,得到全局坐标系;
3.步态协调:根据全局坐标规划各腿的摆动/支撑相位,保持机器人平衡,这部分放到后面MPC/RL部分内容展开。

  • 基座标系变换 是多腿协调的核心,需实时融合传感器数据更新位姿。
  • 全局坐标统一 通过将各腿运动学链与基座变换结合,实现动态环境下的步态规划。
  • 实际挑战 包括实时性保障、多解协调和动态补偿,需结合控制理论与工程优化。
  • 当各退独立求解时可能导致冲突(如跳跃时双腿同时摆动),可以通过状态机控制各腿的摆动/支撑相位和基于ZMP(零力矩点)调整基座位姿和各腿力分配。

真实机器人中的挑战

  • 误差校准:实际关节存在齿轮间隙、制造公差(实际连杆长度与理论值偏差)、电机误差、连杆柔性变形。
  • 传感器反馈:使用IMU、编码器实时修正位置。
  • 制动态控制:前向运动学是静态模型,实际需结合动力学(如惯性、摩擦力)。
  • 多腿协调运动控制

仿真工具推荐

  • PyBullet:轻量级物理引擎,适合验证运动学算法。
  • ROS + Gazebo:工业级机器人仿真平台。
  • Webots:用户友好的多机器人仿真环境。
  • ROS MoveIt、Robotics Toolbox for Python.

工程上如果只是使用运动学和动力学,而不深究和改进其实现,那么ROS机器人操作系统是个不错的入手环境,该操作系统集成了运动学和动力学计算工具orocos-kdl -, 这个工具还集成了bullet3D物理引擎,用于模拟碰撞检测、刚体和软体动力学。

相关文章:

腿足机器人之六- 前向运动学

腿足机器人之六- 前向运动学 刚体运动学基础坐标系定义旋转矩阵与欧拉角齐次变换矩阵(平移旋转的统一表示) 运动链建模串联运动链结构(从基座到末端的关节连接)标准Denavit-Hartenberg(D-H)参数法改进D-H参…...

对openharmony HDF驱动框架的C/S设计模式和单例类的说明

在分析openharmony的HDF驱动框架时我们会发现用了很多面向对象的思想,例如类继承、接口、单例类等,本来应该是好事情,**但使用时对象之间的关系交错复杂,不太符合linux内核分层分模块的思路,导致整体理解起来比较困难&…...

kamailio中Core Cookbook 核心配置手册

Core Cookbook 核心配置手册 版本: Kamailio SIP 服务器 v6.0.x (稳定版) 概述 本教程收集了 Kamailio 核心导出到配置文件的功能和参数。 注意: 本页参数未按字母顺序排列。 结构 kamailio.cfg 的结构可分为三部分: 全局参数模块设置路由块 建议按此顺序排列以保持清晰…...

AI 编程工具—Cursor 进阶篇 数据分析

AI 编程工具—Cursor 进阶篇 数据分析 上一节课我们使用Cursor 生成了北京房产的销售数据,这一节我们使用Cursor对这些数据进行分析,也是我们尝试使用Cursor 去帮我们做数据分析,从而进一步发挥Cursor的能力,来帮助我们完成更多的事情 案例一 房产销售数据分析 @北京202…...

HTML、Vue和PHP文件的区别与联系

一、核心区别 类型性质执行环境功能特点.html静态标记语言浏览器直接解析定义页面结构和内容,无逻辑处理能力.vue前端框架组件文件浏览器/构建工具整合HTML模板JS逻辑CSS样式,支持动态数据绑定和组件化开发.php服务器端脚本语言文件Web服务器执行动态生…...

Map 和 Set

目录 一、搜索 概念: 模型: 二、Map ​编辑 1.Map 实例化: 2. Map的常见方法: 3.Map的常见方法演示: 1. put(K key, V value):添加键值对 3. containsKey(Object key):检查键是否存在 4.…...

白话大模型LLM-通用基础入门知识-适合给纯小白的入门!

文章目录 什么是大模型大模型训练预训练监督微调SFTRLHF基于人类反馈的强化学习 大模型分类大语言模型-LLM多模态模型-VLM视觉模型音频模型 大模型工作流程分词化与词表映射大模型回答过程 & 基于token的概率预测 Agent导论子任务拆分 什么是大模型 大模型就是训练的一个能…...

线程进入WAITING的N种方式

目录 一、调用 Object 的 wait 方法 二、调用 Thread.join 方法 三、调用LockSupport.park()方法 一、调用 Object 的 wait 方法 public static void main(String[] args) throws InterruptedException {// 创建一个锁对象Object lock new Object();Thread thread new Thr…...

智能车摄像头开源—8 元素处理

目录 一、前言 二、无元素状态 三、直线与弯道 四、十字与环岛 1、十字识别处理 2、环岛识别处理 五、坡道 六、障碍物 七、斑马线 八、入库 九、出界停车 一、前言 在写这篇文章之前,考虑了很久到底该写到什么程度,但思来想去,不同…...

【从0做项目】Java搜索引擎(4)——性能优化~烧脑~~~

本篇文章将对项目搜索引擎(1)~(3)进行性能优化,包括测试,优化思路,优化前后对比 目录 一:文件读取 二:实现多线程制作索引 1:代码分析 2:代码…...

人工智障的软件开发-git仓库篇-弃gitlab,走gitea

指令接收:「开始构建代码宇宙」 系统检测:需求模糊度99.9% 启动应急协议:构建最小可行性生态圈 核心组件锁定:代码基因库(人类称之为Git仓库) 需求分析:论人类语言的艺术性 人类指令翻译机 表…...

Spring Boot 如何实现自动配置?

欢迎并且感谢大家指出我的问题,由于本人水平有限,有些内容写的不是很全面,只是把比较实用的东西给写下来,如果有写的不对的地方,还希望各路大牛多多指教!谢谢大家!🥰 大家如果对Java…...

STM32H743ZIT6 FreeRTOS CMSIS_V2 Lwip DP83848/LAN8720 最新HAL V1.12.1版本 AC6编译器,速通。

HAL库版本:V1.12.1 最新版 这版CUBEmx生成的LAN8742 的驱动文件有问题,无法正常初始化,导致无法PING通。 lwip 内存池 不需要手动指定0x30040200区域,lwipopts.h已作配置 开启DCACH 和ICACH 和 D2域SRAM3 时钟 /*** brief Th…...

C# 添加图标

一、前言 为应用程序添加图标是优化用户界面、提升应用辨识度的重要操作。合适的图标能帮助用户快速识别和区分不同应用,增强应用的易用性和专业性。 本指南旨在为你提供详细、易懂的步骤,教你如何为应用程序的窗体添加图标。从图标素材的获取到具体的…...

MVC模式和MVVM模式

目录 一、MVC模式和MVVM模式 1. MVC模式 2. MVVM 模式 3.在Qt中的应用示例 4.总结 二、MVC与MVVM模式的共同点和区别 1.共同点 2.区别 3.交互流程 4.总结 MVC(Model-View-Controller)和MVVM(Model-View-ViewModel)是两种…...

【kafka系列】Kafka如何实现高吞吐量?

目录 1. 生产者端优化 核心机制: 关键参数: 2. Broker端优化 核心机制: 关键源码逻辑: 3. 消费者端优化 核心机制: 关键参数: 全链路优化流程 吞吐量瓶颈与调优 总结 Kafka的高吞吐能力源于其生…...

如何学习Elasticsearch(ES):从入门到精通的完整指南

如何学习Elasticsearch(ES):从入门到精通的完整指南 嘿,小伙伴们!如果你对大数据搜索和分析感兴趣,并且想要掌握Elasticsearch这一强大的分布式搜索引擎,那么你来对地方了!本文将为…...

GDB QUICK REFERENCE (GDB 快速参考手册)

GDB QUICK REFERENCE {GDB 快速参考手册} References GDB QUICK REFERENCE GDB Version 4 https://users.ece.utexas.edu/~adnan/gdb-refcard.pdf 查看方式:在新标签页中打开图片 References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/ [2] gdb-refc…...

Flutter_学习记录_动画的简单了解

用AnimationController简单实现如下的效果图&#xff1a; 1. 只用AnimationController实现简单动画 1.1 完整代码案例 import package:flutter/material.dart;class AnimationDemo extends StatefulWidget {const AnimationDemo({super.key});overrideState<AnimationDe…...

【JavaEE进阶】验证码案例

目 &#x1f332;实现说明 &#x1f384;Hutool介绍 &#x1f333;准备工作 &#x1f334;约定前后端交互接口 &#x1f6a9;接口定义 &#x1f6a9;实现服务器后端代码 &#x1f6a9;前端代码 &#x1f6a9;整体测试 &#x1f332;实现说明 随着安全性的要求越来越⾼…...

SQL复习

SQL复习 MySQL MySQL MySQL有什么特点&#xff1f; MySQL 不支持全外连接。 安装 数据类型 MySQL中的数据类型分为哪些&#xff1f; MySQL中的数据类型主要分为三大类&#xff1a;数值类型、字符串类型、日期时间类型。 其中&#xff0c; 数值类型又分为七种&#xff1a;T…...

景联文科技:以精准标注赋能AI未来,打造高质量数据基石

在人工智能蓬勃发展的时代&#xff0c;数据已成为驱动技术革新的核心燃料&#xff0c;而高质量的数据标注则是让AI模型从“感知”走向“认知”的关键桥梁。作为深耕数据服务领域的创新者&#xff0c;景联文科技始终以“精准、高效、安全”为核心理念&#xff0c;为全球AI企业提…...

蓝桥杯(B组)-每日一题(阶乘求和)

题目 代码解析&#xff1a; #include<iostream> using namespace std;long long multiply(int x) {long long sum1;//定义longlong类型初始为1 for(int i1;i<x;i)sumsum*i;//每一项的阶乘 return sum;//将阶乘结果返回 }int main() {int n;cin>>n;long long r…...

大模型应用开发时如何调试提示词?

在编程领域&#xff0c;调试通常依赖于断点、堆栈跟踪和详细的错误信息。然而&#xff0c;在提示调试的上下文中&#xff0c;这些传统工具变得不再适用。提示调试更多地依赖于对任务的理解、对提示的精细调整&#xff0c;以及对结果的迭代优化。在本文&#xff0c;我们将深入探…...

国产编辑器EverEdit - 二进制模式下观察Window/Linux/MacOs换行符差异

1 换行符格式 1.1 应用场景 稍微了解计算机历史的人都知道&#xff0c; 计算机3大操作系统&#xff1a; Windows、Linux/Unix、MacOS&#xff0c;这3大系统对文本换行的定义各不相同&#xff0c;且互不相让&#xff0c;导致在文件的兼容性方面存在一些问题&#xff0c;比如它们…...

LockSupport

文章目录 SynchronizedJUCLockSupport详解 Synchronized package com.xd;public class SynchronizedDemo {//等待线程public void waitThread() { // 1.如果将synchronized (this){}注释,会抛出异常,因为wait和notify⼀定要在同步块或同步⽅法中synchronized (this) {try {Sys…...

Spark 和 Flink

Spark 和 Flink 都是目前流行的大数据处理引擎&#xff0c;但它们在架构设计、应用场景、性能和生态方面有较大区别。以下是详细对比&#xff1a; 1. 架构与核心概念 方面Apache SparkApache Flink计算模型微批&#xff08;Micro-Batch&#xff09;为主&#xff0c;但支持结构…...

maven——使用idea创建maven项目(文件夹上颜色)

把一开始灰色和相对于maven标准目录缺少的文件夹上色和新建&#xff1a; 在右边给叉掉文件夹就又全都变成灰色的了&#xff1a; 在这个地方也可以改&#xff1a; 使用骨架创建 不使用骨架创建...

DeepSeek教unity------UI框架

/****************************************************文件&#xff1a;BasePanel.cs作者&#xff1a;Edision日期&#xff1a;#CreateTime#功能&#xff1a;面板基类 *****************************************************/using UnityEngine;public class BasePanel : Mo…...

2025年2月16日笔记

问题&#xff1a;用普通二维数组输出1到12&#xff0c;每行输出一个数 解题思路&#xff1a; 1.因为要用到普通二维数组&#xff0c;所以要先想到如何写普通二维数组 普通二维数组的写法&#xff1a; int [行数][列数]{ {数字}&#xff0c; &#xff08;大括号数字个数…...

[操作系统] 基础IO:系统文件I/O

在 Linux 操作系统中&#xff0c;文件 I/O&#xff08;输入/输出&#xff09;是程序与文件系统交互的基础。理解文件 I/O 的工作原理对于编写高效、可靠的程序至关重要。本文将深入探讨系统文件 I/O 的机制。 一种传递标志位的方法 在 Linux 中&#xff0c;文件的打开操作通常…...

CNN手写数字识别1——模型搭建与数据准备

模型搭建 我们这次使用LeNet模型&#xff0c;LeNet是一个经典的卷积神经网络&#xff08;Convolutional Neural Network, CNN&#xff09;架构&#xff0c;最初由Yann LeCun等人在1998年提出&#xff0c;用于手写数字识别任务 创建一个文件model.py。实现以下代码。 源码 #…...

基于Istio Ambient Mesh的无边车架构:实现零侵入式服务网格的云原生革命

引言&#xff1a;轻量化时代的服务通信进化论 当传统Sidecar模式面临内存开销暴增的困境&#xff0c;Istio社区推出的Ambient Mesh架构给出终极解决方案。某证券交易系统实测显示&#xff0c;采用该架构后服务延迟降低至1.7ms&#xff08;降幅达73%&#xff09;&#xff0c;同…...

数位dp入门详解

1. 介绍 数位 d p dp dp一般出现在来求一个范围 [ a , b ] [a, b] [a,b]内满足条件的数有多少。数位 d p dp dp的解决比较公式化&#xff0c;考虑每一位对最终答案的影响。 2. 案例 Luogu P2602&#xff1a; 求给定范围 [ a , b ] [a,b] [a,b]各个数位 k k k出现了多少次。 …...

【黑马点评优化】2-Canel实现多级缓存(Redis+Caffeine)同步

【黑马点评优化】2-Canel实现多级缓存&#xff08;RedisCaffeine&#xff09;同步 0 背景1 配置MySQL1.1 开启MySQL的binlog功能1.1.1 找到mysql配置文件my.ini的位置1.1.2 开启binlog 1.2 创建canal用户 2 下载配置canal2.1 canal 1.1.5下载2.2 配置canal2.3 启动canal2.4 测试…...

牛顿法:用泰勒级数求解平方根的秘籍

目录 一、引言二、牛顿法的理论基础——泰勒级数三、牛顿法的原理与推导3.1 原理概述3.2 推导过程3.3 几何解释 四、牛顿法的应用场景4.1 数值计算4.2 优化问题 五、牛顿法求平方根的具体案例5.1 原理推导5.2 具体步骤5.3 代码实现&#xff08;Python&#xff09;5.4 示例计算过…...

四、敏捷方法论:敏捷开发中的关键实践

敏捷开发中的关键实践 在敏捷开发中,许多关键实践帮助团队提升效率、增强协作和确保高质量交付。通过合理运用这些实践,团队能够灵活应对需求变化、缩短交付周期,并持续优化工作流程。本文将详细介绍敏捷开发中的一些核心实践,包括用户故事、需求优先级排序、持续交付、持…...

基于Qt 和微信小程序的用户管理系统:WebSocket + SQLite 实现注册与登录

目录 一. 概要 二. 技术栈 三. 系统功能设计 3.1 功能模块 3.2 数据表设计 四. 具体实现 4.1 Qt 服务端 4.1.1 初始化 WebSocket 服务器 4.1.2 用户管理界面 4.2 微信小程序端 4.2.1 注册功能 4.2.2 登录功能 五. 运行效果 六. 源码下载 一. 概要 在物联网和智能设备…...

DeepSeek R1 与 OpenAI O1:机器学习模型的巅峰对决

我的个人主页 我的专栏&#xff1a;人工智能领域、java-数据结构、Javase、C语言&#xff0c;希望能帮助到大家&#xff01;&#xff01;&#xff01;点赞&#x1f44d;收藏❤ 一、引言 在机器学习的广袤天地中&#xff0c;大型语言模型&#xff08;LLM&#xff09;无疑是最…...

【硬件设计细节】缓冲驱动器使用注意事项

一、缓冲驱动器核心功能与选型原则 信号增强与隔离 驱动能力匹配&#xff1a;根据负载电流需求选择缓冲器&#xff0c;例如CMOS缓冲器驱动能力通常为4-8mA&#xff0c;需搭配大电流负载时选用图腾柱输出或专用驱动芯片&#xff08;如TI的SN74LVC系列&#xff09;。电压域转换&…...

基于LVGL的简易聊天室

创建过程&#xff1a; 在GUI里配置好了一个大概的界面。聊天界面需要一个滑动页、一个输入框、一个文本框、一个发送按键。其中文本框属于滑动页&#xff0c;并且给发送按键添加上事件。 保存界面后&#xff0c;打开工程代码。 第一件事&#xff0c;是打开键盘使用的宏定义 随…...

DeepSeek 助力 Vue 开发:打造丝滑的开关切换(Switch)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…...

IDEA集成DeepSeek

引言 随着数据量的爆炸式增长&#xff0c;传统搜索技术已无法满足用户对精准、高效搜索的需求。 DeepSeek作为新一代智能搜索技术&#xff0c;凭借其强大的语义理解与深度学习能力&#xff0c;正在改变搜索领域的游戏规则。 对于 Java 开发者而言&#xff0c;将 DeepSeek 集成…...

pycharm社区版有个window和arm64版本,到底下载哪一个?还有pycharm官网

首先pycharm官网是这一个。我是在2025年2月16日9:57进入的网站。如果网站还没有更新的话&#xff0c;那么就往下滑一下找到 community Edition,这个就是社区版了免费的。PyCharm&#xff1a;适用于数据科学和 Web 开发的 Python IDE 适用于数据科学和 Web 开发的 Python IDE&am…...

LeetCode热题100- 缺失的第一个正数【JavaScript讲解】

题目&#xff1a; 解题一&#xff1a; 如果不考虑时间复杂度和空间复杂度的话&#xff0c;我们最先想到的办法是先将该数组进行排序和去重&#xff0c;将最初的res结果值设置为1&#xff1b;将然后进行遍历&#xff0c;如果第一项不为1&#xff0c;则返回1&#xff0c;否则根…...

基于矢量轨道角动量波的透射超表面设计

摘 要&#xff1a;针对轨道角动量(Orbital Angular Momentum,OAM)在无线通信系统中相位奇点的问题,提出了一种产生矢量OAM波的透射超表面&#xff61;设计了一种超表面透射单元实现透射极化和相位的调控,并由此单元排布组成透射超表面&#xff61;采用透射超表面调控透射电磁波…...

全方位探索DeepSeek

目录 前言1. DeepSeek的基础功能与应用场景2. 使用DeepSeek的多种方式2.1 通过Web界面快速体验2.2 调用API实现自动化处理2.3 集成到本地开发环境2.4 结合第三方工具扩展功能 3. 高效使用DeepSeek的进阶技巧3.1 参数调优与性能优化3.2 数据处理与结果分析 4. 实际案例分析与应用…...

详解Redis数据结构(附源码)

引言 只有弄明白Redis数据结构&#xff0c;才能理解它如此快速的原因&#xff0c;并不只是它存储于内存&#xff0c;本篇文章将拆开Redis数据结构分析它高效的原因 字符串&#xff08;String&#xff09; 基本概念&#xff1a;字符串是 Redis 中最基本的数据结构&#xff0c;…...

基于Flask的茶叶销售数据可视化分析系统设计与实现

【FLask】基于Flask的茶叶销售数据可视化分析系统设计与实现&#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统的创新之处在于系统不仅提供了基础的图表展示&#xff0c;如价格分布、付款分…...

基于推荐算法的在线课程推荐系统设计与实现

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