Linux_kernel_development_02_kernel_intro
从内核出发
第二章介绍内核源码获取、编译、安装以及内核程序和用户态程序的差别。
获取内核源码
http://www.kernel.org
https://mirrors.edge.kernel.org/pub/linux/kernel/
使用Git:git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
安装内核源代码:tar xvjf linux-x.y.z.tar.bz2 or tar xvzf linux-x.y.z.tar.gz
内核源码一般安装在/usr/src/linux下,,不要把这个源码树用于开发,因为编译用的内核版本就链接到这棵树。不要用root身份对内核进行修改,应当建立自己的主目录,仅以root身份安装内核,且安装新内核时,/usr/src/linux目录都应当原封不动。
使用补丁:patch -p1 < ../patch-x.y.z
内核源码树
arch - 特定体系结构的源码
block - 块设备I/O层
crypto - 加密API
Doc ...
无题
CS_Learning
self-driving_03_Sensing
感知与分割算法
无人驾驶感知系统概述
静态环境感知与分割算法
无人驾驶中的感知
广义上:
感知外界:
外在环境:静态环境、动态物体
传感器:单目(图片)/双目(深度图/稠密点云)/激光雷达(稀疏点云)/毫米波雷达/超声波雷达
感知自身(定位):
感知自身的运动状态(位置/朝向/速度/…)
传感器:GPS IMU HDmap SLAM (单目、双目、RGBD、激光雷达、超声波雷达,包括VIO)
四大图像任务:
分类
分割(像素分类)
检测(框分类)
跟踪(使用物体的一切信息进行时序关联)
分割
Segementation
实战基于传统方法的车道线检测
图片分割算法综述
实战基于图片分割的车道线检测
# 传统方法import cv2 as cvimport numpy as np# import matplotlib.pyplot as pltdef do_canny(frame): # Converts frame to grayscale because we only need the luminance channel for detecting ...
docker_01_intro
Introduction
简介
Docker 最初是由 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目。其使用 Go 语言进行开发,基于 Linux 内核的 cgroup 、 namespace 、 AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。
由于隔离的进程独立于宿主和其他的隔离进程,因此也称其为容器。最初实现基于 LXC ,从 0.7 版本后开始去除 LXC ,转而使用自行研发的 libcontainer ,从 1.11 版本开始则使用 runC 和 containerd 。
Docker与传统的虚拟化方式不同在于:
传统虚拟机技术是虚拟出一套硬件后,在器上运行一个完整操作系统,再再该系统上运行所需应用进程。
容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,也没有虚拟的硬件。
这也突出了 Docker 的优点:
更高效的利用系统资源:不需要虚拟硬件以及运行完整的操作系统。
更快速的启动时间:直接运行与宿主内核,无需启动完整的操作系统。
抑制的运行环境:Docker的镜像提供 ...
self-driving_02_ROS
ROS
ROS: The Robot Operating System
相关概念
为什么使用ROS:
点对点设计
分布式设计
多语言
轻量级
免费且开源
社区完善
ROS 不是传统意义上的操作系统,而是一种系统软件框架,使用了流行的面向服务SOA的软件技术,通过网络协议将节点间数据通信解耦,以集成不同语言不同功能的代码。
ROS 不是编程语言,是一个函数库,除包含客户端外,还包含一个中心服务器、一系列命令行工具、图形化界面工具以及编译环境。
ROS也不是集成开发环境。
Talker&Listener模型
消息以一种publish/subscribe的方式传递
节点可以在给定的主体中发布/订阅消息
一个节点可以订阅/发布多个不同的主题
允许多个节点订阅/发布同一个主题
订阅节点和发布节点并不知道相互之间的存在
Catkin
ROS的一个最简单最常见的编译系统
ROS对CMake进行了扩展
适合ROS进行大型项目,多包,多节点的场景下进行批量编译
操作简单,一次配置,多次使用
跨依赖项目编译
抽象程度为:catkin_ws->CMakeLists.txt-> ...
self-driving_01_intro
概述
“A self-driving car, also known as a robot car, autonomous car, or driverless car, is a vehicle that is capable of sensing its environment and moving with little or no human input.” – wikipedia
无人驾驶技术路径
无人驾驶分级
L2/L3自动驾驶
L4自动驾驶
无人驾驶分级
美国汽车工程师协会SAE,将自动驾驶分为6个级别L0~L5。
责任主体在于驾驶员:
L0:纯人工
L1:巡航定速(Adaptive Cruise Control, ACC),巡航装置可以纵向控制车辆,加速减速。
L2:车道保持辅助(Lane Keeping),系统可以纵向控制,也可以横向控制汽车,但是人仍为主导。(特斯拉)
L2.5:在简单路况下的变道能力。
责任主体在于汽车:
L3:在L2基础上提供变道能力。
L4:相当于全无人驾驶,大部分时间由车主导。
L5:驾驶能力几乎与人类没有关系,没有方向 ...
data_structure_03_stack_queue
Stack & Queue
重点内容:
栈和队列的基本概念
栈和队列的顺序存储结构
栈和队列的链式存储结构
栈和队列的应用
特殊矩阵的压缩存储
知识框架:
栈 stack
栈的基本概念
栈(stack) - 许在一段进行插入或删除操作的线性表
栈顶(top) - 允许进行插入和删除的一端
栈底(bottom) - 固定的,不允许进行插入和删除的一端
空栈(empty stack) - 不含任何元素的空表
栈的性质
后进先出(Last In First Out, LIFO)
$n$ 个不同元素进栈,出栈元素不同排列的个数为 $\frac{1}{n+1}C {2n\choose n}$,该公式也被称为卡特兰(Catalan)数,可采用数学归纳法证明
栈的基本操作
InitStack(&S) - 初始化空栈S
StackEmpty(S) - 判断栈是否为空,空则返回true,不空则返回false
Push(&S, x) - 进栈,若S未满,则将x加入
Pop(&S, &x) - 出栈,若S非空,弹出并返回给x
GetTop(S, & ...
CS61A_lab_00_intro
Introduction
lab00
wget https://cs61a.org/lab/lab00/lab00.zipunzip lab00.zip
实验目录下有如下文件:
$ ls__pycache__ lab00.ok lab00.py ok tests
下面是解释:
lab00.py: the starter file you just edited
ok: our testing program
lab00.ok: a configuration file for Ok
关于 ok 的命令生成器:
okpy Command Generator
lab00 要求很简单:
def twenty_twenty_two(): """Come up with the most creative expression that evaluates to 2022, using only numbers and the +, *, and - operators. >>> twenty_twenty_two() ...
CS61A_lecture_01_computer_science
Computer Science
Online textbook
What is CS?
The study of:
What problems can be solved using computation
How to solve those problems
What techniques lead to effective solutions
Systems - Artificial Intelligence - Graphics - Security - Networking - Programming Languages - Theory - Scientific Computing
Artificial Intelligence:
Decision Making
Robotics
Natural Language Processing
Answering Questions
Dialog
Translation
…
What is this Course about?
about managing complexity
Mastering abstract ...
Linux_kernel_development_01_intro
Linux内核简介
第一章从Unix的历史认识Linux内核和Linux操作系统的前世今生。
Unix历史
Unix诞生于贝尔实验室的一个失败的多用户操作系统Multics。
1969年,贝尔实验室的程序员设计了一个文件系统原型,最终该原型发展成了Unix。Thompson首先在一台无人问津的 PDP-7 型机上实现了这个操作系统。
1971年,Unix被移植到了 PDP-11 型机中。
1973年,Unix操作系统用C语言进行了重写。
1977年,推出了Unix System III。
1977年,加州大学伯克利分校推出了1BSD系统,实现基于贝尔实验室的Unix版本。
1978年,推出了2BSD系统,里面博阿寒csh、vi等软件。
1979年,推出了独立开发的Unix系统,3BSD,支持虚拟内存。
1994年,重写了虚拟内存子系统VM,推出了最终官方版4.4BSD。
Unix强大的原因:
Unix简洁,仅仅提供几百个系统调用并且有一个非常明确的设计目的。
Unix中,万物皆为文件,抽象使得对数据和对设备的操作通过一套相同的系统调用接口来进行。
内核和相关系统工具软件是用C语言编写 ...