自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 非线性优化的数值方法小结——梯度下降法,牛顿法,高斯牛顿法,LM法

在非线性优化领域中,我们常采用一系列数值方法对构造的问题进行求解,各方法彼此联系,本文将对这些数值处理方法进行梳理构造。

2023-07-30 15:19:27 752

原创 机器人算法工程师入门指南(四)常用技能与如何备战offer

常用技能与如何备战offer在机器人算法的学习过程中,我们如何该用什么语言或工具来实现算法,检验算法的正确性呢?直接上真实机器人不是一个好的选择,一是步骤繁琐不方便,二是若算法有问题,可能会造成安全事故,因此,仿真是算法实践中必不可少的步骤。本文中博主将为大家介绍几种常用的仿真软件。ROSROS是一款专为机器人开发的操作系统,常在ubuntu系统上运行。ROS为机器人软件开发工作者提供一个开源的系统框架,把繁琐的工作都实现好,让用户可以集中注意力于开发自己的领域。对于初学者来说,ROS看可以让新手在短

2021-12-10 19:49:53 2526

原创 机器人算法工程师入门指南(三)机器人算法工程师需要学习哪些知识?(及教材推荐)

机器人算法工程师需要学习哪些知识?作为复杂的工业品,机器人的制造涉及到各个学科的知识,包括材料、振动、机构设计、电机伺服、嵌入式芯片、软件、算法等等。其中,机器人算法也并非代指某一种单纯的算法,而是包括感知、规划、控制等等一系列算法。这也就决定了机器人算法工程师需要宽阔的视野与深厚的知识储备。我将知识图谱分为以下四个方面:感知、规划、控制、机器人学,如下:...

2021-12-10 15:20:39 6172 2

原创 机器人算法工程师入门指南(二)国内有哪些机器人公司?

国内有哪些机器人公司?机器人的概念涵盖极广。从流水线上大小各异的机械臂,到仓库里的移动底盘,再到餐厅里上菜的机器人服务员,甚至是淘宝客服聊天机器人,都能称为广义上的“机器人”。各路教材、维基对机器人的定义都不相同。笔者将从机器人算法工程师的角度出发,分析作为一个学生,想成为一名“机器人算法工程师”,都有哪些选择。工业机械臂工业机械臂是机器人家族中历史最为悠久的一族,常用于流水线上的组装、码垛、切割、喷涂等作业。按照关节数分有SCARA机器人、五轴、六轴、七轴机器人。这一领域,一些传统的算法已经比较成熟

2021-12-09 16:39:11 1197

原创 机器人算法工程师入门指南(一)如何成为一名机器人算法工程师?

如何成为一名机器人算法工程师?  三年前的冬天,我还是一名大三的学生,在学长的介绍下阅读了一本书,是John J. Craig的**《Introduction to robotics》**。读过几章之后,我感觉非常的亢奋,第一次感觉到数学与机械的完美结合,这就是我想从事的学科。那么,如何成为一名机器人算法工程师呢?  如今回想起来,当时的见解太过浅薄。但所幸对这门学科确实有热情,也遇到了很多人的帮助,所以就沿着当时的道路走到现在,顺利在秋招时拿到了机器人算法工程师的offer,进入了一家心仪的公司。 

2021-12-09 11:15:55 1617 1

原创 牛顿迭代法收敛性的一点讨论

牛顿迭代法收敛性的一点讨论今天在使用牛顿迭代法求方程的数值解时,发现其一会儿收敛,一会儿不收敛,于是认证研究了下牛顿迭代法的收敛条件。牛顿迭代法的收敛性分为局部收敛性与全局收敛性。**局部收敛性:**若α是f(x)=0的一个单根, f(α)=0,f’(α)≠0,ϕ’(α)=0, ϕ’’(α)=f’’(α)/f’(α), 则在根α附近Newton法是局部收敛的, 并且是二阶收敛的。这个附近指的是充分接近。要多接近呢?似乎没有进一步的证明。这就决定了牛顿迭代法的初值选取非常重要,只有在解的附近选初值才

2021-10-17 12:34:47 17568 2

原创 matlab中cos(pi/2)和sin(pi)不等于0的解决方案

