
🔥人工智能
笔记和资料,涉及到深度学习、自动驾驶等领域。
🔥机器人
包括ROS机器人框架笔记。Beginer Friendly

✅Python教程
从0到1,在深入人工智能的全套Python笔记。

❤️经验经历
过往的感悟和思考。发病日记。

✨碎片技术
学习工作中遇到的很赞的技术碎片,整理好了。

✨学习积累
相对于碎片技术的,已经沉淀为自己的资本的内容。
【Linux】Source 命令解释
source filename 与 sh filename 及./filename执行脚本的区别:
当shell脚本具有可执行权限时,用sh filename与./filename执行脚本是没有区别得。./filename是因为当前目录没有在PATH中,所有”.”是用来表示当前目录的。
sh filename 重新建立一个子shell,在子shell中执行脚本里面的语句,该子shell继承父shell的环境变量,但子shell新建的、改变的变量不会被带回父shell,除非使用export。
source filename:这个命令其实只是简单地读取脚本里面的语句依次在当前shell里面执行,没有建立新的子shell。那么脚本里面所有新建、改变变量的语句都会保存在当前shell里面。
注:常用的bash属于shell的一种,其他的还包括zsh和byobu。
【JavaScript】 进阶教程 施工中~
一、原型与原先链原型(prototype)1、函数的prototype属性每个函数都有一个prototype属性。它默认指向一个Object空对象(即成为:原型对象)
原型对象中有一个属性constructor,它指向函数对象
2、给原型对象添加属性(一般都是方法)作用:函数的所有实例对象自动拥有原型中的属性(方法)
123456789101112131415161718// 每个函数都有一个prototype属性。它默认指向一个Object空对象(即成为:原型对象)console.log(Date.prototype, typeof Date.prototype);function fun(){ }console.log(fun.prototype);// 默认指向一个object空对象(没有我们定义的属性)// 原型对象中有一个属性constructor,它指向函数对象console.log(Date.prototype.constructor === Date); // trueconsole.log(fun.prototype.constructor ...
【人工智能】面试问题整理
机器学习部分一、特征工程1. 特征归一化1)什么是特征归一化对数值类型的特征做归一化可以将所有的特征都统一到一个大致相同的数值区间内。
2)为什么要特征归一化为了消除数据特征之间的量纲影响,我们需要对特征进行归一化处理,使得不同指标之间具有可比性。例如,分析一个人的身高和体重对健康的影响,如果使用米(m)和千克(kg)作为单位,那么身高特征会在1.6~1.8m的数值范围内,体重特征会在50~100kg的范围内,分析出来的结果显然会倾向于数值差别比较大的体重特征。想要得到更为准确的结果,就需要进行特征归一化(Normalization)处理,使各指标处于同一数值量级,以便进行分析。
3)特征归一化常用的方法
线性函数归一化(Min-Max Scaling)。它对原始数据进行线性变换,使结果映射到[0,1]的范围,实现对原始数据的等比缩放。
零均值归一化(Z-Score Normalization)。它会将原始数据映射到均值为0、标准差为1的分布上。
4)归一化处理适用模型
应用归一化的模型。在实际应用中,通过梯度下降法求解的模型通常是需要归一化的,包括线性回归、逻辑回归、支持向量机、神 ...
【人工智能】技术总结
一、机器学习1. 基本概念1)机器学习的分类
有监督学习、无监督学习、半监督学习
有监督学习:数据做标注,模型同时接受输入+输出,主要包括回归、分类问题
无监督学习:数据不做标注,模型只接收输入,主要包括聚类
半监督学习:有监督、无监督学习结合
基于模型的学习、基于实例的学习
批量学习、增量学习
2)机器学习的基本问题
回归问题:预测结果是连续的
分类问题:预测结果是离散的
聚类问题:无监督学习,根据样本的相似程度,将相似度高的划分到同一个聚簇中
降维问题:缩小数据的维度、规模
3)机器学习的一般过程
数据收集 → 数据清洗 → 选择模型 → 训练 → 评估 → 测试 → 应用及维护
2. 数据预处理1)标准化:将样本处理为每列均值为0、标准差为1
2)范围缩放:将每列最小值转换为0,最大值转换为1
3)归一化:将数据转换为0~1之间的百分比(按行)
4)二值化:将数据转换为0/1两个值
5)独热编码:将数据转换为一个1和一串0
6)标签编码:字符串转换为数字
3. 回归问题1)线性回归
线性模型:$y = w^T x + b$
线性回归:利用线 ...
【机器人】开发系统镜像制作指南
授之以鱼不如授之以渔
注意:以下的操作均在虚拟机上完成。虚拟机可以使用免费的Virtual Box或者相对高级的VMare。
构建系统镜像使用Ubuntu Server
安装GUI桌面
1234567sudo apt updatesudo apt upgradesudo add-apt-repository universesudo add-apt-repository multiversesudo apt install taskselsudo taskselreboot
软件列表系统必备
apt-fast:替换apt或者apt-get指令,提供高效的多线程并行下载。
ROS软件
ROS1:虽然官方教程中提到,可以更换ROS的国内镜像源,但是因为之后需要使用github的验证,所以就算是换了国内的,还是需要能上github才行。这里还是建议科学上网。
ROS2:一定要确认每一次的安装指令无报错。
测试安装ROS1
1234567# rosrunrosmasterrosrun rospy_tutorials talkerrosrun rospy_tutorials list ...
【机器人】ROS1工程案例:服务和动作
我们这一部分模拟一个低能的阶乘计算器,来比较Service和Action的差异。
碎碎念:Hello米娜桑,这里是英国留学中的杨丝儿。我的博客技术点集中在机器人、人工智能可解释性、数学、物理等等,感兴趣地点个关注吧,持续高质量输出中。唠嗑QQ群:兔叽的魔术工房 (942848525)B站账号:杨丝儿今天也在科学修仙(UP主跨站求个关注)
本系列用时9天,博主也是从零开始,尽力去写的,如果发现了错误一定要私信告诉我呀。这么努力的博主,关注一下吧。
:star:案例目标说明以下问题
ROS中message,action,service的定义方式大同小异。
在消息作为一等公民的ROS软件中,灵活使用面向对象思想。
文件的命名问题,很多文件的命名是很有讲究的,节点名也是。
ROS使用大量多线程并行的思想,需要理解并行与并发、python的主锁以及阻塞和上锁的区别。
:star:准备工作
基础步骤参见:【机器人】ROS程序框架:架构部分
创建factorial_calculator包
:star:服务部分:sparkles:定义文件创建一个名为FactorialService ...
【机器人】ROS1程序中的服务Service:精简解析
基础部分参见:【机器人】ROS程序框架:架构部分
本系列用时8天,博主也是从零开始,尽力去写的,如果发现了错误一定要私信告诉我呀。这么努力的博主,关注一下吧。
作者:杨丝儿座右铭:始于兴趣,源于热爱,成于投入。介绍:爱丁堡大学 人工智能专业。技术兴趣点集中在机器人、人工智能可解释性、数学、物理等等。聊天吹水QQ群:兔叽的魔术工房 (942848525)个人博客:discover304.top个人B站账号:杨丝儿今天也在科学修仙(UP主跨站求个三连加关注)
在ROS中有三个主要的通信方式:话题、服务和动作。我们之前已经完成话题的学习,并且参考工程案例(【机器人】ROS工程案例:基础部分)完成了最简单的ROS程序。
接下来,我们对服务和动作相关的知识点进行整理,包括提出契机,定义方法及其流程,执行方法。
关于代码以及使用部分,参见:【机器人】ROS工程案例:服务和动作。通信方法间的对比,参见:【机器人】ROS消息机制横向对比,到底该如何进行选择?
:star:服务有人说:服务调用非常适合只需要偶尔去做并且会在有限时间完成的事情。确实运行服务的场景是这样的,但是这是表象,服务的价值 ...
【机器人】ROS1程序运行指北:启动、重命名、launch
本案例采用ROS1提供的示例,程序进行演示。
本系列用时7天,博主也是从零开始,尽力去写的,如果发现了错误一定要私信告诉我呀。这么努力的博主,关注一下吧。
作者:杨丝儿座右铭:始于兴趣,源于热爱,成于投入。介绍:爱丁堡大学 人工智能专业。技术兴趣点集中在机器人、人工智能可解释性、数学、物理等等。聊天吹水QQ群:兔叽的魔术工房 (942848525)个人博客:discover304.top个人B站账号:杨丝儿今天也在科学修仙(UP主跨站求个三连加关注)
:star:运行方法
执行$roscore来启动roscore
包下执行运行:$rosrun <包名> <包内可执行程序/python脚本> [<其他参数>]
:star:重命名
本来我以为重命名是个多么困难的任务,实践之后发现,这是个超级简单的小技巧。
一个机器人总会有很多重复的组件,像是两条手臂或者两对轮子,亦或是前后左右四个摄像头。我们可以采用重命名的方式对每一个组件上运行的程序进行整理,便于软件的开发和管理。
ROS中的重命名有三种,修改命名空间、修改节点名、修改主题/消 ...
【机器人】ROS1工程案例:自定义消息类型
本案例在之前的基础上进行扩展,传递一个自定义的复数类消息。
本系列用时7天,博主也是从零开始,尽力去写的,如果发现了错误一定要私信告诉我呀。这么努力的博主,关注一下吧。
作者:杨丝儿座右铭:始于兴趣,源于热爱,成于投入。介绍:爱丁堡大学 人工智能专业。技术兴趣点集中在机器人、人工智能可解释性、数学、物理等等。聊天吹水QQ群:兔叽的魔术工房 (942848525)个人博客:discover304.top个人B站账号:杨丝儿今天也在科学修仙(UP主跨站求个三连加关注)
:sparkles:注意
本文只提供在Linux平台上的代码演示和最基本的注释,不进行逻辑的解释。
相关解释以及需要用到的基础知识参见:【机器人】ROS程序框架:架构部分
本案例的前置任务包括环境搭建,工作区创建,基本软件(消息传递communicate_bot)代码,参见:【机器人】ROS1工程案例:基础部分
:sparkles:定义消息我们设计一个传递复数类型,复数类。
在包下新建msg文件夹,并在文件夹内新建Complex.msg文件
12mkdir msgtouch Complex.msg
编辑Comp ...
【机器人】ROS1工程案例:基础部分
手把手教你搭建一个传递数字消息的机器人程序。
:sparkles:注意本文只提供在Linux平台上的代码演示和最基本的注释,不进行逻辑的解释。
相关解释以及需要用到的基础知识参见:【机器人】ROS程序框架:架构部分
:sparkles:安装ROS1环境需要用到的技术以及流程参见:【机器人】开发系统镜像制作指南
:sparkles:搭建环境12345cd ~/Desktop# 在桌面上新建工作区,方便观看过程mkdir -p rob_dev_ws/srccd rob_dev_ws/srccatkin_init_workspace
:sparkles:创建包在src路径下执行
12# 这里使用python,所以我们依赖 rospycatkin_create_pkg communicate_bot rospy
:sparkles:开始编程包内src路径下放置我们的代码。
首先是发送端,文件名叫做:topic_publisher.py
1234567891011121314151617181920212223242526#!/usr/bin/env python3import r ...
【机器人】ROS1程序框架:架构部分
描述
ROS是一个开发机器人软件的框架,软件被设计成许多互相之间高速传递信息的小程序。
ROS是一个介于典型客户端/服务器系统和完全分布式系统之间,因为有一个处于中央角色的roscore在为点对点信息服务提供命名服务。
ROS节点交换信息的渠道叫做话题(topic),一个定义了类型的消息流。
ROS对大量的底层实现进行了封装,很多网络编程中常见的概念在这里被封装成了高级接口。
ROS图中的节点表示的是独立运行的程序,而图中的边表示数据流。这些数据可以是传感器的数据、执行器的命令、规划器的状态等信息。
辅助工具
介绍:catkin是ROS的构建系统:ROS用于可执行程序、库、脚本和其他代码可以用的接口的一系列工具。
技巧:使用rqt_graph可以清晰看到当前启动节点的ROS图。
技巧:使用rostopic检查当前系统状态。相关帮助使用$rostopic -h进行查看
技巧:可以使用rosmsg来查看是否有已经满足你的需求的类型
软件结构ROS以包括代码、数据和文档在内的包的形式进行管理。
核心结构graph BT
roscore(roscore)
nod ...
【自动驾驶】技术笔记:模拟器专题
如何在无人驾驶的各个模块高速迭代的同时保持整体系统的能够完全应对当前的环境场景?模拟器(又称仿真器)就是为了解决这一问题而诞生的。
模拟器的必要性随着车辆及测试场景的增多,我们得到的一个实际经验是:“No Simulation, No Scalability”(没有模拟仿真,就没有可扩展性)。
模拟器的优势:
极大地提高开发效率
测试和验证极端场景
最大化发挥沉淀数据的作用
孵化人工智能和场景驱动的重要先决条件
模拟器平台将以两种方式处理每个模块的输出数据,一种是进行多方位多角度的显示,便于开发人员对模块的输出结果进行校验和调试。另一种是基于某种评价标准,自动对输出数据进行评判和打分,并且将评判和打分的结果以详细数据报告的形式呈现。
对模拟器系统的要求数据信息在车与外部环境的相互作用中产生了一个闭环。无人车的仿真系统就是寻求在软件环境中重塑这样的一个数据闭环,以测试车上的主要软件算法模块。
模拟器系统有一个比较好的前端,从而更好地与后期的云端大规模模拟兼容。
模拟器后端由四个部分组成:模块调度(调度引擎根据输入数据时序,调用各个软件模块,生成输出的数据包)、打分系统(根据数据 ...
【自动驾驶】技术笔记:ROS系统
要求
软硬件模块数据增加,运行期间难免有些模块会出现异常退出,或者导致系统崩溃。如何为系统提供自我修复能力?
模块之间有很强的联系,如何管理模块间的有效通信?对于关键模块间的通信,信息不可丢失,不可有过大的延时。
每个功能模块间如何进行资源的隔离,如何分配计算与内存资源,当资源不足时如何确认更高的优先级执行?
边缘计算(用户端系统)ROS介绍注意:ROS并不是真正意义上的操作系统,只能算是中间件。
ROS具有很强的代码可复用性和硬件抽象性能,采用分布式架构,通过各功能独立的节点实现消息传递任务的分层次运行,从而减轻实时计算的压力。同时ROS为常用的机器人和传感器提供了硬件驱动接口。
ROS 本身是基于消息机制的,这样的做法使得开发者可以根据软件的功能把软件拆分成各个模块。ROS底层会识别某一个消息的使用者,然后把消息数据分发给他们。
节点:实现运算功能的进程,ROS机器人仿真架构由功能独立的节点组成。
节点管理器:Master 主要用来管理节点,每个节点都需要通过节点管理器实现节点名字的注册,节点之间相互查找也需要在节点管理器内进行。
参数服务器:Parameter Server ...
【自动驾驶】技术笔记:传感器专题
基础设备GPS
使用三角测量法的定位原理,需要3个及以上的卫星位置数据。
GPS精准定位的条件很苛刻,需要精准的时间戳,以及比较空旷的环境。
复杂的城市环境会造成信号的反射与折射,产生多路径问题。同时GPS的更新频率低,不足以满足自动驾驶的需要。
为了提高GPS的准确度,我们引入了差分GPS技术,对误差进行一个修正。
IMU
检测和测量加速度与旋转运动的传感器。
常用的MEMS(Micro Electro-Mechanical Systems)的六轴惯性传感器,使用三个加速度传感器和是三个陀螺仪构成。
无人车上采用的一般是中低级的MEMS,频率高,误差会随着时间累加,所以只可以在很短的时间内依赖惯性传感器进行定位。
因为制作工艺的问题,IMU的测量会有一定的误差。主要是三种:偏移误差(零偏移)、比例误差(输入输出比)和背景白噪声。
LiDAR
激光雷达,准确率很高,计算难度相较于图像要低,作为无人车设计中的主传感器使用。
点云:Point Cloud,收集到的数据是很多点的3维极坐标。基于点云和GPS的定位是采用的是贝叶斯法则,计算汽车所处位置的可能性。
受到空气悬浮物的影响,极限 ...
【数学】到底什么是拓扑?
目录@[TOC]
定义注意:以下内容来自百度百科:拓扑
拓扑(Topology)是研究几何图形或空间在连续改变形状后还能保持不变的一些性质的一个学科。它只考虑物体间的位置关系而不考虑它们的形状和大小。
概念解释注意:以下内容大部分来自知乎:硬核科普:什么是拓扑?
即使这两个对象在几何形状上有所不同,但它们在拓扑上完全等价。我们可以将橡皮泥拉伸成可以想象的任何奇怪形状,但在拓扑结构世界中,所有这些形状都完全相同。也许你对拉伸的形状没有什么概念,但是关于如何拉伸橡皮泥的游戏有一些规则:
不允许在橡皮泥上打洞;
不允许将橡皮泥上的两点捏合在一起(我们没法将球形的橡皮泥做成甜甜圈的形状)。
如果我们在拉伸时违反了这些规则,那么这两个对象在拓扑上将不再等价。拓扑学家称这种不破坏既定规则的拉伸为同胚,这只是一种数学上精确地描述如何让橡皮泥的形状保持相同拓扑性质的方法。因此,如果我们可以得出两个拓扑空间之间的同胚性,则这些空间具有相同的拓扑,这就说到了咖啡杯和甜甜圈动画。
在拓扑上区分三维对象的另一种常用方法是,想象在三维对象上面行走。例如,在球体上行走。假设你从某个点开始,一直绕着球体上 ...