关于学习方法、效率工具和成长心得的一些记录。
高效学习建议费曼学习法
选择一个概念
尝试用最简单的语言教给别人
发现解释不清的地方 → 回去重新学习
简化和类比
“If you can’t explain it simply, you don’t understand it well enough.”
记笔记的原则
不要搬运:用自己的话重述,而不是复制粘贴
建立关联:把新知识和已有知识连接
定期回顾:间隔重复比一次性学完有效得多
工具推荐Markdown 折叠1234<details><summary>点击展开</summary>折叠的内容写在这里。</details>
Git 工作流12345678# fork 后同步上游git remote add upstream <原仓库地址>git fetch upstreamgit merge upstream/main# 拉取别人的分支git fetch origin their_branchgit checkout -b my_branch origin/the...
STM32 开发从环境搭建到 PCB 设计的入门指南。
环境搭建CubeMXSTM32CubeMX 是 ST 官方的图形化配置工具,用于引脚分配、时钟树配置和中间件设置。
选择 MCU 型号
配置引脚功能(GPIO、USART、CAN、PWM 等)
设置时钟树
生成初始化代码(支持 HAL 库和 LL 库)
开发工具链
Keil MDK:商用 IDE,STM32 官方推荐
STM32CubeIDE:基于 Eclipse,免费
VS Code + PlatformIO:开源方案
GPIO 基础123456// 初始化HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET); // 输出高电平HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET); // 输出低电平// 读取GPIO_PinState state = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1);
使用 GPIO 控制电机时注意:STM32 的 GPIO 输出电流有限,大功率设备需...
用 SymPy 进行机器人动力学的符号推导,避免手工计算出错。覆盖分析力学基础、拉格朗日方程和约束处理。
环境安装1pip install sympy
验证:
1234import sympy as spsp.init_printing()x = sp.Symbol('x')sp.diff(sp.sin(x), x) # → cos(x)
从零学分析力学广义坐标描述系统位形所需的最少独立变量。n 个自由度 → n 个广义坐标 $q_1, q_2, …, q_n$。
约束
完整约束:$f(q_1, …, q_n, t) = 0$(如连杆长度恒定)
非完整约束:不可积分为完整约束的约束(如纯滚动条件)
虚功原理系统平衡时,所有主动力在虚位移上所做的虚功之和为零:
$$\sum_i \mathbf{F}_i \cdot \delta \mathbf{r}_i = 0$$
达朗贝尔原理将动力学问题转化为静力学问题:
$$\sum_i (\mathbf{F}_i - m_i \ddot{\mathbf{r}}_i) \cdot \delta ...
深入理解 Linux 内核内存管理:逻辑地址 → 线性地址 → 物理地址的完整转换过程。
地址类型总览
地址类型
说明
虚拟地址
由段选择符 + 段内偏移组成,不能直接访问物理内存
逻辑地址
程序产生的段内偏移地址
线性地址
虚拟地址经分段变换后的中间层,处理器可寻址
物理地址
最终的内存单元地址
转换流程:逻辑地址 → 分段(查段表)→ 线性地址 → 分页(查页表)→ 物理地址
分段机制段描述符每个段由一个 8 字节的段描述符表示,包含段的基址、限长、优先级等属性:
字段
描述
Base
段首字节线性地址
G
粒度标志(0=字节,1=4096 字节)
Limit
段长度
S
描述符类型(0=系统段,1=数据/代码段)
DPL
特权级(0=内核,3=用户)
门描述符存放指向过程入口点的指针:
任务门:任务切换
中断门:调用中断处理程序
陷阱门:调用异常处理程序
调用门:在不同特权级间实现受控的程序控制转移
段选择符8 字节长,由 index、TI(表...
SLAM 基础概念、KD 树加速搜索和视觉图像处理入门。
SLAM 基础SLAM(Simultaneous Localization and Mapping),同时定位与建图。
经典框架
传感器信息读取:相机/激光雷达数据采集与预处理
前端里程计:估算相邻帧之间的运动
后端优化:处理里程计误差和回环检测信息,优化全局地图
回环检测:判断是否到达过先前位置
建图:根据轨迹建立地图
传感器方案
传感器
优势
局限
单目相机
成本低、结构简单
缺少绝对尺度
双目相机
可通过基线计算深度
算力要求高
RGB-D 相机
直接获取深度
室外受阳光干扰
激光雷达
精度高、稳定
成本高、信息稀疏
FAST-LIO2
基于迭代卡尔曼滤波的 LiDAR-惯性里程计
融合 IMU 和激光雷达数据
实时性好,适用于无人机和移动机器人
三维空间刚体运动旋转表示
旋转矩阵 $R \in SO(3)$:$3\times3$ 正交矩阵,$\det R = 1$
欧拉角:roll/pitch/yaw,直观但有万向锁
四元数:无奇异性,适合插值
...
模电和数电的关键知识点速查,涵盖二极管、三极管、运放和数制编码。
一、模拟电路二极管
单向导电性:正向导通,反向截止
PN 结:P 型半导体与 N 型半导体的接触面
正向压降:硅管约 0.7V,锗管约 0.3V
三极管(BJT)
三种工作状态:截止、放大、饱和
NPN 型:$I_C = \beta I_B$
三个极:基极(B)、集电极(C)、发射极(E)
放大电路基本共射放大电路:信号从基极输入、集电极输出。
分析方法:
静态分析(直流):确定 Q 点($I_{BQ}, I_{CQ}, V_{CEQ}$)
动态分析(交流):计算 $A_v, R_i, R_o$
多级放大电路级联方式:阻容耦合、直接耦合、变压器耦合
$$A_v = A_{v1} \times A_{v2} \times \cdots \times A_{vn}$$
集成运放理想运放特性:
开环增益无穷大:$A_{od} \rightarrow \infty$
输入阻抗无穷大:$R_{id} \rightarrow \infty$
输出阻抗为零:$R_o \rightarrow 0$
...
来自实际机器人开发和调试的经验总结,涵盖常见问题排查、开发流程和实用技巧。
开发流程新车部署检查清单
网口配置:确认工控机与路由器/交换机 IP 在同一网段
CAN 通信:candump can0 确认能收到电机数据
IMU 校准:消除零偏
遥控器配对:DJI 遥控器校准
自启脚本:确保开机自动启动核心节点
常用自启方式12345678910111213# systemd service 示例[Unit]Description=Robot Core ServiceAfter=network.target[Service]Type=simpleUser=robotExecStart=/home/robot/start.shRestart=on-failure[Install]WantedBy=multi-user.target
电机调试PID 调参经验
先 P 后 I 最后 D
Kp 从小往大调,直到出现轻微振荡再回退
Ki 消除静差,不宜过大
Kd 从零开始一点一点加
常见电机参数
GM6020:云台电机,内置驱动器,CAN 通信
最大力矩计算:$T_{max} ...
CAN(Controller Area Network)是机器人中最常用的现场总线之一。本文涵盖 CAN 协议基础、SocketCAN 编程及常用调试工具。
CAN 总线基础特点
多主模式:任意节点可在总线空闲时发送
仲裁机制:ID 越小优先级越高(非破坏性仲裁)
差分信号:CAN_H 和 CAN_L,抗干扰强
错误检测:CRC 校验、位错误、填充错误等
帧格式
帧类型
用途
数据帧
发送数据(标准帧 11bit ID,扩展帧 29bit ID)
远程帧
请求数据
错误帧
检测到错误
过载帧
通知需要延时
CAN 命令速查123456789101112# 查看 CAN 接口ip link show# 设置波特率并启动sudo ip link set can0 type can bitrate 1000000sudo ip link set up can0# 发送数据cansend can0 123#11223344AABBCCDD# 接收数据candump can0
SocketCANLinux 内核提供的 CAN 编程接口,将 CAN 设备抽象为网...
涵盖机器人常用传感器、编码器、以及现代控制方法(WBC、LQR、MPC)。
惯性传感器(IMU)IMU(Inertial Measurement Unit)测量物体的角速度和加速度,通过积分得到姿态、速度和位置。
组成
加速度计:测量线加速度(含重力分量)
陀螺仪:测量角速度
磁力计(部分 IMU 包含):测量地磁场,用于修正航向角
姿态解算从角速度积分得到姿态角(欧拉角/四元数),但纯积分存在漂移。通常使用互补滤波或卡尔曼滤波融合加速度计和陀螺仪数据。
编码器编码器测量电机转动角度和速度,分为:
增量式:输出脉冲信号,需要累计计数(断电后丢失位置)
绝对式:直接输出绝对角度值(断电不丢失)
编码器数据通过硬件接口(CAN/串口)读取,经过减速比换算得到关节实际角度。
传感器数据分析机器人系统中常见传感器数据处理:
低通滤波:去除高频噪声
移动平均滤波:平滑数据,减少毛刺
中值滤波:去除脉冲噪声
卡尔曼滤波:多传感器融合的最优估计
现代控制方法LQR(线性二次型调节器)适用于线性系统的最优控制。通过求解 Riccati 方程得到状态反馈增益矩阵 ...
从正逆运动学到拉格朗日动力学,再到常见底盘轮系分析。
正逆运动学坐标系建立(DH 参数法)机器人关节一般为转动关节或平动关节。基座为惯性坐标系,末端为工具坐标系。
关节命名规则(i, i+1, i+2):
Z 轴:以平动/转动方向为 Z 轴
X 轴:两条 Z 轴共同垂直的直线为 X 轴
四个 DH 参数:
αᵢ:将 Zᵢ₊₁ 沿 Xᵢ 平移至与 Zᵢ 相交的角度
aᵢ:Zᵢ 轴到 Zᵢ₊₁ 轴的距离
θᵢ:将 Xᵢ₊₁ 沿 Zᵢ₊₁ 平移至与 Xᵢ 相交的角度
dᵢ:Xᵢ 轴到 Xᵢ₊₁ 轴的距离
正运动学给定各关节角度,求末端位姿:
$$T_n^0 = A_1 A_2 \cdots A_n$$
其中 $A_i$ 是相邻连杆的齐次变换矩阵。
逆运动学给定末端位姿,求各关节角度。通常比正运动学复杂,存在多解/无解的情况。
拉格朗日动力学拉格朗日法从能量角度建立动力学方程,避免了牛顿-欧拉法中复杂的力分析。
拉格朗日函数$$L = K - P$$
K:系统动能
P:系统势能
拉格朗日方程$$\frac{d}{dt}\frac{\pa...