自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(79)
  • 收藏
  • 关注

原创 linux常用指令汇总

Linux 系统中有大量强大且高效的命令,可以极大提升工作效率。掌握这些命令后,Linux 系统的日常操作、调试和管理效率会大幅提升!)深入学习每个工具的详细用法。

2025-04-09 14:42:16 239

原创 如何理解ADRC中的TD模块

在PID调参过程中,若系统在稳态时出现震荡现象,说明当前参数组合导致系统响应过度或阻尼不足。通过上述方法逐步调整,通常能有效消除稳态震荡。若问题持续,可尝试更高级的控制算法(如自适应PID或模糊PID)。

2025-04-08 14:15:50 368

原创 PID调参时,发现在稳态时有震荡现象,应该怎么再调节PID的三个参数

在PID调参过程中,若系统在稳态时出现震荡现象,说明当前参数组合导致系统响应过度或阻尼不足。通过上述方法逐步调整,通常能有效消除稳态震荡。若问题持续,可尝试更高级的控制算法(如自适应PID或模糊PID)。

2025-04-02 15:36:48 444

原创 智能驾驶员模型IDM详解

智能驾驶员模型(Intelligent Driver Model, IDM)是一种微观跟驰模型,用于模拟车辆在道路上的纵向运动行为,强调安全性与效率的平衡。IDM通过动态平衡速度追求与安全跟驰,成为交通建模和自动驾驶领域的核心工具。参数调整可灵活适配不同驾驶风格,是理解微观交通行为的重要模型。(无前车干扰时的理想加速)和。

2025-04-01 11:40:22 342

原创 基于车辆运动学模型和滑模控制的横向控制算法设计

