- 博客(28)
- 收藏
- 关注
原创 【无标题】
轨迹优化首先介绍一下 Minimum Snap 的缺点。MS是天然的容易生成一条光滑的曲线但是不易避障。有两种角度可以解决这个问题。1.在障碍物的区域施加一种推力,将轨迹推到没有障碍物的区域。2.是在安全的区域加一个bounding 的正方形区域,是轨迹经过这个安全的区域,这样也可以达到目标。硬约束corridor-based trajectory optimizationcopy: 路径规划——软硬优化下的轨迹优化.understood...
2022-04-19 19:49:48 167
原创 Day15学习笔记C++
模板类模板template后面加上类就是类模板了类模板与函数模板区别1.类模板没有自动类型推导2.类模板在模板参数列表中可以有默认参数1类模板template<class NameType, class Agetype>class Person{public: NameType m_Name; AgeType m_Age;}类模板不能自动推导类型,需要指定Person<string, int> p1("孙悟空", 99);2template&l
2022-04-06 19:39:21 775
原创 State Lattcie Planner
运动规划动力学和运动学概念为什么要在前端考虑动力学约束?1.学院派的思路:将任务分为前端和后端,前者寻找一个地位空间里寻找一个可行的粗糙的路径,以及后端在机器人状态空间里的一个轨迹优化。问:既然后端已经有了轨迹优化了,为什么在前端还需要考虑动力学约束呢?答:如果前端完全不考虑动力学约束的话,整个轨迹优化的压力全在后端,如果前端考虑了动力学约束的话,会有一个比较好的初始路径给后端优化,减轻了后端的压力。2.且轨迹优化往往只能在局部进行。规划优化往往是在path的基础上做的局部的变形。1.从全局来看,轨
2022-04-06 11:59:24 1980
原创 问题集与面经
1.关于ADAS的想法2.ROS2.0 和 ROS1.03.ROS的缺点4.Lattice planning5.linux的使用6.模型预测控制MPC面经1:第一块ROS,考察了ros的基本概念如roshandler,roslaunch,roscore等;第二块Linux的使用,gdb调试,linux常用命令kill等;第三块编程,代码题,看代码选答案。第四块路径规划算法,A*,Dijkstra,插值,样条等;第五块数学,几何,四元数,泛函,多项式,坐标变换,公式推导等。面经2:一
2022-04-05 22:28:59 3084 2
原创 Day14学习笔记
C++模板template<class T> class 可以替换成 typenamevoid mySwap(T &a, T&b){ T temp = a; a = b; b = temp;}两种调用方式:1.隐形int a = 10; int = 20;mySwap(a , b);编译器会自动识别a 和 b 的类型。注意事项:自动类型推导必须推出一致的数据类型T才可以使用。比如说把 b 声明为 char;2.显性。mySwap<int>
2022-04-05 11:11:52 383
原创 LeetcodeDay32:中等题的一天
36.有效的数独其实就是想问你如何一次遍历筛选3个条件,行筛选和列筛选可以很容易就明白了能够同时筛选,[i][j],[j][i]即可。问题就是33的格子如何同时筛选。设行索引变量为 i ,当 i < 3 时,i/3 = 0,当 3< i < 6 时,i/3 = 1,当6<i<9 时,i/3 = 2,列变量 j 同理。 那么取左上角33格子,则有 i<3,j<3 , Array[i/3][j/3] => Array[0][0],那么33总共九个数字,所以再
2022-03-30 17:25:40 92
原创 Day11学习笔记
运动规划概率图路线算法概率图路线算法是完备的,当地图有解的时候,它是一定能给出解的。当我们直接对地图使用A算法时,实际上是对一张布满网格的地图进行图搜索,这是一张非常复杂的图,我们要想改进算法,搜索前需要讲栅格地图换成一种更简单的概率地图。这是PRM,PRM分为两个阶段。Learning阶段,将一张地图采样,随机采样,根据一些规则,将点连成线。query阶段,搜索阶段,使用A算法进行路径搜索。这样子虽然是对A*的算法效率有所提升,但这里还是有可以改进的空间。Learning在连成将概率点连成线的
2022-03-28 22:43:17 724
原创 Day9学习笔记
C++运算符重载。+号运算符重载Person operator+(Person &p1, Person &p2){Person temp ; temp.m_A = p1.m_A + p2.m_B; temp.m_B = p1.m_A + p2.m_B; return temp} 重载运算符 operator,调用简化为Person p1,p2; Person p3 = p1 + p2 .调用实质为 p3 = operato+(p1, p2 ).左移运算符重载 。1.链式编程。
2022-03-24 21:37:28 1372
原创 Day28:搜索与回溯算法
剑指 Offer 37. 序列化二叉树请实现两个函数,分别用来序列化和反序列化二叉树。你需要设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。题目分析1.序列化,需要将null 的叶子节点也加入进来。除了这点的处理,其他的都跟平常的bfs差不多。2.反序列化。主要一些将Str变成vector 形式的int有点麻烦,建立整颗树的方法到挺容易懂class Codec {pub
2022-03-24 19:23:42 321
原创 vscode 与 cmake
VScode.vscode放在与ch2、ch3那一级或者是放在src平级上,VScode就当成一个文本编辑器了,无法用它进行编译的作用,写完保存一下然后去build里面make一下就好了。CMakebuild 文件放在与useEigen和useGeomtry这些同级上,这级上的CMakelist要写上添加这些useEigen、useGeomtry包,他们包里还有一个CMakelist,是跟他们包里的cpp是相对应的。我们cmake … 的地方是与useEigen同级的那个build,在那里进行cmak
2022-03-23 23:10:41 276
原创 四元数学习笔记
基本公式主要理解单位球代表着四元数投影到三维空间中保持不变的那一部分,代表着所有实部为0的四元数。实部为0~1的部分被投影到了单位球内部,负数实部的被投影到了单位球的外部。投影到三维空间上的点四元数的乘法是什么意义呢?四维空间的旋转是怎么一回事呢?参考于二维平面的旋转投影到一维空间上,当旋转时,一维坐标会被拉伸,而四维空间的旋转则是相当于两个互相垂直的圆在同时做旋转,这是在乘以一个四元数所对应的几何意义。两个圆都转了135度(jk圆和1i圆)对于某个单位四元数,只要画一条连接1和这个对应的点
2022-03-23 21:05:39 1243 1
原创 Day27:数据结构
剑指 Offer 59 - I. 滑动窗口的最大值给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。题目分析当窗口移动的时候,会删除掉左边的,加进右边的,如果只向右边添加,那么新窗口的最大值就为j+1=max(x j,nums[j+1]),但由于删除的可能会是最大值,因此需要遍历整个窗口区获得最大值,所以时间复杂度为O((n−k+1)k)≈O(nk) 。该题难点在于如何在每次窗口滑动后,将 “获取窗口内最大值” 的时间复杂度从 O(k)降低至 O(1)。删除deque内所
2022-03-23 20:19:51 1440
原创 rviz一些无法正常显示的问题
如题。弄了好半天,rviz始终无法正常显示点云地图,抱着试试看的态度来wiki的rviz介绍来看看,用户文档里的第二条故障排查一眼就吸引了我,点进去,第一条就是你需要关闭可能造成问题的硬件加速(如使用了intel gpu),直接复制粘贴这条命令:export LIBGL_ALWAYS_SOFTWARE=1重启一下rviz,问题直接得到解决,我擦,太牛了,以后还是得看官方文档行事。收工睡觉,tnnd花了半晚上的时间一句指令给我搞定了...
2022-03-21 22:47:06 9005 7
原创 Day7学习笔记
C++深拷贝和浅拷贝。浅拷贝会让指针指向同一块内存地址,这就可能在释放内存的时候,重复释放同一块地址的内存造成错误。而深拷贝则是会申请出一块新的内存来存放这个拷贝的值。像这样实现是深拷贝。m_Height = new int (*p.m_Height)初始化列表。Person(int a , int b . int c ): m_A(a),m_B(b), m_C©。 Person p(30,20,10)类对象作为类成员。class A() class B{ A a;};A类的构造函数会比B类构造函数
2022-03-21 20:56:47 874
原创 Day24:数学题
剑指 Offer 14- I. 剪绳子给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m-1] 。请问 k[0]k[1]…*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。题目分析纯纯数学题罢了。两个推论:1.将相等的长度等位为多段得到的乘积最大。2.尽可能绳子以3等分为多段。class Solution {pub
2022-03-20 17:35:34 209
原创 Day6学习笔记
C++访问权限。1. 公共权限:类内类外都可以访问。2. 保护权限:类内可以访问,类外不可以访问。儿子可以访问父亲中的保护内容3. 私有权限:类内可以访问,类外不可以访问。儿子不可以访问父亲中的私有内容struct和class的区别1.struct默认权限是公共。2. class默认权限是私有。构造和析构函数这两个函数会被编译器自动调用完成初始化和清理工作,如果我们不提供构造和析构,编译器会自动提供一个空实现。语法构造函数的分类及调用按参数分:有参构造和无参构造。Pers
2022-03-20 15:55:23 465
原创 线性代数学习
目录张合的空间与基矩阵和线性变换矩阵相乘和线性变换复合三维空间的线性变换行列式张合的空间与基一对基应该是线性无关的,线性相关与否与它们是否对空间扩展作出了作用有关系,当一对向量是在一条直线时,我们说它们所描述的空间坍缩成一条直线,其中一条向量没有为空间扩展做出贡献,所以我们说这两对向量是线性相关的。矩阵和线性变换线性变换是什么呢,总的来说是对空间变换的一种比较特殊的形式,是对空间的压缩拉伸,关键的是,线性变换由它对空间的基向量完全决定。我们要求线性变换必须有以下两种性质:1.直线在变换之后仍为直线
2022-03-20 11:43:47 161
原创 Day23:位运算
目录剑指 Offer 39. 数组中出现次数超过一半的数字题目分析剑指 Offer 66. 构建乘积数组题目分析剑指 Offer 39. 数组中出现次数超过一半的数字数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。题目分析1.哈希表统计大法。时间和空间复杂度为O(N)。2.数组排序法,数组中点的元素一定为这个数字。3.摩尔投票法。时间复杂度为O(N),空间复杂度为O(1)。class Solution {public: int majorityElement(vector
2022-03-19 11:38:15 115
原创 Day22:位运算
目录剑指 Offer 56 - I. 数组中数字出现的次数题目分析剑指 Offer 56 - I. 数组中数字出现的次数题目分析学习了异或的性质。1.恒等律:X ⊕ 0 = X 2.归零律:X ⊕ X = 0 3.交换律A ⊕ B =B ⊕ A4.结合律分配律也都满足。回到题目上,简化问题,如果只有一个只出现过一次的数字,那么我们完全可以通过异或的性质来解决题目,初始化x=0,x去异或数组里面的每个数,出现过两次的数字会变成0,而且这跟数字的顺序没有关系,因为交换律在此做了支撑。所以最后x会
2022-03-18 15:29:33 143
原创 Day3学习笔记
C++今天学习引用。1.引用的语法,int &b = a;2.引用必须初始化,一开始就要指明它是谁的引用,而且引用在初始化后不可以改变,就是不可以变成其他变量的引用,下面都相当于赋值操作。3.引用做函数参数,引用传递的效果与地址传递效果一样。4.引用做函数返回值,1.不要返回局部变量的引用,局部变量在函数运行后释放,我们已经没有权力去操控它了。2.函数返回值如果是引用,那么函数可以作为左值。5.引用的本质是一个指针常量。1.int &b = a 等价于 int * const b
2022-03-17 22:15:56 72
原创 Day21:位运算
目录剑指 Offer 15. 二进制中 1 的个数题目分析。剑指 Offer 65. 不用加减乘除做加法题目分析剑指 Offer 15. 二进制中 1 的个数编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为 汉明重量).)。题目分析。简单的位运算,一种是逐位计算,看一眼就会,时间复杂度为O(log n),n是数字1最高位所在位数。另一种是利用 n&= n-1,这可以讲最低位的1置0,时间复杂度仅和1的个数相关。法一:cl
2022-03-17 16:04:42 230
原创 A*与Dijkstra
C++内存分区程序运行前,分为全局区和代码区。程序运行后,分为栈区和堆区栈区:由编译器自动分配释放,存放局部变量,栈区的数据在函数执行后自动释放,所以不要返回局部变量的地址。堆区:由程序员分配释放。利用new可以将数据开辟到堆区。用new可以将堆区的地址返回new操作符: 创建 int* p = new int(10) ; int* arr = new int[10] ;删除:delete p; delete []arr;...
2022-03-16 22:16:31 550
原创 Day20:分治算法:重建二叉树
目录重建二叉树题目分析重建二叉树输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。题目分析先序遍历的首个元素就是树的根节点。我们在先序遍历中找到根节点,然后就可以根据根节点在中序遍历的数组中(因为题目说了树中没有重复的元素),将其划分为左子树 | 根节点 | 右子树。这样再分别递归其左右子树,即可重建整个二叉树。难点就在于递归需要传入的参数。这里先给出答案,需要的3个参数是1.根节点在前序遍历的索引,2.子树在中序遍历的左边
2022-03-16 15:43:29 232
原创 Day19:剑指 Offer68 二叉搜索树的最近公共祖先
I.二叉搜索树的最近公共祖先给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”题目关键这是一颗二叉搜索树,而且所有的值都是唯一的,所以p、q可以直接根据val来区分他们在root的左子树还是右子树。所以就很简单了,总共就四种情况,1.p、q在root的异侧,所以root就是他们的最近公共祖先。2.q、p有
2022-03-15 11:41:01 756
原创 Day18:剑指 Offer55 二叉树的深度&平衡二叉树
Day18:剑指 Offer55 二叉树的深度&平衡二叉树二叉树的深度1.DFS2.BFS平衡二叉树方法一:后序遍历 + 剪枝方法二:先序遍历 + 判断深度二叉树的深度输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。两种方法。1.DFS深度优先就是递归的想法。关键点: 此树的深度和其左(右)子树的深度之间的关系。显然,此树的深度 等于 左子树的深度 与 右子树的深度 中的 最大值 +1+1 。深度优先就是递归的
2022-03-14 21:16:15 639
转载 Day17:剑指 Offer 40. 最小的 k 个数(快排)
Day17:剑指 Offer 40. 最小的 k 个数(快排)快排简介算法分析算法优化代码题目法一法二快排简介算法分析1.快排有两个核心点。分别是 哨兵划分 和 递归 。哨兵划分: 以数组某个元素(一般选取首元素)为 基准数 ,将所有小于基准数的元素移动至其左边,大于基准数的元素移动至其右边。**递归:**对 左子数组 和 右子数组 分别递归执行 哨兵划分,直至子数组长度为 1 时终止递归,即可完成对整个数组的排序。2.时间复杂度。最佳 Ω(NlogN): 每轮哨兵划分操作将数组划分为两个等长的数组
2022-03-13 21:17:52 157
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人