Chapter 3 锁资源管理和条件变量
1. RAII锁管理类 借助对象实现构造时可自动加锁,析构时自动解锁,并通过{ }控制锁的临界区 1.1 互斥锁管理类lock_guard(C++11) 关键词标记: adopt_lock标记/adopt_lock_t标记(C++11),用于手动加锁后,想让RAII工具接管解锁的场景,此时不需要再次手动释放锁 1.2 互斥锁管理类unique_lock(C++11) 关键词标记: adopt_lock标记/adopt_lock_t标记(C++11) defer_lock延后拥有,只有再次手动上锁后才拥有锁,如果未拥有锁,则出栈区不释放。当unique_lock作为成员变量时需要使用此标记 try_to_lock尝试获取锁,不阻塞,获取失败退出栈区不释放 特点: 可以调用unlock()和lock()来临时解锁和上锁 可以调用owns_lock()来判断是否拥有锁,拥有则返回true 比lock_guard更加灵活,但是效率、内存占用差一些,同时支持移动构造 1.3 共享锁管理类shared_lock(C++14) 特点: ...
多线程通信和同步
2. 锁 2.1 互斥锁mutex 成员方法: lock()获取锁资源,如果获取不到则阻塞等待 unlock()释放锁资源 try_lock()尝试获取锁资源,如果获取成功返回true;否则返回false,并不会阻塞线程 互斥锁的坑: 释放锁资源只是告诉操作系统要释放锁资源,故而并不是立即释放,此时如果再次立即获取锁资源,此线程会再次上锁,其他线程无法获取 2.2 超时锁timed_mutex 成员方法: try_lock_for(std::chrono::duration)在指定的时间期限内尝试获取互斥锁。如果在这个时间期限内获得了锁,函数返回 true;否则函数返回false。如果接受的参数接近0,那么函数的功能基本就等于try_lock() 2.3 递归锁recursive_mutex和recursive_timed_mutex 特点: 可以多次lock()和unlock()当计数为0时才真正释放,而普通锁多次上锁属于未定义行为 2.4 共享锁shared_timed_mutex(C++14)和shared_mutex(C++17) 成员方法: ...
ROS2使用教程
1. 安装 1.1 安装ros2 切换成bash后使用小鱼一键安装 bash wget http://fishros.com/install -O fishros && . fishros Ubuntu 22.04建议安装humble Ubuntu 24.04建议安装jazzy 1.2 安装colcon sudo apt install python3-colcon-common-extensions 2. ZSH补全 2.1 humble版本 为了解决zsh下ros2命令无法自动补全的问题,我们需要在/opt/ros/humble/setup.zsh的末尾添加如下命令 eval "$(register-python-argcomplete3 ros2)" eval "$(register-python-argcomplete3 colcon)" 2.2 jazzy版本 为了解决zsh下ros2命令无法自动补全的问题,我们需要在/opt/ros/jazzy/setup.zsh的末尾添加如下命令 eval "$(register-python-argcompl...
LaTeX中的数学符号
\to是\rightarrow的简化,二者是等价的 \gets是\leftarrow的简化,二者是等价的 绝对值符号尽可能使用\lvert \rvert 和 \lVert \rVert 这两组符号能正确处理符号间距 加粗时尽量选择\bm{},但是需要添加宏包\usepackage{bm},这个指令可以处理希腊字体且不会使斜体消失
Chapter 7 Matrix algorithms
1. 计算特征值和特征向量 1.1 幂迭代法(The power iteration method) 在本节中,我们概述了一种计算可对角化矩阵的特征值和特征向量的技术。幂迭代(Power Iteration,PI)方法可能是计算矩阵一个特征值/特征向量对的最简单方法。它的收敛速度相对较慢,并且存在一些局限性。然而,我们在这里介绍它,因为它构成了许多其他更精细的特征值计算算法的基础。还有许多其他计算特征值和特征向量的技术,其中一些是为具有特殊结构的矩阵设计的,例如稀疏矩阵、带状矩阵或对称矩阵 设A∈Rn,n\bm{A} \in \mathbb{R} ^{n,n}A∈Rn,n,假设A\bm{A}A可对角化,并记λ1,⋯ ,λn\lambda _1 ,\cdots , \lambda _nλ1,⋯,λn为A\bm{A}A的特征值,按模递减顺序排列,即∣λ1∣>∣λ2∣≥⋯≥∣λn∣\lvert \lambda _1 \rvert > \lvert \lambda _2 \rvert \geq \cdots \geq \lvert \lambda _n \rvert∣...
Chapter 6 Linear equations and least squares
我们在这里介绍线性方程以及一种用于表示它们的标准形式Ax=y\bm{Ax} = \bm{y}Ax=y,其中x∈Rn\bm{x} \in \mathbb{R} ^nx∈Rn为未知变量,A∈Rm,n\bm{A} \in \mathbb{R} ^{m,n}A∈Rm,n为系数矩阵,y∈Rm\bm{y} \in \mathbb{R} ^my∈Rm为已知向量。实际上,求解一组线性方程 Ax=y\bm{Ax} = \bm{y}Ax=y的问题也可以解释为一个优化问题,即相对于x\bm{x}x最小化∥Ax−y∥2\lVert \bm{Ax} - \bm{y} \rVert_2∥Ax−y∥2 1. 动机和示例 如前面的例子所示,通用的线性方程可以用向量形式表示为 Ax=y\bm{Ax} = \bm{y} Ax=y 其中x∈Rn\bm{x} \in \mathbb{R} ^nx∈Rn为未知变量,A∈Rm,n\bm{A} \in \mathbb{R} ^{m,n}A∈Rm,n为系数矩阵,y∈Rm\bm{y} \in \mathbb{R} ^my∈Rm为已知向量。 我们预期,根据A\bm{A}A和y\b...
Chapter 5 Singular value decomposition
1. 奇异值分解(Singular value decomposition) 1.1 基础 矩阵的奇异值分解(SVD)提供了一种三项分解,类似于谱分解,但适用于任何矩阵。通过SVD,我们可以通过矩阵向量乘积y=Ax\bm{y} = \bm{Ax}y=Ax完整描述与A\bm{A}A相关的线性映射,其过程分为三步:首先对输入向量x\bm{x}x进行正交变换(旋转(rotation)或反射(reflection));然后对旋转后的输入向量的各元素进行非负缩放,并可能增加或移除该向量的维度以匹配输出空间的维度。最后,在输出空间中进行另一次正交变换。用公式表示为任意矩阵A∈Rm,n\bm{A} \in \mathbb{R} ^{m,n}A∈Rm,n都可以分解为 A=UΣ~V⊤\bm{A} = \bm{U}\tilde{\bm{\Sigma}}\bm{V}^\top A=UΣ~V⊤ 其中V∈Rn,n\bm{V} \in \mathbb{R} ^{n,n}V∈Rn,n和U∈Rm,m\bm{U} \in \mathbb{R} ^{m,m}U∈Rm,m是正交矩阵(分别描述输入和输出空间中的旋转/反...
Docker终端中文显示与输入
1. 安装依赖 apt update apt install locales 2. 修改语言为C.UTF-8 update-locale LANG=C.UTF-8 LC_ALL=C.UTF-8 修改.bashrc配置文件 vim ~/.bashrc 滚动到文件末尾,添加 export LANG="C.UTF-8" export LC_ALL="C.UTF-8" 刷新 source ~/.bashrc
FAR_PLANNER调试笔记
1. 2025-10某项目 far_planner/config/default.yaml参数设置 main_run_freq设为5 robot_dim设为0.4 vehicle_height设为0.2 is_viewpoint_extend设为false is_static_env设为false MapHandler/map_grid_max_length设为2000 Util/terrain_free_Z设为0.1 Util/dynamic_obs_dacay_time设为5.0 GPlanner/goal_adjust_radius设为1.0
FAR_PLANNER参数解读
1. GraphMsger main_run_freq 主循环运行频率 voxel_dim 体素/网格分辨率(米),分辨率越小地图越精细、计算量越大 robot_dim 机器人的直径(米),用于碰撞检测/路径约束 vehicle_height 机器人高度(米) sensor_range 传感器有效探测距离(米) terrain_range 地形评估的半径(米) local_planner_range 局部规划的距离(米)室内1–3,室外5-10 visualize_ratio RViz中缩放常量 is_viewpoint_extend 当 设为为true时,规划器会把原始waypoint向离障碍物更“开阔”的方向推进(延伸一个观察点),以获得更好的视点(visibility)。如果环境很开阔或精确到指定点的任务建议设为false is_multi_layer 是否启用多楼层地图处理 is_opencv_visual 是否启用OpenCV可视化,仅影响开发调试显示 is_static_env 是否为静态环境,设为false会清除动态障碍物 is_pub_boundary 发布边界消...