【机器人】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)是研究几何图形或空间在连续改变形状后还能保持不变的一些性质的一个学科。它只考虑物体间的位置关系而不考虑它们的形状和大小。
概念解释注意:以下内容大部分来自知乎:硬核科普:什么是拓扑?
即使这两个对象在几何形状上有所不同,但它们在拓扑上完全等价。我们可以将橡皮泥拉伸成可以想象的任何奇怪形状,但在拓扑结构世界中,所有这些形状都完全相同。也许你对拉伸的形状没有什么概念,但是关于如何拉伸橡皮泥的游戏有一些规则:
不允许在橡皮泥上打洞;
不允许将橡皮泥上的两点捏合在一起(我们没法将球形的橡皮泥做成甜甜圈的形状)。
如果我们在拉伸时违反了这些规则,那么这两个对象在拓扑上将不再等价。拓扑学家称这种不破坏既定规则的拉伸为同胚,这只是一种数学上精确地描述如何让橡皮泥的形状保持相同拓扑性质的方法。因此,如果我们可以得出两个拓扑空间之间的同胚性,则这些空间具有相同的拓扑,这就说到了咖啡杯和甜甜圈动画。
在拓扑上区分三维对象的另一种常用方法是,想象在三维对象上面行走。例如,在球体上行走。假设你从某个点开始,一直绕着球体上 ...
【自动驾驶】技术笔记:概述
后续任务:需要补充,阅读参考书的 6 7 8 / 9 10 / 12 / 13 14 15 / 17 / 18 19 20
基本情况
自动驾驶技术在异常环境中的可靠性一直都没有得到很好的解决。
无人驾驶或者移动机器人包括感知、定位和决策三个技术点,也包括适用于无人驾驶的边缘计算系统和一个无人驾驶云平台提供更高级的训练、统筹规划任务。
完全自动驾驶会比计算机辅助驾驶要更加可靠。
定位卡尔曼滤波可以使用卡尔曼滤波(Kalman Filter)整合GPS和IMU的优势。通过GPS和IMU可以为车辆定位提供既准确有足够实时的位置更新。
但是因为GPS受到环境影响比较大,同时IMU存在累积误差的问题,我们采用摄像头的立体视觉定位作为补充方案。再结合LiDAR对环境的“形状化描述”与高精度地图匹配,进行多传感器融合以达到更准确的定位。
视觉里程计算法用于定位的视觉里程计算法,有两类:一类是基于拓扑与地标的算法,另一类是基于几何的视觉里程计算法。
第一类需要预先把所有的地标(像是某个路口的标志)组成一个精准的拓扑图,当无人车监测到某个地标时, ...
【深度学习】自然语言处理
自然语言处理(NLP)讲义一、NLP概述1. NLP的定义NLP(Nature Language Processing,自然语言处理)是计算机学科及人工智能领域一个重要的子学科,它主要研究计算机如何处理、理解及应用人类语言。所谓自然语言,指人说的话、人写的文章,是人类在长期进化过程中形成的一套复杂的符号系统(类似于C/Java等计算机语言则称为人造语言)。以下是关于自然语言处理常见的定义:
自然语言处理是计算机科学与语言中关于计算机与人类语言转换的领域。——中文维基百科
自然语言处理是人工智能领域中一个重要的方向。它研究实现人与计算机之间用自然语言进行有效沟通的各种理论和方法。——百度百科
自然语言处理研究在人与人交际中及人与计算机交际中的语言问题的一门学科。NLP要研制表示语言能力和语言应用的模型,建立计算机框架来实现这些语言模型,提出相应的方法来不断完善这种模型,并根据语言模型设计各种实用系统,以及对这些系统的评测技术。——Bill Manaris,《从人机交互的角度看自然语言处理》
自然语言处理还有其它一些名称,例如:自然语言理解(Natural Language ...
【深度学习】人脸检测与人脸识别
一、概述1. 基本概念人脸是个人重要的生物特征,业界很早就对人脸图像处理技术进行了研究。人脸图像处理包括人脸检测、人脸识别、人脸检索等。人脸检测是在输入图像中检测人脸的位置、大小;人脸识别是对人脸图像身份进行确认,人脸识别通常会先对人脸进行检测定位,再进行识别;人脸检索是根据输入的人脸图像,从图像库或视频库中检索包含该人脸的其它图像或视频。
2. 人脸检测与识别的应用
实名认证
人脸考勤
刷脸支付、刷脸检票
公共安全:罪犯抓捕、失踪人员寻找
3. 传统人脸检测与人脸识别方法1)人脸检测
基于知识的人脸检测法。它将典型的人脸形成规则库对人脸进行编码。通常, 通过面部特征之间的关系进行人脸定位。
基于模板匹配的人脸检测法。存储几种标准的人脸模式, 用来分别描述整个人脸和面部特征;计算输入图像和存储的模式间的相互关系并用于检测。
基于特征的人脸检测法。是在姿态、视角或光照条件改变的情况下找到存在的结构特征, 然后使用这些特征确定人脸。
基于外观的人脸检测法。与模板匹配方法相反, 从训练图像集中进行学习从而获得模型(或模板) ,并将这些模型用于检测。
2)人脸识别
几何特征分析法。首先, ...
【深度学习】生成对抗网络(GAN)
一、概述生成对抗网络(Generative Adversarial Networks)是一种无监督深度学习模型,用来通过计算机生成数据,由Ian J. Goodfellow等人于2014年提出。模型通过框架中(至少)两个模块:生成模型(Generative Model)和判别模型(Discriminative Model)的互相博弈学习产生相当好的输出。生成对抗网络被认为是当前最具前景、最具活跃度的模型之一,目前主要应用于样本数据生成、图像生成、图像修复、图像转换、文本生成等方向。
GAN这种全新的技术在生成方向上带给了人工智能领域全新的突破。在之后的几年中生GAN成为深度学习领域中的研究热点,近几年与GAN有关的论文数量也急速上升,目前数量仍然在持续增加中。
GAN论文数量增长示意图
2018年,对抗式神经网络的思想被《麻省理工科技评论》评选为2018年“全球十大突破性技术”(10 Breakthrough Technologies)之一。 Yann LeCun(“深度学习三巨头”之一,纽约大学教授,前Facebook首席人工智能科学家)称赞生成对抗网络是“过去20年中深度学习领域 ...
【深度学习】图像语义分割
一、基本介绍1. 什么是语义分割语义分割(Semantic Segmentation)是图像处理和机器视觉一个重要分支,其目标是精确理解图像场景与内容。语义分割是在像素级别上的分类,属于同一类的像素都要被归为一类,因此语义分割是从像素级别来理解图像的。如下如所示的照片,属于人的像素部分划分成一类,属于摩托车的像素划分成一类,背景像素划分为一类。
语义分割
图像分割级别可以分为语义级分割、实例级分割和全景分割。
语义分割(semantic segmentation):对图像中的每个像素划分到不同的类别;
实例分割(instance segmentation):对图像中每个像素划分到不同的个体(可以理解为目标检测和语义分割的结合);
全景分割(panoptic segmentation):语义分割和实例分割的结合,即要对所有目标都检测出来,又要区分出同个类别中的不同实例。
左上:原图;右上:语义级分割;左下:实例级分割;右下:全景分割
### 2. 应用
1)无人驾驶
2)医学、生物图像分割(如病灶识别)
3)无人机着陆点判断
4)自动抠图
5)遥感图像分割
3. 语义分 ...
【深度学习】光学字符识别(OCR)
一、基本理论1. 什么是OCR1)定义OCR (Optical Character Recognition,光学字符识别)是指对图片中的文字进行查找、提取、识别的一种技术,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程。
2)一般步骤
文字检测:解决的问题是哪里有文字,文字的范围有多少
文字识别:对定位好的文字区域进行识别,主要解决的问题是每个文字是什么,将图像中的文字区域进转化为字符信息。
3)OCR的难点文本检测,尤其是复杂自然场景下的文本检测,非常具有挑战性,主要难点有:
文本存在多种分布,文本排布形式多样;
文本大小、长度不固定;
文本存在多个方向;
多种语言混合。
4)OCR与目标检测的区别
文本大多数以长矩形形式存在,即长宽比一般较大或较小,这与普通的目标检测中的物体不一样(这些长宽比较接近1)
普通物体(比如猫)存在明显的闭合边缘轮廓,而文本没有
文本中包含多个文字,而文字之间是有间隔的,如果检测做得不好,我们就会把每个字都当成文本行给框出来而非整行作为文本框,这与我们的期望不一样
5)评估指标
拒识率:把应该识别的文字,当成不 ...
双十二新书整理
PaddlePaddle深度学习实战因为是实战,所以每一个知识点都提供了代码作为参考。
最开始的几部分属于人工智能相关教科书的常见内容,在对人工智能的背景和技术体系不熟悉的人可以阅读一下。
接下来的章节对人工智能深度学习的任务进行项目展示,重数学代码和模型结构。对常见任务和其对应的深度学习模型进行了大量的完备的解释。适合在遇到相关任务时进行针对性学习。但是问题是我们在使用paddlepaddle的场景不多,要是想要充分使用这本书,或者掌握paddlepaddle就要想办法。
第一本无人驾驶书很好的一本书,对无人驾驶需要的硬件和技术进行了展示和解释。而且少见的给出了很多自动驾驶方案设计中的经验之谈。适合初学者认识行业全貌,了解重要的待解决问题。
ROS机器人编程与SLAM算法解析指南技术稍微有一些旧,仅仅是展示了这个领域的一些代码和工具,可以作为一本复习书,或者其他更加专业的书籍的案例补充。
ROS机器人编程实践给我的第一感觉是,这是一个黄金屋,一个完整的黄金屋,有你需要的一切关于ROS的知识。
这本书中的知识是个整体,学到这本书的全部知识,才能学习到ROS的精髓。也就是说,如果仅仅只是 ...
【深度学习】目标检测
一、基本概念1. 什么是目标检测目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标(物体),确定它们的类别和位置,是计算机视觉领域的核心问题之一。由于各类物体有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具有挑战性的问题。
计算机视觉中关于图像识别有四大类任务:
(1)分类-Classification:解决“是什么?”的问题,即给定一张图片或一段视频判断里面包含什么类别的目标。
(2)定位-Location:解决“在哪里?”的问题,即定位出这个目标的的位置。
(3)检测-Detection:解决“在哪里?是什么?”的问题,即定位出这个目标的位置并且知道目标物是什么。
(4)分割-Segmentation:分为实例的分割(Instance-level)和场景分割(Scene-level),解决“每一个像素属于哪个目标物或场景”的问题。
所以,目标检测是一个分类、回归问题的叠加。
2. 目标检测的核心问题(1)分类问题:即图片(或某个区域)中的图像属于哪个类别。
(2)定位问题:目标可能出现在图像的任何位置。
(3 ...
【网络安全】的介绍和思考
什么是网络安全网络安全(Cyber Security)是指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或者恶意的原因而遭受到破坏、更改、泄露,系统连续可靠正常地运行,网络服务不中断。
网络安全,通常指计算机网络的安全,实际上也可以指计算机通信网络的安全。计算机通信网络是将若干台具有独立功能的计算机通过通信设备及传输媒体互连起来,在通信软件的支持下,实现计算机间的信息传输与交换的系统。而计算机网络是指以共享资源为目的,利用通信手段把地域上相对分散的若干独立的计算机系统、终端设备和数据设备连接起来,并在协议的控制下进行数据交换的系统。计算机网络的根本目的在于资源共享,通信网络是实现网络资源共享的途径,因此,计算机网络是安全的,相应的计算机通信网络也必须是安全的,应该能为网络用户实现信息交换与资源共享。
为什么要学习网络安全
网络安全是一个关系国家安全和主权、社会的稳定、民族文化的继承和发扬的重要问题。其重要性,正随着全球信息化步伐的加快而变到越来越重要。“家门就是国门”,安全问题刻不容缓。
网络安全是一门涉及计算机科学、网络技术、通信技术、密码技术、信息安全技术、应用数学、数论 ...