- 博客(75)
- 收藏
- 关注
原创 【C++】编译与链接
本文阐述了C/C++程序编译和链接的区别,以及运行时动态库的查找机制。编译阶段生成目标文件(.o),链接阶段解析符号引用生成可执行文件。动态库依赖信息只保存库名而不保存路径,系统通过ld-linux.so在运行时按以下顺序查找:RPATH/RUNPATH、LD_LIBRARY_PATH、系统默认路径。CMake可通过设置RPATH(如$ORIGIN/../lib)将库路径嵌入可执行文件,避免依赖环境变量。这种机制解释了为何程序编译通过但运行时可能找不到库,并提供了更健壮的依赖管理方案。
2025-10-22 16:21:14
322
原创 【CMake】C++系统构建的具体实现
本文介绍了使用CMake构建C++项目的完整流程,通过五个核心阶段解决实际问题:1)定义项目基本信息;2)查找依赖项路径;3)生成编译目标;4)配置编译链接选项;5)处理运行时依赖和安装分发。文章以使用ZeroMQ库为例,详细说明如何解决头文件找不到、链接失败、运行时库缺失等问题,并给出项目组织建议。最后总结了CMakeLists的典型编写顺序,强调这些是惯例而非绝对规则,推荐根据实际需求灵活调整。
2025-10-22 15:53:25
725
原创 『CMake』关于使用CMake构建项目时的现代/传统指令
最近才注意到使用CMake构建和编译项目时,使用的指令存在传统和现代两种写法,记录一下以备不时之需两种写法本质等价,差在是否“生成器无关”、可移植性、脚本化友好,以及是不是只在类 Unix 上用 make最后,更加推荐使用现代写法,除非是古早项目或者项目指定使用旧版本的cmake。
2025-10-21 12:54:57
578
原创 【ROS2】IDL(Interface Definition Language)语法解析和使用
摘要: IDL文件应按功能模块拆分组织,避免单一庞大文件。以robot_types.idl为例,IDL语法通过module定义命名空间,struct封装数据结构,支持基本类型(如uint32、float)和嵌套结构体。关键工具idlc可将IDL转换为C/C++头文件和类型描述符,建议集成到CMake实现自动化构建。核心流程:定义数据→编译生成代码→集成构建→调用类型描述符使用DDS功能。
2025-10-17 16:48:38
821
原创 【ROS2】Cyclone DDS C语言 API详解
本文介绍了Cyclone DDS的关键C API(ddsc)及其组合应用。主要内容包括:1) 核心实体如Domain Participant、Topic、QoS的创建与配置;2) 数据读写操作,包括轮询和等待两种接收方式;3) 四种典型节点创建模式:纯发布者、纯订阅者、收发节点和请求/应答模式。重点说明了如何通过组合不同API来构建各种通信节点,并强调了内存管理、QoS策略设置等关键细节。文章为快速入门Cyclone DDS提供了实用指南,完整API参考建议查阅官方文档。
2025-10-17 16:47:23
990
原创 【CMake】关于CMake构建、编译、安装、卸载指令的简要说明
不加 -DCMAKE_BUILD_TYPE,默认可能是空,最后编出来的二进制没有优化(尤其是在 Linux 上)此外,不同操作系统和生成器不一定支持make指令,而cmake --build . -j通常是广泛适用的。-j$(nproc) 表示并行编译,$(nproc) 会自动取当前设备的 CPU 核数。--build . 表示在当前目录构建(就是你配置的 build 目录)。相当于 cmake ..+ 手动设置变量的合体。此时不需要重新构建,但需要重新编译,的情况下。以往使用下面的指令居多。
2025-10-15 15:05:27
525
原创 【Git】项目管理全解
之前写的git攻略太过粗略,故决定更新一篇更加完整的Git一个分布式版本控制系统,主要功能包括但不限于:追踪文件变化,版本回退,团队协作,多分支开发工作区 (Workspace)你电脑上能看到的项目目录,是你正在进行修改的地方。暂存区 (Staging Area / Index)一个临时的存储区域,用于存放你希望在下一次提交中包含的修改。本地仓库 (Local Repository)存放在你本地电脑上的完整项目历史记录(.git文件夹)。远程仓库 (Remote Repository)
2025-09-28 15:29:03
1124
原创 【强化学习】∇log(π)和∇π的关系
这二者看似不同,但实际上,在深度学习框架中,我们求∇log(π)比直接求∇π要容易得多,而且这篇博客讨论的整个自动微分过程,就是在求∇log(π)。
2025-09-28 15:23:51
966
原创 【强化学习】策略崩溃(Policy Collapse)
在典型的监督学习(比如图像分类)中,学习率过大通常导致的是损失值震荡或发散,但很少会“彻底学坏,再也回不来”。然而,在强化学习中确实有“越学越坏”的可能性,我们称之为“策略崩溃”。其根本原因在于数据分布的性质不同:监督学习的数据是固定的、独立于模型的,而强化学习的数据是由智能体自己探索生成、与当前策略紧密相关的。这个区别导致了一个危险的恶性循环反馈(Vicious Feedback Loop)。
2025-09-28 11:10:06
794
1
原创 【VAE】概率图模型
重点在于用图的方式解析概率模型当某个模型具有很高的阶次时,如果所有变量都是独立分布的,那么随着模型阶次的增加,其组合数量就会指数级地增加这个时候引入条件概率就十分有必要了,比如:同时满足条件A和B时,一定满足C;通过类似于这样的条件概率模型,来减小模型的分布是十分有效的那么如何表达类似于上述的约束关系呢?
2025-09-28 11:05:37
136
原创 关于新接触领域的学习
本质上这一套流程就是深度模型训练的过程,先确定模型框架,再修正模型参数,如果一开始模型就有问题,那大概也学不出什么好结果(比如用多层感知机处理图像问题)作为机器人工程师,我们会接触的领域无穷无尽,因此总结一套快速入门的方法论非常重要。
2025-09-26 15:24:16
148
原创 【Python】包接口管理(__init__.py的用法)
在python工程下的文件夹,如果它直接包含了__init__.py,那它就会被认为是一个 python包无论对于多少级的子文件夹,这一条都生效。
2025-09-26 15:17:13
346
原创 【生成式模型】VAE变分自编码器分析
logpθxlog∫pθxzdzlogpθxlog∫pθxzdz但这个积分往往不可解(高维、非线性),无法直接得到因此,引入一个容易采样的分布qϕz∣xqϕz∣xlogpθxlog∫qϕz∣xpθxzqϕz∣xdz≥Eqϕz∣xlogpθxz−logqϕz∣x\geq\;logpθxlo。
2025-09-26 15:14:38
1086
原创 【强化学习】实际部署
创建一个符合Gymnasium规范的env类,继承自gym.Env,在构造函数中实现:p.connect()连接到pybullet,设置物理参数:重力方向、大小、仿真步长加载地面加载robot的URDF,并设置初始位置和方向定义 action_space和observation_space,设置随机种子至少实现方法observation / reward / reset / step在 reset() 中启动/重置仿真在 step() 中实现一步物理推进。
2025-07-18 19:39:32
798
2
原创 【RL强化学习】Actor-Critic Methods
但是二者训练方法类似,都可以用n-step TD算法来更新网络参数。4. 用奖励执行TD算法更新Critic network的参数。Critic network和DQN完全不同。2. 根据现有策略做决策的随机采样,得决策。5. 将Critic network的输出。更新actor network的参数。上图来自王树森老师的《深度强化学习》
2025-07-17 13:05:52
582
原创 【RL强化学习】Policy-Based Reinforcement Learning 策略学习
既然是学习算法,那就离不开网络和迭代策略学习的核心就是用神经网络去逼近真实的策略函数Usepolicynetworkπa∣s;θtoapproximateπa∣s我们没有QπsaQπsa的具体表达式,因此不能直接求得动作价值函数。
2025-07-17 10:25:18
966
原创 【RL强化学习】求解状态价值函数对策略参数的梯度
对基于策略网络的状态价值函数VπθsEπθRt∣sts=\;VπθsEπθRtsts对策略参数θ\thetaθ的梯度∇θVπθs∇θVπθs的常见两种推导路线:第一条从Bellman 方程出发;第二条直接把“轨迹-采样”拆开,两种方法最后得到的可采样估计式是相同的。
2025-07-16 15:26:14
1004
原创 【深度学习】学习算法中为什么要使用“小批量随机”
在真实训练过程中,我们通常沿着“显存上限→吞吐率峰值→验证集曲线”三步调整批量大小;批过大可配合学习率线性增大(“Linear Scaling Rule”)或使用 LARS/LAMB 等优化器。关于数据集大小和小批量的大小,通常认为小数据集,可每个 epoch 只洗牌一次;而流式/海量数据,常用“在线采样”(random shuffling buffer)保持近似随机。
2025-07-16 14:21:44
246
原创 【ROS2】笔记(有空再补充)
以赵虚左老师的教程为主要参考,该教程优先讲原理,再讲实现,而鱼香ros的教程先讲实现,再讲原理。见仁见智,但是鱼香ros的一键部署确实非常好用(仅限ubuntu,debian会报错,其他系统没用过)如果系统中同时安装了conda,记得先完全退出conda,再执行colcon build,否则会报找不到catkin_pkg的错,在conda环境下,即使使用pip install catkin-pkg也是无效的,因为根本下不到在CMakeLists.txt中,最上面添加。
2025-07-13 17:13:33
882
原创 【ROS2】自定义消息接口的创建和使用
参考了小鱼的ROS2教程(但遇到了报错),根据自己的思路重新整理一下,方便下次开发直接用注意,文中所使用的xxx并不指代特定内容,也不表示他们是相同的内容,仅说明这里可以自定义,一切按照个人项目为准指定构建工具本身的依赖项,通常是构建系统(如 ament_cmake)所需的工具链依赖。<depend>声明运行时依赖项 (同时隐含编译时依赖),即该功能包在运行或编译时直接需要的其他功能包声明测试相关的依赖项,仅在运行测试时需要仅在编译阶段需要的依赖(如头文件、编译工具)
2025-07-13 16:59:35
388
原创 【RL强化学习】Value-Based Reinforcement Learning价值学习
是网络参数,进而可以用这个梯度来优化网络参数,这在后续的TD learning会有用到。也就是说,我们模型作出的决策,一定是使最终回报最大化的那个动作。我们可以复制Example中的方法,至此,已经可以通过TD来优化模型了。,因此应该鼓励模型由。
2025-07-13 16:53:55
588
原创 【机器学习】反向传播如何求梯度(公式推导)
前期学习深度学习的时候,很多概念都是一笔带过,只是觉得它在一定程度上解释得通就行,但是在强化学习的过程中突然意识到,反向传播求梯度其实并不是一件简单的事情,这篇博客的目的就是要讲清楚反向传播是如何对特定的某一层求梯度,进而更新其参数的。
2025-07-13 16:53:02
746
2
原创 【RL强化学习】重要基础概念(包括贝尔曼方程的具体解释)
主要参考教材为王树森老师的《深度强化学习》(俗称“猫书”)本博客主要汇总强化学习的基础概念,从Random Variable到开始训练的所有环节,方便日后查阅借鉴了很多王树森老师的教学视频,如有侵权,联系删除。
2025-07-07 00:02:23
1263
原创 【ROS2】各种相关概念汇总解释
系统越复杂,构建越困难,ament_cmake就是用于辅助解决这一部分的工具,功能包括但不限于:自动处理依赖传递、导出依赖关系、配置安装路径等。在cmakelists.txt中使用到的ament_target_dependencies,就是ament_cmake 构建系统提供的一个宏,在此基础上建立的标准化ROS2构建流程,相较于单纯用cmake管理项目,要简单的多。似乎没有一个确定的名称,就是通俗的叫做“ROS2自带的消息接口”是 ROS 2 中基于 CMake 的构建系统。
2025-06-03 21:56:37
231
原创 【ROS2】报错记录及对应解决方案
好记性不如烂笔头开发过程中,逆天环境和个人的逆天操作,在初期都时有发生,为了减少以后撞墙碰壁,特此记录持续更新中
2025-05-14 22:06:56
360
原创 【ROS2】【分步讲解】节点的使用以及引入消息接口的方法
本文主要介绍了在ROS2中如何创建和运行一个完整的功能节点,以发布者(Publisher)和订阅者(Subscriber)为例。首先,创建节点的步骤包括:创建节点、定义节点身份、分配具体任务以及运行节点。通过类比“送快递”的任务,详细解释了每个步骤的含义。接着,展示了发布者节点的完整代码,并逐步拆解了节点的创建、功能定义和任务分配过程。最后,补充了如何引入消息接口(如std_msgs)以及一些C++语法的解释。整个过程清晰易懂,适合初学者理解ROS2节点的基本构建与运行。
2025-05-14 18:27:09
1146
原创 【Debian】关于LubanCat-RK3588s开发板安装Debian的一些事
补充,我又换回ubuntu了,debian配置比ubuntu麻烦多了,虽然自由度更高,但是依赖缺的厉害,如果被环境折腾的受不了,还是用ubuntu吧。琐碎的事问题不少,甚至一度让我以为核心坏了。
2025-05-10 21:10:07
815
原创 高斯过程回归(GPR)原理的通俗解释
高斯过程回归(GPR)是一种基于概率的回归方法,通过概率分布描述所有可能的函数形式,并给出预测结果的不确定性。与传统的回归模型不同,GPR不直接拟合固定函数,而是通过核函数和先验分布来推断未知数据的概率分布。其核心思想是将函数视为无限维的正态分布,利用核函数衡量数据点之间的相似性,结合贝叶斯定理更新后验分布,最终给出预测值和不确定性范围。
2025-05-10 19:45:04
1616
原创 常见标签语言的对比
XML、JSON 和 YAML 是三种常见的数据序列化格式,均支持结构化数据表示和跨平台兼容性,广泛应用于不同领域。XML 使用标签闭合,语法冗余但结构严谨,适合复杂文档和企业级数据交换。JSON 基于键值对,语法简洁且解析速度快,是 Web 开发中的标准格式,适合轻量级数据传输。YAML 依赖缩进和冒号,可读性高,支持复杂数据类型和注释,常用于配置文件和 DevOps 场景。选择时需权衡可读性、解析性能和功能需求:YAML 可读性最佳,JSON 性能最优,XML 功能最丰富。
2025-05-09 19:34:54
561
原创 【Gen6D位姿估计】在Linux环境下的复现日志(包含COLMAP安装)
算法和代码框架均来自港大的课题组gen6d介绍页面我只是拿来做一个毕设,答辩结束后会遵循GPL协议开放所有代码这篇博客仅作为开发日志,记录一下部署过程中的各种问题和解决方法,仅供学习讨论此外,不得不说,这项工作的识别估计的效果不错,但是效率有点太低了,在GTX1650上处理一帧数据需要1.07秒。
2025-04-23 16:59:25
1318
5
原创 【Ubuntu】关于系统分区、挂载点、安装位置的一些基本信息
在ubuntu22及以前的版本中,最好是手动配置分区及其挂载点,通常我们会配置成3/4个分区:引导区,交换区,根挂载点,home挂载点(有时根挂载点和home合二为一)
2025-04-23 16:55:03
653
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