由于matlab中pi是π的近似数,因此计算cos和sin的结果都是一个无穷小的数。一般情况下没什么问题,但在符号运算时会产生非常多的无穷小数,导致结果庞杂。苦苦搜寻后找到最终解决方案,将pi替换成sym(pi)即可,即计算cos(sym(pi/2))和sin(sym(pi))就能解决。...

2021-07-16 10:04:02 3887 1

原创 欧拉角速度与角速度的关系推导——欧拉运动方程

欧拉角速度与角速度的关系推导——欧拉运动方程最近研究欧拉角速度与角速度之间的关系,特别折磨,网上的资料要不就是地理学的进动——章动——自转那一套欧拉角与角速度的关系,要不就是陀螺仪那一套欧拉角与角速度的关系,不具有普遍性,因此在大干三天后,将自己的心得写上来供大家参考。欧拉角欧拉角的定义不再赘述,简单来说它是确定定点转动刚体位置的3个一组独立角参量。这个东西坏就坏在它有太多种了。绕轴转动的顺序不同(如x-y-z和x-z-y),绕轴转动的类型不同(指绕惯性坐标系x-y-z或刚体固连坐标系x-y’-z’’

2021-05-13 11:51:22 17031 21

原创 刚体姿态运动学(二)旋转的微分形式——角速度、欧拉角速度、四元数导数、旋转矩阵导数

刚体姿态运动学(二)姿态的微分形式——角速度、欧拉角导数、四元数导数、旋转矩阵导数上一篇我们讲了姿态的表达方式及其转换,可以说还是比较简单的。接下来面临的问题是,我们不仅想知道刚体的姿态,还想知道姿态是怎么变化的,也就是刚体的角速度。接下来我们研究一下姿态的各种表达的微分形式该如何转化为角速度。角速度是描述刚体姿态变化的速度,由三个方向的分量wxw_{x}wx​,wyw_{y}wy​,wz,w_{z},wz​组成。旋转矩阵导数转角速度r(t)=R(t)r0\mathbf{r}(t)=\mathbf{

2021-03-14 19:46:53 12940 5

原创 刚体姿态运动学(一)欧拉角、四元数、旋转矩阵及其转换

刚体运动学姿态推导——弄懂欧拉角、四元数、旋转矩阵(一)姿态表示最近做项目用到了刚体姿态方面的知识,乱七八糟东西一堆,尤其用到速度表示的微分运动学,特别容易弄混,因此写个帖子方便复习和查找 。主要是记录机器人方向用到的知识。旋转矩阵对于空间中的两组坐标系[x1x_1x1​,y1y_1y1​,z1z_1z1​],[x0x_0x0​,y0y_0y0​,z0z_0z0​]我们可以用一个旋转矩阵来描述二者之间的姿态变化:R10=(x1⋅x0y1⋅x0z1⋅x0x1⋅y0y1⋅y0z1⋅y0x1⋅z0y1⋅z

2021-03-14 14:11:34 3434

原创 基于MPC的移动机器人轨迹跟踪控制matlab例程

基于MPC的移动机器人轨迹跟踪控制matlab例程github地址移动机器人建模因为所有机器人均可转化为独轮车模型,因此本项目采用独轮车模型。(x˙cy˙cθ˙c)=(cos⁡θc0sin⁡θc001)(vcωc)\left(\begin{array}{c}\dot{x}_{\mathrm{c}} \\ \dot{y}_{\mathrm{c}} \\ \dot{\theta}_{\mathrm{c}}\end{array}\right)=\left(\begin{array}{cc}\cos \th

2021-02-10 20:27:00 6866 9

原创 基于simulink和adams的机械臂自适应控制

基于simulink和adams的机械臂自适应控制github地址模型构建本想基于原来的七自由度机械臂做自适应控制,但发现自适应控制需要用到线性化的动力学参数矩阵,七自由度机械臂的参数矩阵太庞大和复杂了。所以新做了一个平面三自由度机械臂,如下图:机械臂的质量均为10,z轴的惯量为1.05.算法原理欧拉拉格朗日法求动力学方程首先,需要使用拉格朗日法求出机械臂的动力学方程:H(q)q¨+C(q,q)q+G(q)=τH(q) \ddot{q}+C(q, q) q+G(q)=\tauH(q)q¨​

2021-01-31 19:31:19 4487 3

原创 基于adams与simulink的七自由度机械臂模型与控制仿真

基于adams与simulink的七自由度机械臂模型与控制仿真最近在搞adams与simulink联合仿真,发现网上关于机械臂的这块中文资料很少,也没有开源模型。因此将我的学习成果开源出来,供大家学习和参考。做的效果不是很好,仍有许多不足之处。还请见谅。github地址所有代码、模型均放在以上仓库中。后续还会进行维护,开发其他控制算法,如自适应控制、最优控制等等。如果觉得做的不错,希望能帮忙点个star。机械臂模型机械臂DH坐标图如下:来自实验室杨师兄的论文《An Adaptive Force

2021-01-28 15:14:47 6466 21

原创 七大经典排序法梳理

常见排序法冒泡排序从头开始比较相邻的元素,若前者较后者较大,则更换顺序。结束后,从第二个开始重新排序。选择排序每次选择队列中最小的元素,放在队首,结束后,从第二个开始重新排序。插入排序将第一个元素当做已排序队列,从第二个开始扫描队列,将他们插入到合适的位置。希尔排序将元素分为N/2组,每组两个元素之间的位置相差gap。用插入排序后,再将元素分为N/4组,每一组进行排序,直到最后只剩一组,归并排序将元素无限分组直到两两一组,将前后两组中头元素较小的一个加入队首,若一组已经排完,则将另一组

2020-11-18 16:04:58 676

原创 彻底搞懂阻抗控制、导纳控制、力位混合控制

彻底搞懂阻抗控制、导纳控制、力位混合控制本人在学习的机械臂力控时,始终觉得这三个概念太过抽象,不能很好理解,读了很多博客和文献,仍然感觉没有参透,今天在读李正义博士的毕业论文《机器人与环境间力/位置控制技术研究与应用》时豁然开朗,感觉逐渐理解了一切,因此写下这篇博客,帮助和我一样的萌新们。我们为什么需要柔顺控制?普通的位置控制,即通过各种方法控制机器人末端到指定的地点,都是刚性的。这种控制是说一不二的,让机械臂向前运动1cm,就是运动1cm,没有商量的余地。这时就会产生麻烦,比如想让机器人开门:(

2020-09-13 22:18:55 37509 27

原创 ORBSLAM2学习笔记(4)——闭环

ORBSLAM2学习笔记(3)——闭环闭环本章文明分析第三个线程LoopClosing,从入口Run函数开始分析闭环检测在检测到新的关键帧插入后,便进入DetectLoop函数检测闭环.步骤如下:1.若距离上次闭环小于10帧,则直接退出。2.遍历共视帧,计算通过bow匹配的得分,找出其中的最低分。这一步是因为闭环检测到的帧的匹配程度起码要和共视帧的匹配程度相当。之后进入DetectLoopCandidates,对所有关键帧进行闭环。3.找出与当前帧相连的帧。这是因为这些帧之后将会被剔除闭环检测

2020-07-19 13:26:08 322

原创 ORBSLAM2学习笔记(3)——局部地图

ORBSLAM2学习笔记(2)——局部地图LocalMapping初始化在上一章我们完整地走完了程序的主线程,然而丝毫没有看到局部建图和闭环的身影。这两个功能的入口是在哪里呢? 回到最初的起点,在实例化system对象时,system类的构造函数有如下段落: //Initialize the Local Mapping thread and launch mpLocalMapper = new LocalMapping(mpMap, mSensor==MONOCULAR); m

2020-07-18 17:40:13 796

原创 ORBSLAM2学习笔记(2)——入口与Tracking

ORBSLAM2学习笔记(2)——入口与Tracking写在前面本笔记是按照逻辑顺序来写,也就是想到哪写到哪,就是按照学习时的思考过程来写,和其他博客中按函数和功能来分类介绍不同。这是博主个人觉得最流畅的方法。程序入口按照github上的readme,我们可以从mono_kitti这一可执行文件开始执行slam,因此,mono_euroc就是ORBSLAM的入口啦。打开mono_euroc.cc,可以看到main函数做了以下事情,首先通过 LoadImages函数加载了所有的图片,之后,通过如下命令

2020-07-16 21:58:57 454

原创 ORBSLAM2学习笔记(1)——整体框架

ORBSLAM2学习笔记(1)整体框架ORB特征原理首先,简单而笼统地概括ORB特征原理。ORB特征试由Fast关键点和rBRIEF描述子构成的。Fast关键点有一个问题,那就是不具备尺度一致性。ORB用图像金字塔的方式解决了这一问题。也就是对图像降采样,来模拟从远处看到物体的情形。比如图像里有一只猫,对它进行降采样,高和宽每两个像素点取一个,这样得到的图像高和宽都是1/2,效果和你在两倍远看猫试一样的。BRIEF描述子也有一个问题,那就是没有旋转不变性。ORB通过为FAST关键点确定方向,解决了这一问

2020-07-04 10:51:01 463

原创 cmake时提示Could not find the following Boost libraries: boost_system boost_iostreams

一个项目的用到了boost库,然而在编译时报错:CMake Error at /usr/share/cmake-3.5/Modules/FindBoost.cmake:1677 (message): Unable to find the requested Boost libraries. Boost version: 1.65.1 Boost include path: /usr/include Could not find the following Boost librarie

2020-06-29 09:22:50 4519 6

原创 ORBSLAM2 文章翻译

ORBSLAM2 一种适用于单目、双目和RGB-D相机的开源slam系统摘要本文提出了ORB-SLAM2,一种适用于单目、双目和RGB-D相机的slam系统,包含地图重用,回环检测,重定位等功能。该系统可在各种环境中运行,包括室内和室外的交通工具 。该系统的后端基于BA,可以使用公制尺度进行位置估计。该系统包括轻量级的视觉里程计追踪未建图区域,以及对地图点的匹配来实现零漂。基于29个数据集的评估说明该种方法实现了最高的准确率。作者开源该算法,不仅为了slam社区的利益,也为了开箱即用的slam解决方案的

2020-06-21 21:08:03 718

原创 基于ROS和gazebo的仿真UR5机器人零件抓取放置系统使用指南

基于ROS和gazebo的仿真UR5机器人零件抓取放置系统使用指南系统说明本系统是我本科毕设搭建的一个基于ROS和gazebo的仿真UR5机械臂零件抓取系统,众多功能并不完善,有些地方还有一些bug,因此仅供各位参考辅助使用。因为在开发过程中遇到很多坑,无谓地浪费了很多时间,而且中文资料比较少,比如Moveit的制动功能、Moveit从相机获取障碍信息避障等等,所以开源出来,希望能帮到各位初学者。再次提醒:由于毕设后期本人时间不再充裕,再加上能力有限,本项目有很多不合理和错误的地方,仅供初学者辅助和参

2020-06-10 17:30:43 5603 10

原创 ROS入门常用命令

今天总结了ROS中 常用的命令, 分享给大家。roscore 启动ROS Master,是所有节点的管理器,需要在任何节点启动前启动。rosrun [包名称] [可执行文件名称] 运行某一节点roslaunch [包名称] [launch文件名称] 运行某一launch文件。rqt_graph 查看目前运行的rqt的节...

2020-03-21 18:25:42 235

原创 slam十四讲学习笔记(一)

slam过程的基本方程:xk=f(xk−1,uk,wk)\boldsymbol{x}_{k}=f\left(\boldsymbol{x}_{k-1}, \boldsymbol{u}_{k}, \boldsymbol{w}_{k}\right)xk​=f(xk−1​,uk​,wk​) (运动方程)zk,j=h(yj,xk,vk,j)\boldsymbol{z}_{k, j}=h\left(\b...

2020-03-09 15:43:44 169

原创 moveit中move_group_interface.stop()函数不起作用

使用rviz中的motion_planning来规划机械臂运动,发送stop函数后,rviz可以接收到消息,但是并不执行停止功能,这是为什么呢?代码如下===================python========================#!/usr/bin/env python# -*- coding: utf-8 -*-import rospy, sysimport m...

2020-02-27 11:00:39 776 5

原创 胡春旭版书Moveit!学习笔记

ArbotiX和ros_control都是控制器插件,可以实现驱动。使用方法:创建yaml文件,再通过launch启动并加载参数。move_group是核心节点,为其他功能提供集成。moveit发送运动规划请求,经过一个适配器组后到达规划器,规划器发出的应答经过一个请求适配器组后又返还给moveit。适配器组的功能 试做一些处理,比如为路径添加时间,修复关节约束等。通过moveit创建好的...

2020-02-22 15:14:42 468

原创 基于ROS与moveit的机械臂零件抓取探索笔记(2)

基于ROS与moveit的机械臂零件抓取探索笔记(2)关于package的问题(1)[demo.launch] is neither a launch file in package [panda_moveit_config] nor is [panda_moveit_config] a launch file name上回书到,pick_and_place放置的零件歪歪扭扭,所以想到看看t...

2019-12-25 10:49:10 4948 4

转载 从零开始的OMPL库算法学习(4)RRT*算法

从零开始的OMPL库算法学习(4)RRT*算法简介RRT* 和RRTconnect一样,是对RRT算法的优化。RRT算法的一个问题在于,它只是找到了可行的路径,不能保证路径是相对优化的。RRT*算法在每次迭代后都会在局部更新搜索树,以优化路径。它多了两个过程,为:重新为 Xnew 选择父节点的过程, 比起RRT多了一个rewire的过程。重布线随机树的过程...

2019-12-23 10:59:27 1764 1

转载 从零开始的OMPL库算法学习(3)PRM算法

从零开始的OMPL库算法学习(2)PRM算法简介PRM(Probabilistic Roadmaps) 是一种基于图搜索的方法,一共分为两个步骤:学习阶段, 查询阶段。它将连续空间转换成离散空间,再利用A*等搜索算法在路线图上寻找路径,以提高搜索效率。这种方法能用相对少的随机采样点来找到一个解,对多数问题而言,相对少的样本足以覆盖大部分可行的空间,并且找到路径的概率为1(随着采样数增加,P(找...

2019-12-21 21:19:34 1267

转载 从零开始的OMPL库算法学习(2)RRT-connect算法

从零开始的OMPL库算法学习(2)RRT-connect算法简介RRT-connect算法是基于RRT算法的一种算法,它从起始点和终点同时生长两棵快速扩展随机树来搜索状态空间,效率会更高。其伪代码如图所示:每一次迭代中,开始步骤与原始的RRT算法一样,都是采样随机点然后进行扩展。然后扩展完第一棵树的新节点????????????????后,以这个新的目标点作为第二棵树扩展的方向。同时第二棵树扩展的方式略有不同(1...

2019-12-21 19:58:00 2896

原创 从零开始的OMPL库算法学习(1)RRT算法

从零开始的OMPL库算法学习(1)RRT算法简介RRT 算法(快速扩展随机树,rapidly exploring random tree)是一种随机性算法,它可以直接应用于非完整约束系统的规划,不需进行路径转换,所以它的算法复杂度较小,尤为适用于高维多自由度的系统。缺点是得到的路径质量不是很好。其思想是快速扩张一群像树一样的路径以探索(填充)空间的大部分区域,伺机找到可行的路径。RRT ...

2019-12-21 15:35:22 3614 1

原创 从零开始的OMPL库算法学习(0)

从零开始的OMPL库算法学习记录(0)写在开头毕设要做基于moveit的零件抓取,现在进度卡在解决place_pose_orientation的倾斜问题,所以开始学习moveit下的ompl库。希望能坚持下去,并分享给大家。本学习记录只关注算法原理,不关注程序实现。OMPLompl(The Open Motion Planning Library)的全称是开源运动规划库,基于采样方法,包含...

2019-12-21 11:17:57 2437 1

原创 基于ROS与moveit的机械臂零件抓取探索笔记(1)

基于ROS与moveit的机械臂零件抓取探索笔记(1)四元数与欧拉角的转变欧拉角四元数程序上的修改四元数与欧拉角的转变在pick_and_place程序中遇到了一个问题,执行place任务时物块的方向总是不对,所以怀疑是orientation出了问题。在moveit中orientation试用四元数表示的,因此借此机会学习四元数。欧拉角Z轴(航偏角,yaw,Ψ)Y轴(俯仰角,pitch,...

2019-12-18 20:25:47 2198 1

空空如也

空空如也

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

TA关注的人

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