航向误差:(eψe_{\psi}eψ​ψref\psi_{ref}ψref​ψ\psiψ横向位置误差:(eye_yey​yrefy_{ref}yref​yyy误差动态方程:(e˙y\dot{e}_ye˙y​v⋅sin⁡eψv⋅sineψ​。

2025-03-19 18:21:23 769

原创 多线程相比于多进程有哪些优缺点

多线程和多进程是两种常见的并发编程模型,它们各有优缺点。

2025-03-19 14:03:39 936

原创 既然多线程纯读取同一块数据是安全的,那么为什么还要用std::shared_lock加锁

场景是否需要锁原因纯读取(无写)可选,但建议加共享锁防御性编程、内存可见性、未来扩展性读写混合必须加锁(共享锁/独占锁)避免数据竞争和未定义行为即使多个线程仅进行读取操作,使用仍是推荐做法。内存可见性(读取最新数据)。代码的扩展性和健壮性。与潜在的写入操作安全协作。

2025-03-19 13:45:42 737

原创 std::unique_lock和std::shared_lock有什么区别

和是 C++ 标准库中用于管理锁的两个工具,它们的主要区别在于锁的类型和用途。用于独占锁(如std::mutex),而用于共享锁(如。

2025-03-19 13:31:48 935

原创 如何理解std::promise和std::future

的作用:作为生产者线程的结果出口。的作用:作为消费者线程的结果入口。适用场景:需要明确分离“结果生产者”和“结果消费者”的多线程任务。方法适用场景优点缺点共享数据 + 互斥锁简单数据,少量访问灵活通用需手动管理锁,易死锁条件变量需要等待特定条件高效,避免忙等待代码复杂度较高原子操作基本数据类型,无锁需求无锁,高效仅支持基本类型消息队列大量数据或流式处理扩展性强实现复杂回调函数一次性数据传递简单直接无法动态更新数据全局变量快速原型开发(不推荐生产环境)

2025-03-18 18:07:14 709

原创 理解torch函数bmm

torch.bmm是 PyTorch 中的一个函数,用于执行批量矩阵乘法(Batch Matrix Multiplication)。它适用于处理一批矩阵的乘法操作,特别适合于深度学习任务中的场景,比如卷积神经网络中的某些层。

2024-12-18 14:42:26 693

原创 理解torch函数squeeze和unsqueeze

是指在PyTorch中用于压缩张量维度的函数。它主要用于移除维数为1的维度,使得输出的张量形状更简洁。squeeze综上所述,是一个非常实用的工具,帮助开发者在处理数据时能够灵活地调整张量的维度,从而更好地适配各种算法的需求。

2024-12-18 14:23:31 659

原创 cmake如何查看具体编译命令

后会在build文件夹里生成一个compile_commands.json文件,这里面列出了每个文件对应的编译命令。可在CMakeLists.txt里设置。Release和Debug不区分大小写。两个tyep的编译间选项的区别。

2024-10-24 17:19:47 372

原创 ubuntu20.04报错ImportError: No module named rospkg

调用ros脚本进行数据分析。

2024-10-09 10:56:51 620

原创 C++ noexcept关键字详解

noexcept是c++11新引入的关键字,取代c++98的throw()的异常规格,虽然c++的异常规格被大家嫌弃并弃用,但将一定不会发出异常的函数申明成noexcept还是能一定程度上带来代码效率的提升。

2024-03-22 17:06:35 884

原创 C++源码剖析push_back和emplace_back的区别

【代码】源码剖析push_back和emplace_back的区别。

2024-03-19 15:41:22 309

原创 C++ inline关键字总结

inline只是对编译器的建议,编译器不一定采纳inline会省去函数调用的开销,同时还可以帮助编译器优化代码inline会造成代码膨胀,消耗内存template和inline是两个概念,彼此互不影响,在template函数加inline的话,就是具现出来的每个函数都是inline的在类的成员函数声明里直接定义函数的话,会隐式inlineinline会使virtual函数落空,因为virtual意味着执行后决定调用,而inline表示执行前替换构造函数和析构函数不要inline,因为这两个函数

2024-03-05 16:37:30 339

原创 理解ROS tf

ros的tf反应了一个机器人系统中,不同坐标系之间的关系

2024-03-04 16:14:45 608

原创 c++ [[nodiscard]]关键字详解

如果一个函数声明了[[nodiscard]],则该函数的返回值不能没有承接,如果没有承接,就会编译报warning

2024-03-01 10:21:24 1033

原创 git describe

git describe一般用于查看当前提交距离上次最近的tag是什么,并且还可以知道差了多少个commit,在工程实践当中是个非常好用的命令

2024-02-27 16:28:51 710

原创 自动驾驶中的障碍物时间对齐法

自动驾驶算法使用的系统往往不是实时系统,因此每个节点间拿到的数据可能不是同一时间的数据,从而造成系统误差,针对这一现象,工程上往往采用时间对齐内插外推法

2024-02-23 16:51:56 975

原创 编译报错 terminate called after throwing an instance of ‘std::length_error‘ what(): vector::_m_range_ins

terminate called after throwing an instance of 'std::length_error' what(): vector::_m_range_insert

2024-02-22 15:19:33 864

原创 c++指针和引用的区别

个人认为一个函数中,如果涉及传入参数的修改,那么最好把这个被修改值设计成指针接口,因为这样在下游调用函数时,就知道哪个参数会被修改,代码可读性更好。涉及型别推导时,例如模板推导或auto推导的情况,指针会被推导出指针型别,并保留cv特性。但引用只会被推导成值型别,且不保留cv特性。操作符,在返回类型时应该使用引用,而不使用指针。指针可以被重新赋值指向另一个不同对象,但是引用总是指向在初始化时被指定的对象,以后不能改变。指针指向了一个对象的地址,引用是给一个对象起别名。一些惯用语境下,例如重载。

2024-02-18 17:42:07 397

原创 std::abs和std::fabs的区别

都既可以用于整型,又可以用于浮点型。的使用范围会更广些,出来刚才提到的基本类型外,

2023-09-08 18:23:48 2588

原创 rosbag回放指定话题外的其他话题的方法

假设要回放bag包中除/tf话题外的所有话题。

2023-07-13 14:55:01 424

原创 python scatter_max算子不适配报错,RuntimeError: Not compiled with CUDA support

运行python做神经网络训练时,scatter_max算子不适配报错:RuntimeError: Not compiled with CUDA support。

2023-07-03 09:54:15 992 1

原创 如何在linux上查看显卡型号

发现我的显卡型号是2504,这和我们印象中的显卡型号如1080Ti之类的不一样,看起来不像真正的型号。可以看出显卡真正型号是"GeForce RTX 3060 Lite Hash Rate"这个网页里搜索2504,才能找到对应的真实型号。我的显卡的搜索结果如下。

2023-06-27 13:35:21 3441

原创 torch_scatter的scatter函数是什么意思

把src的第1行放在新tensor的第2行,最后,第一行用0补充空缺,最终输出tensor有三行。以上整个操作的意思是,把src中的第0行和第2行做平均后,放在新tensor的第0行,以上整个操作的意思是,把src中的第0行和第2行取最大后,放在新tensor的第1行,把src的第1行放在新tensor的第0行,最终输出tensor只有两行。

2023-06-21 19:19:35 366

原创 安装argoverse踩坑记录

ERROR: Could not build wheels for numpy, which is required to install pyproject.toml-based projectsnote: This error originates from a subprocess, and is likely not a problem with pip.ERROR: Failed building wheel for numpyerror: subprocess-exited-with-er

2023-06-19 14:43:27 2055 1

原创 如何评价CPU的性能

线程数越多,性能越好,四核八线程的CPU的性能不一定比六核六线程的CPU性能差。类比发动机涡轮增压值,带不带涡轮增压会很大程度影响性能,例如2.0T的发动机的马力不一定比3.0自然吸气的马力差。物理核心数,常见的CPU核心数有四核,八核,十六核等,CPU核心数越多,性能越好。类比发动机的缸数,常见发动机缸数有四缸,六缸,八缸,往往发动机缸数越多,此发动机马力越大。主频即CPU的时钟频率,这个值越大说明CPU处理数据能力越快,性能越好。类比发动机的红线转速,往往红线转速能拉的越高,此发动机马力越大。

2023-05-24 18:35:46 486

原创 conda和pip

conda和pip都是包管理工具,拥有xxx remove之类的语法的工具基本上都可以称作包管理工具。conda和pip的区别在于conda可以管理任何语言的包,而pip只能管理Python的包conda一般集成在anaconda里,anaconda可以提供一个独立的Python环境,该环境可以指定想要的Python版本,可以用有独立的依赖包,这个环境其实就是一个独立的文件夹。pip在安装依赖复杂的包时,在安装过程中如果遇阻,可能会污染环境。

2023-05-10 18:34:32 695

原创 ROS的参数加载机制

这里涉及到rosparam的写的位置,如果写在中间,则代表加载planning_node.yaml参数到局部命名空间,即/planning_node下,这里的里还有一个ns参数需要注意,这个是局部命名空间的前缀,可以在roslaunch时手动添加,如果设置ns="foo"的话,那么planning_node.yaml的参数将会被加载到/foo/planning_node下。这里使用n1的get到的是全局命名空间下的参数,即找的是"/bar"下的参数。

2023-04-20 14:18:16 569

原创 ROS CallBack函数和spinOnce()的触发机制,和消息队列的理解

注意到代码中的for循环,for循环执行了10次publish操作,直觉上会认为在一个while循环周期,此publisher发布了10次消息,但根据我们刚才讲的,那么一个while循环周期将会确确实实地执行10次publish操作,因为队列的size是20,大于for循环的10次,所以老消息不会被挤掉。函数时,其实系统并不会阻塞直至消息真正发送出去,而是会将此次要发送的msg存入一个队列(此队列即为publisher的消息队列),如果这个消息队列足够大的话,是不会漏掉任何pub方发布的任一帧数据的。

2023-03-24 18:36:46 1237

原创 二次规划问题(qp)和序列二次规划问题(sqp)的简单理解

当二次规划的约束为非线性约束时,通常会采用sqp进行求解,用连续求解qp的方法来得到非线性约束条件下的最优解,上述的qpoases和osqp均无法直接求解非线性约束问题,所以如果使用这两个库的话,注意,sqp是结果,而不是原因,只有在非线性约束的情况下才会考虑sqp求解,如果问题本身就是线性约束,则直接用qp解就行。对于工程师而言,我们在编写代码的时候,并不关心二次规划问题的求解细节,所以一般是把二次规划问题建立好后,直接调用三方库进行求解。因为约束为非线性约束,所以先将约束进行线性化,约束原方程为。

2023-03-06 18:10:24 9043 6

原创 plotjuggler识别不了rosbag的问题

环境ubuntu20.04,ros版本noetic。

2023-02-06 10:36:06 1804

原创 C++使用宏定义时的歧义问题

【代码】C++使用宏定义时的歧义问题。

2023-02-01 19:13:14 223

原创 利用ssh git clone实现免密git clone,push,pull

在gitlab设置里,选择SSH Keys,找到Key一栏,将本机生成的id_rsa.pub文件里的内容复制粘贴到Key栏里。,然后不断回车,会在~/.ssh文件夹下生成id_rsa.pub文件。下次git clone时选择ssh协议。在host主机上输入。

2023-01-29 18:21:13 923

原创 一阶二阶无穷阶范数快速理解

向量的2-norm又称为欧几里得范数, 是我们熟悉的向量的模, 即向量长度, 为各元素平方和再开根号, 对应sum(abs(X)^2)^(1/2)范数一般多指1-norm, 2-norm, inf-norm三个选项的范数, 对应MATLAB命令norm(A, p)矩阵的inf-norm是矩阵各个行向量row的1-norm取最大值, 对应max(sum(abs(X’)))矩阵的1-norm是矩阵各个列向量col的1-norm取最大值, 对应max(sum(abs(X)))

2022-12-23 16:25:28 693

原创 c++ stl常用算法总结

将容器中满足条件的放在一边, 不满足条件的放在另一边, 返回两边中间另一边开始前的指针, 会改变容器顺序。去除容器中满足特定条件的元素, 通常与erase联合使用, 完成真正意义上的删除, 不要求容器有序。将容器中的[first, middle)元素进行排序, 会改变容器顺序, 默认从小到大排序。找到容器中第一个大于等于一个值的元素, 不会改变容器顺序, 要求容器有序。找到容器中第一个大于一个值的元素, 不会改变容器顺序, 要求容器有序。将容器元素进行排序, 会改变容器顺序, 默认从小到大排序。

2022-12-20 14:01:45 424

原创 docker常用指令

【代码】docker常用指令。

2022-11-19 13:06:29 221

原创 如何去除const成员函数的const属性

【代码】

2022-11-19 13:04:30 616

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除