【笔记工具】Markdown语法与Obsidian编辑器
介绍一种我自己一直在用的非常强大的笔记语法Markdown,以及基于markdown语法的编辑器Obsidian.
113 篇
介绍一种我自己一直在用的非常强大的笔记语法Markdown,以及基于markdown语法的编辑器Obsidian.
基于强化学习的机器人动作模仿方法论文调研与笔记。
调研近三年顶会顶刊上的抓取姿态估计的论文
在深度学习训练过程中,我们必定会需要观察系统的Loss、Learning_rate等参数的变化,因此实时绘制曲线图是十分有必要的。本文就介绍了如何利用Pytorch的TensorBoard绘制曲线图。
统计学习方法的学习笔记
环境配置有时非常麻烦,而且有很多程序的依赖环境会和本地环境冲突,为了避免这些情况,docker就是一个比较好的解决方案。
由于跑一些项目的时候,由于时代问题,有些程序是使用opencv2写的,现在大家普遍都安装的opencv4,由于项目代码繁多,修改源码过于麻烦,因此考虑多版本opencv共存安装。
近邻算法,假设给定了一个训练数据集,其中实例类别已定。分类时,对新的实例,根据其k个最近邻的训练实例的类别, 通过多数表决等方式进行预测。因此,k近邻法不具有显式的学习过程。
感知机是二类分类的线性分类模型,输入为实例的特征向量,输出为实例的类别,旨在求出将训练数据进行线性划分的分离超平面。
统计学习是关于计算机基于数据构建概率统计模型,并运用模型对数据进行预测与分析的一门学科。本文是对李航老师的《统计学习方法》一书学习笔记。
FFB6D相当于在特征提取阶段就将RGB和点云信息进行了融合,然后进行实例分割和关键点检测。
本文提出了一种异形架构,对两个数据源(RGB和深度图)进行分别处理,并用一种新型的dense fusion network提取像素级稠密特征,从中估计姿态。
尝试测试PVNet,中途放弃。
解决物体之间的遮挡和聚集增加的6D位姿估计的难度,通过主干网络加ICP点配对的方式实现位姿估计。
对机器人的软件开发的离不开ROS,可操作界面离不开Qt,本文介绍在Qt中调用ROS库的方法。
介绍了Qt中的模态/非模态对话框,以及标准对话框。
介绍了QMainWindow相关的实现方法,包括菜单栏、工具栏、状态栏、铆接部件、中心部件等。
介绍了QT的基础,并给出了QT第一个程序的创建过程(空窗口与按钮)。介绍了信号和槽的概念与最简单的按下按钮关闭窗口功能的实现。
信号与槽是QT中最重要的概念之一,信号与槽可以实现发送端和接收端的信号传输,是qt各种操作的基础。
目标检测的基本实现方法,从目标定位开始,总结了特征点检测、目标检测、滑动窗口法、NMS非极大抑制等目标检测的算法。
本文介绍了一些经典的神经网络模型,包括实现LeNet-5,AlexNet,VGG-16,ResNet,Inception网络等的网络结构。
为什么神经网络对图片进行分析时经常使用卷积,为什么会有padding和stride,池化层和全连接层的作用是什么?
介绍了神经网络中一些常用参数的选择原则和大概范围,以及BN和softmax的基本原理。
LineMod算法是Hinterstoisser等人在2011年提出的,通过采用模板匹配的方法,解决了杂乱场景下少纹理三维物体的实时监测与6D位姿估计定位问题。
本文介绍了最常用的几种优化算法,从划分子集mini-batch开始,介绍了动量梯度下降法Momentum,RMSprop,以及两者的结合体Adam,几种方法的实现方法和基本原理。
解释时间复杂度如O(n)的概念,以及相关时间复杂度的计算方法。
改善神经网络的训练效果有很多方面,比如避免欠拟合和过拟合,利用正则化等等。不同的方法其作用效果也不同。
深度学习的线性回归,基本的优化算法,以及Softmax回归和损失函数的实现。
介绍了使用pytorch和pandas实现基本数据的操作方法,以及使用torch进行基本线性代数运算、求导计算的方法。
记录一次ubuntu安装后的配置过程,这些天装了双系统,在树莓派上也鼓捣过,总结如下。
Python具有非常丰富有用的内建模块和第三方模块,可以快速方便的实现很多常用功能。
本文总结了python读写文件的基本操作,以及常用的os对目录和文件的常用操作,如路径获取、路径拼接、文件重命名、文件移动等。总结了常用的JSON。
在程序运行过程中,总会遇到各种各样的错误。有的错误是程序编写有问题造成的,有的错误是用户输入造成的,还有的错误是完全无法在程序运行过程中预测的,Python内置了一套异常处理机制,来帮助我们进行错误处理。
总结了类的基本使用方法;封装、继承、多态的特点与应用实例;以及面向继承的高级特性如多重继承、定制类等概念。
在python中代码越少越好,越简单越好。基于这一思想,python中设计了许多非常有用的高级特性,如列表生成式,生成器,匿名函数,装饰器等。
三维重建是用相机拍摄真实世界的物体、场景,通过计算机视觉技术进行处理,从而得到物体的三维模型。主要涉及技术包括:多视图立体几何、深度图估计、点云处理、网格重建和优化、纹理贴图、马尔可夫随机场、图像分割等。
笔者从零开始学习深度学习的笔记,本章介绍深度学习最最底层的数学思路,以及基于回归的简单的深度学习的算法思路和相关代码。
总结了一些新手会在入门深度学习过程中遇到的不理解的概念。
一般channels的含义是,每个卷积层中卷积核的数量。最初输入的图片样本的channels,取决于图片类型,比如RGB;卷积操作完成后输出的out_channels,取决于卷积核的数量。此时的out_channels也会作为下一次卷积时的卷积核的in_channels。
卷积操作其实就是每次取一个特定大小的矩阵,然后将其对输入矩阵依次扫描并进行内积的运算过程。
关于使用Numpy进行一些数组操作的函数方法记录与部分例程,包括数组的创建、切片索引、数组的基本操作(转置、连接、排序、展开等),以及数组运算的一些基本函数的使用方法。
我们想要在电脑上安装许多不同版本的python,或者想要让python环境中只存在用到的包方便对程序打包发布,这些情况都需要我们创建python虚拟环境,Anaconda就是一个这样管理python环境的工具。
g2o(General Graphic Optimization)是一个基于图优化的库,将非线性优化与图论结合起来的理论,我们可以利用g2o求解任何可以表示为图优化的最小二乘问题。
Ceres是一个最小二乘问题求解库,我们只需要定义待优化的问题,然后交给它计算即可。使用方法:1. 定义每个参数块。参数块就是简单的向量,也可以是四元数、李代数等特殊的结构……
首先介绍了针孔相机的成像原理以及实际坐标和像素坐标的转换方法。然后根据实际相机存在的一些问题,引入了畸变模型,并给出了去畸变的公式方法以及详细示例程序。
首先需要到opencv的github网站上下载`opencv/samples/dnn/face_detector/`中所有的文件,并覆盖到本地的目录中。然后用记事本打开weights.meta4文件,下载其中两个url对应的文件。
均值滤波用到的是图像卷积原理。由下图所示,卷积核为三阶单位矩阵时,进行均值滤波,原图像的每个三阶子矩阵都会求其均值,并将均值赋给中间的元素。
图像直方图是图像像素值的统计学特征、计算代价较小,具有图像平移、旋转、缩放不变性等众多优点,广泛地应用于图像处理的各个领域,特别是灰度图像的阈值分割、基于颜色的图像检索以及图像分类、反向投影跟踪。常见的分为灰度直方图和颜色直方图。
在图像处理中,读取视频并进行处理是必不可少的操作,在OpenCV中,读取摄像头的视频所用到的主要函数为 capture()。本文介绍了使用OpenCV读取摄像头视频的方法,以及对摄像头视频进行存储操作的函数实现过程以及具体的解释。
常见的图像变换方法包括图像的放缩、图像的翻转、图像的旋转等。在OpenCV中,这些图像变换操作都有着其对应的函数。通过对函数定义的解释以及具体例子,介绍各种图像变换的方法。
归一化就是要把需要处理的数据经过处理后(通过某种算法)限制在一定范围的之内。为了后面数据处理的方便,其次是保证程序运行时收敛加快。
主要介绍了OpenCV中键盘和鼠标的响应方法,其中用到的各种函数,以及函数各个参数的解释。利用鼠标和键盘的响应编写了一些有趣的小程序。
C和C++中提供了rand() 和srand()函数用于产生随机数,使用C++编写OpenCV代码时也可以使用。同时OpenCV自身也提供了生成随机数的类RNG,使用起来也十分方便,本文主要介绍RNG的使用方法,以及基于RNG生成的随机数,绘制随机线条的方法。
本文介绍了使用C++与OpenCV4完成矩形、圆形、直线、椭圆的绘制方法,重点总结了OpenCV内置函数(如rectangle()、circle()、line()、ellipse())的定义以及各参数的作用,并给出了示例程序作为参考。此外本文还总结了多边形的绘制方法,包括多边形边框的绘制函数polylines()、多边形填充函数fillPoly()、绘制多个多边形的函数drawContours()等。
绿幕图像的背景替换需要经历①色彩空间转换、②提取绿幕区域、③反转绿幕区域、④复制图像,其中遇到的各种函数和代码也都在本文有详细介绍。
图像通道的分离后输出的多通道序列一般使用 std::vector mv; 来存储,mv[0]、mv[1]、mv[2]、分别对应BGR三个通道。但是现在显示的相当于是三张单通道的图像,也就相当于三张灰度图像。要想让三张图像恢复直观意义上的色彩,就需要使用下面通道合并的方法了。
OpenCV中使用 createTrackbar() 来创建滚动条,函数的使用方法如下,各个参数的作用也在下面的表格中给出。
图像的像素操作包括读写操作、算数操作、逻辑运算操作等。像素的操作方式不仅多样,对于灰度图的操作和对彩色图的操作也有各自的特点。对像素点的操作可以使我们访问图像的每一个像素点,实现许多意想不到的功能。
色彩空间转换函数:cvtColor。GRAY:指灰度,只有一个参数灰度值Channel。BGR:指BGR颜色空间,以红绿蓝三基色(0~255)为基础,叠加形成各种颜色。HSV:指六角椎体模型,色调Hue用角度度量(0~180),饱和度Saturation(0 ~ 255),亮度Value(0 ~ 255)。
首先下载并解压OpenCV。建议到opencv的官网下载windows版本的安装包。如果觉得下载速度过慢,我也把opencv4.5.2安装包上传了阿里云https://www.aliyundrive.com/s/VGkaM7vyuck 注意解压的路径,一定要是一个英文路径
Eigen是一个C++开源的线性代数库,提供了快速的矩阵线性代数运算,解方程等功能。许多上层软件库也使用Eigen进行矩阵运算。Eigen是一个纯用头文件搭建起来的库,因此使用的时候,只需要引用它的头文件即可,不需要链接库文件。
两个坐标系之间的旋转、平移关系,统称为坐标系之间的变换关系。机器人运动过程中,往往会设定一个惯性坐标系(即世界坐标系),可以认为它是固定不动的。机器人则是一个移动坐标系。
对于一个移动机器人来说,我们往往需要它知道两件事,我在什么地方(定位),周围环境是什么样(建图)。
某个元素可以自由的在一个盒子内移动位置,并且压住其他盒子。当滚动窗口时,某些模块是固定在屏幕中的某个位置。以上两个效果通过标准流和浮动都无法快速实现,此时需要定位来实现。
Emmet语法的前身是Zen coding,它使用缩写来提高html/css的编写速度,vscode内部已经集成该语法
CSS提供了三种传统布局方式:普通流(标准流)、浮动、定位。三种布局方式都是用来摆放盒子的,盒子摆放到合适的位置,布局自然就完成了。实际开发中,一个页面基本都包含了这三种布局方式(移动端有新的布局方式)
网页布局学习有三大核心,盒子模型,浮动和定位,学习盒子模型可以帮助我们很好的布局页面。网页布局过程:先准备好相关的网页元素,利用CSS设置盒子样式,然后摆放到相应位置,往盒子里面装内容。
CSS中根据选择器的类型把选择器分为基础选择器和复合选择器,复合选择器是建立在基础选择器之上,对基本选择器进行组合而成的。通过CSS背景属性可以为页面内元素添加背景样式背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等。
CSS的主要使用目的就是美化网页,布局页面。只用HTML时,网页显示效果很不好看。CSS也是一种标记语言,主要用于设置HTML页面中的文本内容(字体、大小、对齐方式等)、图片的外形(宽高、边框样式、边距等)以及版面的布局和外观显示样式。
HTML是用来描述网页的一种语言。HTML指超文本标记语言。HTML不是编程语言,是一种标记语言。HTML标题、段落、链接、图像的使用方法。元素、属性、格式化;链接、样式、表格;列表、块、布局、表单的创建方法。
程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放。通过文件可以将数据持久化,C++中对文件操作需要包含头文件#include。
继承是面向对象的三大特性之一。定义类时,下级别的成员除了拥有上一级的共性,还有自己的特性。
运算符重载的目的是对已有的运算符重新定义,赋予其另一种功能,以适应不同的数据类型。包括加号、左移、递增、赋值、关系、函数调用等运算符重载。
有些私有属性,可需要让类外特殊的一些函数或类进行访问,就需要利用友元。友元的关键字为fiend。友元的三种实现方法全局函数做友元、类做友元、成员函数做友元。
C++中,类内的成员变量和成员函数分开存储,只有非静态成员变量才属于类的对象。每一个非静态成员函数只会产生一份函数实例,也就是多个同类型的对象会共用一块代码,而代码如何区分哪个对象调用自己。这里就用到了this指针。
每个对象需要有初始设置以及对象销毁前的清理数据的设置。对象的初始化和清理是两个非常重要的安全问题。一个对象或变量没有初始状态,对其使用后果未知;使用完一个对象或变量,没有及时清理,也会造成一定的安全问题。
封装的意义将属性和行为作为一个整体,表现生活中的事物;将属性和行为加以权限控制。设计类时,属性和行为写在一起,表现事物,语法规范如下
在C++中,函数的形参列表中的形参是可以有默认值的。如果给形参传入了数据,就用自己的数据;如果没有,就用默认值,但需要注意如果某个位置已经有了默认参数,那么从这个位置往后,必须都有默认值。
Rviz是一款三维可视化工具,可以很好的兼容基域ROS软件框架的机器人平台。Rviz可以通过图形化的方式显示机器人传感器信息、机器人运动状态、环境信息等。
laubch文件的作用如下,通过XML文件实现多节点的配置和启动。同时可以自动启动ROS Master(不需要单独roscore)。
TF功能包用来管理所有的坐标系。它可以记录十秒钟之内所有坐标系之间的关系,可以展示夹取的物体相对于机器人中心坐标系的位置在哪里。
Client每Request一次数据请求,Server发送一次数据。数据格式为个人信息,如姓名、性别等。
在ROS Master中有一个Parameter Server参数服务器,它是一个全局字典,用来保存各种配置参数,配置参数是各个节点都可以全局访问的。
通过程序,发布服务请求。即通过客户端的请求,发给服务端产生一个海龟,反馈回客户端。回到catkin_ws/src文件夹下,创建一个名为learning_service的功能包。
Server端等待信号,每次接收到Client端的信号,海龟的运动状态就切换一次(运动→停止、停止→运动)。
在ROS Master中,可以发布与订阅已经定义好的消息,比如海龟的运动、位姿等信息。但有时我们需要自己定义消息的类型。本节主要目的为定义一个Person个人信息,Publisher发布个人信息,Subscriber订阅个人信息。
ROS Master内有两个节点,一个是Subscriber(turtlesim),一个是Publisher,发布者通过程序实现发布Message,Message的内容包括线速度、角度,通过Topic管道,传递给Subscriber,从而控制小海龟的运动。
在ROS_Master中,可以发布与订阅消息,ROS_Master内有两个节点,一个是Subscriber(turtlesim),一个是Publisher,发布者通过程序实现发布Message,Message的内容包括线速度、角度,通过Topic管道,传递给Subscriber,从而控制小海龟的运动。
工作空间是存放工程开发相关文件的文件夹,类似windows中使用ide时创建的工程。工作空间包含的文件夹包括……
roscore是用来启动ros master,是运行ros系统前首先运行的命令;rosrun是用来运行某个功能包内的某个节点的指令,有两个参数,第一个参数是功能包名,第二个参数是节点名。
当程序比较复杂,或者程序内存在重复的部分时,模块化程序设计往往是比较可行的办法。在RobotStudio中可以通过在主程序中调用不同的例行程序,达到使代码逻辑清晰的目的。
Offs指令可根据当前所选工件坐标以及基准点进行坐标偏移。点击要偏移的robtarget数据,选择功能-Offs即可进行坐标偏移设置。
在手动模式下,最大速度受到限制,最大时250mm/s。而程序中v1000在仿真和实际中是十分快的,需要设置机器人的运动速度,并且设置延时时间。
在目标工作台的任意位置,任意角度创建一个直角坐标系,把这个坐标系叫做工件坐标。在不同的位置创建工件坐标系,就可以实现,相同的程序在不同的位置实现相同的加工。
从夹爪夹住工件后,系统的载荷就发生了变化,对于仿真程序中效果区别可能不明显,但在实际系统中,必须要考虑载荷的区别。
MoveJ的作用是移动到某位置。Set/Reset用于控制外部设备。在初始位置添加一句MoveJ指令,将机器人爪调至工件的正上方,再添加一条MoveJ指令(在工件上方添加一个位置点,是为了防止机器人直接夹取,可能会从侧面撞到工件)。
拆除夹爪,测量夹爪末端坐标。点击建模-测量-点到点,选择夹爪底面和末端面,记录得到的z坐标值。将夹爪安装回机器人末端。打开虚拟示教器,进入手动操纵-工具坐标-新建,修改名称,点击左下角初始值。修改第一个z(坐标位置)为刚才测得得值215.30,mass(质量)为1,第二个z(重心位置)初估一个数。验证坐标,选择动作模式为重定位,工具坐标为刚才新建坐标。操纵摇杆可看到机器人绕夹爪两末端中心点转动。
打开一个机器人系统,打开虚拟示教器。点击菜单-手动操纵-动作模式,可以看到下方有四个动作模型,其中轴1-3和轴4-6为单轴操作,后面是线性操作,和重定位操作,这里选择轴1-3,点击确定,可以看到在手动操作界面右方有机器人的位置信息和操纵杆方向。
打开主菜单-程序 可以看到最上面一行是程序名称,其中T_ROB1是任务,有几个机械单元就有几个任务可以选择。第二层是模块,分成系统模块和程序模块。模块就是将机器人需要实现的各个功能分成不同模块。可以理解成文件夹。第三层是例行程序,是机器人系统真正执行的一些程序。
将安装包解压,运行安装包内的setup.exe程序,按照提示安装即可,比较简单。安装完成后双击RobotStudio_5.61.02注册补丁.reg。打开RobotStudio即可完成安装。
在WordPress中,内容主要分成两个部分:文章和页面。WordPress插件可以实现为wordpress站点增加、修改、删除功能。媒体库是主要用来管理你使用wordpress上传的附件的,比如图片、视频等其他文件。
条件结构类似C语言中的if…else…和switch结构,主要用于分支选择程序逻辑。条件结构包括两个及以上子程序框图或分支。每次仅执行一个条件分支。右键单击条件结构边框添加、复制、删除、重排及选择默认分支。可创建多个输入/输出隧道。
处理一系列相似的数据和执行重复计算操作时,可考虑使用数组。数据将相同类型的数据元素归为一组。在前面板放置一个数组的外框,拖放一个数据对象或元素至外框内即可创建数组。数组函数包括数组大小、索引数组、创建数组、数组最大值最小值、排序、拆分数组等操作均可以通过数组函数实现。
属性节点可用于访问对象的属性。当某些应用中可能需要通过编程改变前面板对象外观,以响应特定输入时,通过编辑属性节点进行设置。在程序框图的控件上右键,创建属性节点。需要设置多个属性时可以在边框上下拖动添加属性,属性节点按照由上而下的顺序执行。
变量的作用:在并行循环间传递数据。移位寄存器可以将前一循环产生的数据传递至下一循环,右键单击循环边框,添加移位寄存器,右侧的移位寄存器存储每次循环结束后的数据,左侧的移位寄存器为下一循环提供所存储的数据。
while循环至少执行一次,for循环可以执行0次,while循环自动输出最后一次执行的值,for循环自动输出一个数组。可以右键单击while循环的边框,在右键菜单中将while循环转换为for循环。
输出正弦波信号,频率0-50M;采样率10M、50M、100M可选;检测信号频率;输出采样信号的功率谱,如果频率或采样率发生变化,重新开始平均过程
在LabView中,动态数据类型表示为深蓝色,只有Express VI才能产生和接收ExpressVI。使用获取动态数据ExpressVI获取动态数据的属性,使用设置动态数据属性ExpressVI设置动态数据的属性,如信号名、时间标识、时间模式等。
数值型控件可表示不同类型的数值。布尔型控件最关键的就是机械动作的选择。字符型控件可以通过快捷菜单更改显示类型。右键单击枚举或下拉列表控件,并从快捷菜单中选择编辑项,或者在属性对话框中点击编辑项的选项卡,即可向控件的下拉列表中添加内容,并更改项的顺序
放置Express VI至程序框图,然后配置弹出的对话框,连线Express VI,保存并运行VI。
控件来源于控件选板,右键可以打开控件选板,控件可以点击后添加到前面板,也可以通过拖拽添加控件。程序框图由接线端(前面板)、子VI、函数、常量、结构、连线等组成。
数字化方法基础_常用函数1.叉乘2.单位化矢量3.矩阵乘法4.矩阵乘法。
使用OpenGL完成各种基础操作,包括生成四面体,导入本地模型,模型的矩阵操作等等,以便于对数字方法有更好的理解。