自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++ noexcept关键字详解

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

2024-03-22 17:06:35 271

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

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

2024-03-19 15:41:22 142

原创 C++ inline关键字总结

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

2024-03-05 16:37:30 245

原创 理解ROS tf

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

2024-03-04 16:14:45 531

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

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

2024-03-01 10:21:24 256

原创 git describe

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

2024-02-27 16:28:51 540

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

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

2024-02-23 16:51:56 841

原创 编译报错 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 247

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

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

2024-02-18 17:42:07 367

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

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

2023-09-08 18:23:48 1195

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

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

2023-07-13 14:55:01 236

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

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

2023-07-03 09:54:15 517

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

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

2023-06-27 13:35:21 2668

原创 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 262

原创 安装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 1241 1

原创 如何评价CPU的性能

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

2023-05-24 18:35:46 283

原创 conda和pip

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

2023-05-10 18:34:32 644

原创 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 387

原创 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 953

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

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

2023-03-06 18:10:24 5972 2

原创 plotjuggler识别不了rosbag的问题

环境ubuntu20.04,ros版本noetic。

2023-02-06 10:36:06 1000

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

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

2023-02-01 19:13:14 153

原创 利用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 662

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

向量的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 460

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

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

2022-12-20 14:01:45 376

原创 docker常用指令

【代码】docker常用指令。

2022-11-19 13:06:29 186

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

【代码】

2022-11-19 13:04:30 480

原创 Ubuntu将CapsLock键做成额外的Control键

Ubuntu将CapsLock键做成额外的Control键

2022-10-25 09:31:48 184

原创 tmux常用指令

tmux常用指令

2022-10-24 19:27:09 1495

原创 ranger常用操作总结

ranger常用操作总结

2022-10-24 19:24:07 272

原创 find_package()快速理解

find_package()快速理解

2022-10-24 19:14:06 3139

原创 ubuntu如何进入修复模式,单用户模式,在进入系统前调出root用户的终端进行修复

在进入Ubuntu界面前选择“Advanced options for Ubuntu”这一项进入进入后在当前界面选择“recovery mode”这一项进入进入后在当前界面选择“root”这一项进入此时会在底部出现这样的画面,直接输入回车即可进入单用户模式开始修复进入后界面如下...

2021-11-09 22:32:52 4837

原创 linux交换capslock键和ctrl键

在~/.profile文件里添加/usr/bin/setxkbmap -option "ctrl:swapcaps"保存, 重启, 搞定

2021-11-09 21:46:38 741

原创 一文读懂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 569

原创 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 3958

原创 C++类中默认生成的函数详解

C++类中会在需要时(即在某些代码使用了它们, 而类中并未显式申明的场合), 会默认生成一些public属性的函数C++98标准: 会生成默认构造函数, 析构函数, 复制构造函数, 复制赋值运算符C++11标准: 除了C++98标准中生成的函数外, 还会生成移动构造函数和移动赋值运算符以类A为例, 上述函数表示如下:Class A { public: A() = default; // 构造函数 ~A() = default;

2021-10-15 15:09:02 1155

原创 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 639

原创 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 171

原创 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 357

原创 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 396

空空如也

空空如也

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

TA关注的人

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