- 博客(66)
- 收藏
- 关注
原创 C++ noexcept关键字详解
noexcept是c++11新引入的关键字,取代c++98的throw()的异常规格,虽然c++的异常规格被大家嫌弃并弃用,但将一定不会发出异常的函数申明成noexcept还是能一定程度上带来代码效率的提升。
2024-03-22 17:06:35 677
原创 C++ inline关键字总结
inline只是对编译器的建议,编译器不一定采纳inline会省去函数调用的开销,同时还可以帮助编译器优化代码inline会造成代码膨胀,消耗内存template和inline是两个概念,彼此互不影响,在template函数加inline的话,就是具现出来的每个函数都是inline的在类的成员函数声明里直接定义函数的话,会隐式inlineinline会使virtual函数落空,因为virtual意味着执行后决定调用,而inline表示执行前替换构造函数和析构函数不要inline,因为这两个函数
2024-03-05 16:37:30 297
原创 c++ [[nodiscard]]关键字详解
如果一个函数声明了[[nodiscard]],则该函数的返回值不能没有承接,如果没有承接,就会编译报warning
2024-03-01 10:21:24 736
原创 git describe
git describe一般用于查看当前提交距离上次最近的tag是什么,并且还可以知道差了多少个commit,在工程实践当中是个非常好用的命令
2024-02-27 16:28:51 608
原创 自动驾驶中的障碍物时间对齐法
自动驾驶算法使用的系统往往不是实时系统,因此每个节点间拿到的数据可能不是同一时间的数据,从而造成系统误差,针对这一现象,工程上往往采用时间对齐内插外推法
2024-02-23 16:51:56 880
原创 编译报错 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 573
原创 c++指针和引用的区别
个人认为一个函数中,如果涉及传入参数的修改,那么最好把这个被修改值设计成指针接口,因为这样在下游调用函数时,就知道哪个参数会被修改,代码可读性更好。涉及型别推导时,例如模板推导或auto推导的情况,指针会被推导出指针型别,并保留cv特性。但引用只会被推导成值型别,且不保留cv特性。操作符,在返回类型时应该使用引用,而不使用指针。指针可以被重新赋值指向另一个不同对象,但是引用总是指向在初始化时被指定的对象,以后不能改变。指针指向了一个对象的地址,引用是给一个对象起别名。一些惯用语境下,例如重载。
2024-02-18 17:42:07 374
原创 python scatter_max算子不适配报错,RuntimeError: Not compiled with CUDA support
运行python做神经网络训练时,scatter_max算子不适配报错:RuntimeError: Not compiled with CUDA support。
2023-07-03 09:54:15 743
原创 如何在linux上查看显卡型号
发现我的显卡型号是2504,这和我们印象中的显卡型号如1080Ti之类的不一样,看起来不像真正的型号。可以看出显卡真正型号是"GeForce RTX 3060 Lite Hash Rate"这个网页里搜索2504,才能找到对应的真实型号。我的显卡的搜索结果如下。
2023-06-27 13:35:21 3045
原创 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 303
原创 安装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 1578 1
原创 如何评价CPU的性能
线程数越多,性能越好,四核八线程的CPU的性能不一定比六核六线程的CPU性能差。类比发动机涡轮增压值,带不带涡轮增压会很大程度影响性能,例如2.0T的发动机的马力不一定比3.0自然吸气的马力差。物理核心数,常见的CPU核心数有四核,八核,十六核等,CPU核心数越多,性能越好。类比发动机的缸数,常见发动机缸数有四缸,六缸,八缸,往往发动机缸数越多,此发动机马力越大。主频即CPU的时钟频率,这个值越大说明CPU处理数据能力越快,性能越好。类比发动机的红线转速,往往红线转速能拉的越高,此发动机马力越大。
2023-05-24 18:35:46 334
原创 conda和pip
conda和pip都是包管理工具,拥有xxx remove之类的语法的工具基本上都可以称作包管理工具。conda和pip的区别在于conda可以管理任何语言的包,而pip只能管理Python的包conda一般集成在anaconda里,anaconda可以提供一个独立的Python环境,该环境可以指定想要的Python版本,可以用有独立的依赖包,这个环境其实就是一个独立的文件夹。pip在安装依赖复杂的包时,在安装过程中如果遇阻,可能会污染环境。
2023-05-10 18:34:32 664
原创 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 469
原创 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 1093
原创 二次规划问题(qp)和序列二次规划问题(sqp)的简单理解
当二次规划的约束为非线性约束时,通常会采用sqp进行求解,用连续求解qp的方法来得到非线性约束条件下的最优解,上述的qpoases和osqp均无法直接求解非线性约束问题,所以如果使用这两个库的话,注意,sqp是结果,而不是原因,只有在非线性约束的情况下才会考虑sqp求解,如果问题本身就是线性约束,则直接用qp解就行。对于工程师而言,我们在编写代码的时候,并不关心二次规划问题的求解细节,所以一般是把二次规划问题建立好后,直接调用三方库进行求解。因为约束为非线性约束,所以先将约束进行线性化,约束原方程为。
2023-03-06 18:10:24 7654 6
原创 利用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 804
原创 一阶二阶无穷阶范数快速理解
向量的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 577
原创 c++ stl常用算法总结
将容器中满足条件的放在一边, 不满足条件的放在另一边, 返回两边中间另一边开始前的指针, 会改变容器顺序。去除容器中满足特定条件的元素, 通常与erase联合使用, 完成真正意义上的删除, 不要求容器有序。将容器中的[first, middle)元素进行排序, 会改变容器顺序, 默认从小到大排序。找到容器中第一个大于等于一个值的元素, 不会改变容器顺序, 要求容器有序。找到容器中第一个大于一个值的元素, 不会改变容器顺序, 要求容器有序。将容器元素进行排序, 会改变容器顺序, 默认从小到大排序。
2022-12-20 14:01:45 396
原创 ubuntu如何进入修复模式,单用户模式,在进入系统前调出root用户的终端进行修复
在进入Ubuntu界面前选择“Advanced options for Ubuntu”这一项进入进入后在当前界面选择“recovery mode”这一项进入进入后在当前界面选择“root”这一项进入此时会在底部出现这样的画面,直接输入回车即可进入单用户模式开始修复进入后界面如下...
2021-11-09 22:32:52 5388
原创 linux交换capslock键和ctrl键
在~/.profile文件里添加/usr/bin/setxkbmap -option "ctrl:swapcaps"保存, 重启, 搞定
2021-11-09 21:46:38 793
原创 一文读懂emplace_back和push_back的最主要区别
案例假设给定A类, 代码如下#include <iostream>#include <vector>class A { public: A() { std::cout << "默认构造" << this << std::endl; } A(const A&) { std::cout << "拷贝构造" << this << std::endl; } A(A&&) {
2021-10-27 13:40:20 617
原创 error: non-const lvalue reference to type cannot bind to a value of unrelated type
项目场景:在项目代码编译中报错信息如下:error: non-const lvalue reference to type '...' cannot bind to a value of unrelated type '...'问题描述:将项目问题进行简单抽象后等价于以下问题:这样做编译通过 int a; const double& m = a;但这样做编译报错 int a; double& m = a;报错信息如标题原因分析:因为临时变量不能被绑定在一个
2021-10-24 13:20:28 4401 1
原创 C++类中默认生成的函数详解
C++类中会在需要时(即在某些代码使用了它们, 而类中并未显式申明的场合), 会默认生成一些public属性的函数C++98标准: 会生成默认构造函数, 析构函数, 复制构造函数, 复制赋值运算符C++11标准: 除了C++98标准中生成的函数外, 还会生成移动构造函数和移动赋值运算符以类A为例, 上述函数表示如下:Class A { public: A() = default; // 构造函数 ~A() = default;
2021-10-15 15:09:02 1452
原创 linux如何删除除了匹配指定名字以外的文件
shopt命令首先需要介绍一下shopt命令, shopt是shell options的缩写, 意思是管理某些bash的选项, 直接执行shopt命令可以查看所有选项的状态是开启还是关闭.如果要完成本文的目标, 则必须保证选项中的extglob是on状态, 可以输入shopt extglob单独查看extglob的状态.extglob模式开启之后Shell可以另外识别出5个模式匹配操作符,这样就能配合rm实现本文目标.开启命令shopt -s extglob关闭命令shopt -u extg
2021-08-31 17:41:55 713
原创 Git远程分支和tag相关操作
删除远程分支git push origin :dev或者git push origin --delete dev删除远程已被删除但本地仍存在的分支git fetch --prune或者git remote prune origin在使用此命令之前可以先用git remote prune origin --dry-run查看哪些分支会被清理将本地tag推送至远程仓库git push origin v3.0将本地所有tags推送至远程仓库git push origin --ta
2021-08-31 17:12:21 188
原创 vim常用寄存器种类总结
The unnamed register “” (匿名寄存器)该寄存器会储存上次剪切或复制的内容10 numbered registers "0 to "9 (0~9数字寄存器)数字0寄存器会储存上次仅为复制的内容, 数字19寄存器会**依次**储存上次剪切或复制的前19次的仅为剪切的且不小于一行的内容Small delete register "- (小删除寄存器)该寄存器会储存上次仅为剪切的且小于一行的内容Named registers "a to "z or "A to "..
2021-07-13 11:48:50 409
原创 gdb打印Eigen库
方法:在任意路径下创建一个目录,将https://gitlab.com/libeigen/eigen/-/blob/master/debug/gdb/printers.py该文件放入该目录,同时在该目录下新建一个空的__init__.py文件创建一个~/.gdbinit文件,在该文件中写入pythonimport syssys.path.insert(0, '/path/to/eigen/printer/directory')from printers import register_eig.
2021-05-20 10:24:18 477
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人