从零开始学习VIO笔记 --- 第一讲:基础知识(四元数,李代数)
从零开始学习VIO笔记 --- 第一讲:基础知识(四元数,李代数)
- 一. 向量的内积与外积
- 二. 旋转与平移
- 2.1 旋转表示 --- 旋转矩阵R
- 2.2 平移向量
- 2.3 变换矩阵T与齐次坐标
- 2.4 旋转表示 --- 旋转向量与欧拉角
- 2.5 旋转表示 --- 四元数
- 2.5.1 四元数
- 2.5.2 四元数对时间的导数
- 2.6 李群与李代数
- 2.6.1 李群
- 2.6.1 李代数的引出
- 2.6.2 李代数 so(3)so(3)so(3) 与se(3)se(3)se(3)
- 2.6.3 李代数求导
- 2.6.4 李群左右扰动
- 三. 旋转连乘雅克比
- 四. 作业
- 4.1 题目一 --- VIO 文献阅读
- 4.1.1 视觉与 IMU 进行融合之后有何优势?
- 4.1.2 有哪些常见的视觉 +IMU 融合方案?有没有工业界应用的例子?
- 4.1.3 学术界,VIO 研究有哪些新进展?有没有将(深度)学习方法用到 VIO 中的例子?
- 4.2 题目二 --- 四元数和李代数更新
- 4.1.1 题目:
- 4.1.2 解答
- 4.3 题目三 --- 推导其他导数
- 4.3.1 题目
- 4.3.2 解答
一. 向量的内积与外积
主要针对三维向量,两个三维向量必定共面;
内积 :
a⋅b=a1b1+a2b2+a3b3=∑i=13aibi=∣a∣∣b∣cos⟨a,b⟩a\cdot b=a_1b_1+a_2b_2+a_3b_3=\sum_{i=1}^3a_ib_i=\vert a\vert\vert b\vert\cos\left\langle a,b\right\rangle a⋅b=a1b1+a2b2+a3b3=i=1∑3aibi=∣a∣∣b∣cos⟨a,b⟩
为标量
外积/叉乘 :
a×b=[0−a3a2a30−a1−a2a10]b=a∧ba\times b=\begin{bmatrix}\begin{array}{ccc}0&-a_3&a_2\\a_3&0&-a_1\\-a_2&a_1&0\end{array}\end{bmatrix}b=a^{\wedge}\;b a×b=⎣⎡0a3−a2−a30a1a2−a10⎦⎤b=a∧b
外积结果为矢量,此矢量与向量 aaa 和向量 bbb 都垂直;它的大小为∣a∣∣b∣sin⟨a,b⟩|a||b|\sin\left\langle a,b\right\rangle∣a∣∣b∣sin⟨a,b⟩,大小等于向量 aaa,bbb 组成的平行四边形面积大小;
a∧a^{\wedge}a∧ 为向量 aaa 的反对称矩阵 AAA;(任意向量都对应着唯一的一个反对称矩阵)
a∧=Aa^{\wedge} = Aa∧=A
A∨=aA^{\vee} = aA∨=a
二. 旋转与平移
2.1 旋转表示 — 旋转矩阵R
有坐标系 aaa,基为 a=[a1,a2,a3]a=\begin{bmatrix}a_1,&a_2,&a_3\end{bmatrix}a=[a1,a2,a3] (注:为3 ×\times× 3的单位正交矩阵) ,在坐标系 aaa 下,有一个空间点 xxx,坐标为 [x1x2x3]\begin{bmatrix}x_1\\x_2\\x_3\end{bmatrix}⎣⎡x1x2x3⎦⎤ ,坐标系 aaa 经过旋转后为坐标系 bbb,基为 b=[b1,b2,b3]b=\begin{bmatrix}b_1,&b_2,&b_3\end{bmatrix}b=[b1,b2,b3],xxx点在坐标系 bbb 下的坐标为 [x1′x2′x3′]\begin{bmatrix}x_1'\\x_2'\\x_3'\end{bmatrix}⎣⎡x1′x2′x3′⎦⎤ 。对于 xxx点,它并未发生位置变换,向量关系没有改变,所以有下式成立:
[a1,a2,a3][x1x2x3]=[b1,b2,b3][x1′x2′x3′]\begin{bmatrix}a_1,&a_2,&a_3\end{bmatrix}\begin{bmatrix}x_1\\x_2\\x_3\end{bmatrix}\;=\;\begin{bmatrix}b_1,&b_2,&b_3\end{bmatrix}\begin{bmatrix}x_1'\\x_2'\\x_3'\end{bmatrix} [a1,a2,a3]⎣⎡x1x2x3⎦⎤=[b1,b2,b3]⎣⎡x1′x2′x3′⎦⎤
点 xxx在坐标系 bbb 下便可以通过如下表示:
[x1′x2′x3′]=([b1,b2,b3])−1[a1,a2,a3][x1x2x3]=([b1,b2,b3])T[a1,a2,a3][x1x2x3]=([b1b2b3][a1,a2,a3])[x1x2x3]=Rba[x1x2x3]\begin{array}{l}\begin{bmatrix}x_1'\\x_2'\\x_3'\end{bmatrix}={(\;\begin{bmatrix}b_1,&b_2,&b_3\end{bmatrix})}^{-1}\begin{bmatrix}a_1,&a_2,&a_3\end{bmatrix}\begin{bmatrix}x_1\\x_2\\x_3\end{bmatrix}\;={(\;\left[\begin{array}{clc}b_1,&b_2,&b_3\end{array}\right])}^T\begin{bmatrix}a_1,&a_2,&a_3\end{bmatrix}\begin{bmatrix}x_1\\x_2\\x_3\end{bmatrix}\\\;\;\;\;\;\;\;\;\;\;=\left(\begin{bmatrix}b_1\\b_2\\b_3\end{bmatrix}\begin{bmatrix}a_1,&a_2,&a_3\end{bmatrix}\right)\;\begin{bmatrix}x_1\\x_2\\x_3\end{bmatrix}\;=\;R_{ba}\;\begin{bmatrix}x_1\\x_2\\x_3\end{bmatrix}\;\\\end{array} ⎣⎡x1′x2′x3′⎦⎤=([b1,b2,b3])−1[a1,a2,a3]⎣⎡x1x2x3⎦⎤=([b1,b2,b3])T[a1,a2,a3]⎣⎡x1x2x3⎦⎤=⎝⎛⎣⎡b1b2b3⎦⎤[a1,a2,a3]⎠⎞⎣⎡x1x2x3⎦⎤=Rba⎣⎡x1x2x3⎦⎤
即:
[x1′x2′x3′]=Rba[x1x2x3]\begin{array}{l}\begin{bmatrix}x_1'\\x_2'\\x_3'\end{bmatrix}=\;R_{ba}\begin{bmatrix}x_1\\x_2\\x_3\end{bmatrix}\\\end{array} ⎣⎡x1′x2′x3′⎦⎤=Rba⎣⎡x1x2x3⎦⎤
(注:直角坐标系的基是3 ×\times× 3的正交矩阵,行列式为1,并相互正交,为单位正交基;
基与基相乘依旧为正交基,有 aTa=Ia−1=aT\begin{array}{l}a^Ta=I\;\;\;a^{-1}=a^T\\\end{array}aTa=Ia−1=aT )
旋转矩阵即为 RbaR_{ba}Rba ,称坐标系 aaa 到 bbb 的旋转矩阵
2.2 平移向量
向量 χ\chiχ 经过旋转和平移之后为 χ′\chi'χ′ ,其中旋转矩阵为 RRR ,平移向量为 t=[t1t2t3]t=\begin{bmatrix}t_1\\t_2\\t_3\end{bmatrix}t=⎣⎡t1t2t3⎦⎤
χ′=Rχ+t\chi'=R\chi+t χ′=Rχ+t
2.3 变换矩阵T与齐次坐标
为了方便进行坐标系变换中的乘法运算,我们引入变换矩阵 T=[Rt0T1]T=\begin{bmatrix}R&t\\0^T&1\end{bmatrix}T=[R0Tt1];为了对其维数,引入齐次坐标[X′1]\begin{bmatrix}X^{'}\\1\end{bmatrix}[X′1] ,则有:
[X′1]=[Rt0T1][X1]=T[X1]\begin{bmatrix}X^{'}\\1\end{bmatrix}\;=\;\begin{bmatrix}R&t\\0^T&1\end{bmatrix}\begin{bmatrix}X\\1\end{bmatrix}\;=T\begin{bmatrix}X\\1\end{bmatrix} [X′1]=[R0Tt1][X1]=T[X1]
2.4 旋转表示 — 旋转向量与欧拉角
旋转向量
任意旋转可以通过一个旋转轴和旋转角表示;即可以通过旋转向量(或角轴,为三维向量)表示,旋转向量的方向与旋转轴方向一至,模长为旋转角度;
假设单位向量n=[n1n2n3]n=\begin{bmatrix}n_1\\n_2\\n_3\end{bmatrix}n=⎣⎡n1n2n3⎦⎤ 与 旋转轴方向一至,旋转角度为 θ\thetaθ ,则旋转向量为 θn\theta nθn
旋转向量转换到旋转矩阵R :(罗德里格斯公式)
R=cos(θI)+(1−cosθ)nnT+sinθn∧R\;=\cos\left(\theta I\right)\;+\;(1-\cos\theta)nn^T\;+\;\sin\theta n^{\wedge} R=cos(θI)+(1−cosθ)nnT+sinθn∧
欧拉角
能直观的表示旋转,但是会出现万向锁问题
- 绕 Z 轴转,偏航角 yaw
- 绕 Y 轴转,俯仰角 pitch
- 绕 X 轴转,翻滚角 roll
2.5 旋转表示 — 四元数
2.5.1 四元数
四元数用 q=[q0q1q2q3]=[sv]q=\begin{bmatrix}q_0\\q_1\\q_2\\q_3\end{bmatrix}=\begin{bmatrix}s\\v\end{bmatrix}q=⎣⎢⎢⎡q0q1q2q3⎦⎥⎥⎤=[sv] 四维向量表示 ;q0q_0q0 , sss 为实部,[q1,q2,q3]T\begin{bmatrix}q_1,&q_2,&q_3\end{bmatrix}^T[q1,q2,q3]T , vvv 为虚部;
旋转向量 变换到 四元数q:
q=[cosθ2,nsinθ2]Tq={\lbrack\cos\frac\theta2,n\sin\frac\theta2\rbrack}^T q=[cos2θ,nsin2θ]T
四元数 qqq 到旋转矩阵 RRR 的变换 :
R=vvT+s2I+2sv∧+(v∧)2R\;=vv^T \;+s^2I+2sv^{\wedge} + ( v^{\wedge}\;)^2 R=vvT+s2I+2sv∧+(v∧)2
2.5.2 四元数对时间的导数
设初始旋转为 q=[s,v]q = [s, v]q=[s,v],然后,发生了角轴为 ω,θ\omega,\thetaω,θ 的旋转(右乘,对应四元数记作 △q\bigtriangleup q△q),那么 qqq 相对该旋转的导数为:
因此,若角速度为 ω\omegaω,那么旋转的时间导数即为:
除了利用四元数求导,亦可利用李代数进行旋转求导
使用旋转矩阵 RRR 时,角速度为 ω\omegaω,那么 RRR 相对于时间的导数可写作
在优化带有旋转的函数时,通常计算一个增量 ϕ∈so(3)\phi \in so(3)ϕ∈so(3),然后用它更新当前估计值:(由于这个增量并没有指定方向,所以左乘右乘都可以)
表示旋转可以用 矩阵RRR表示,也可以用 四元数表示,是一样的形式进行更新。
2.6 李群与李代数
2.6.1 李群
群:只有一个合法的运算的集合
旋转矩阵 RRR 构成特殊正交群 SO(3)SO(3)SO(3)
SO(3)={R∈R3×3∣RRT=I,det(R)=1}SO(3)=\{R\in\mathbb{R}^{3\times3}\;\vert\;RR^T=I\;,det(R)\;=\;1\} SO(3)={R∈R3×3∣RRT=I,det(R)=1}
变换矩阵 TTT 构成特殊欧式群 SE(3)SE(3)SE(3)
SE(3)={T=[Rt0T1]∈R4×4∣R∈SO(3),t∈R3}SE(3)=\{T=\begin{bmatrix}R&t\\0^T&1\end{bmatrix}\in \mathbb{R}^{4\times4}\;\vert\;R\in SO(3)\;,t\in \mathbb{R}^3\} SE(3)={T=[R0Tt1]∈R4×4∣R∈SO(3),t∈R3}
2.6.1 李代数的引出
相机运动过程时,旋转矩阵可以用 R(t)R(t)R(t),RRR 关于时间 ttt 的函数表示
对于旋转矩阵
RRT=IRR^T = IRRT=I
于是有
R(t)R(t)T=IR(t)R(t)^T = IR(t)R(t)T=I 等式两边对时间求,得
R.(t)R(t)T+R(t)R.(t)T=0\overset.R(t)R{(t)}^T\;+\;R(t)\overset.R{(t)}^T\;=\;0R.(t)R(t)T+R(t)R.(t)T=0⇒R.(t)R(t)T=−R(t)R.(t)T⇒R.(t)R(t)T=−(R.(t)R(t)T)T\Rightarrow\overset.R(t)R{(t)}^T\;=\;-R(t)\overset.R{(t)}^T\\\Rightarrow\overset.R(t)R{(t)}^T\;=\;-\left(\overset.R(t)R{(t)}^T\right)^T\\ ⇒R.(t)R(t)T=−R(t)R.(t)T⇒R.(t)R(t)T=−(R.(t)R(t)T)T 说明 R.(t)R(t)T\overset.R(t)R{(t)}^TR.(t)R(t)T 为反对称矩阵,存在一个三维向量 ϕ(t)\phi(t)ϕ(t) 与之对应,有
R.(t)R(t)T=ϕ(t)∧\overset.R(t)R{(t)}^T=\phi(t)^\wedgeR.(t)R(t)T=ϕ(t)∧ 等式两边右乘 R(t)R(t)R(t),得:
R.(t)=ϕ(t)∧R(t)\overset.R(t)=\phi(t)^\wedge R(t)R.(t)=ϕ(t)∧R(t)
总结:
1. 说明对旋转矩阵求导,等价于在旋转矩阵左乘一个反对称矩阵
如何求得这个反对称矩阵呢 ?
对于t0t_0t0时刻, R(0)=IR(0) = IR(0)=I ,把R(t)R(t)R(t)在t=0t=0t=0附近进行一阶泰勒展开:
R(t)≈R(t0)+R.(t0)(t−t0)=R(t0)+ϕ(t0)∧R(t0)(t−t0)=I+ϕ(t0)∧tR(t)\approx R(t_0)+\overset.R(t_0)(t-t_0)=R(t_0)+{\phi(t_0)}^\wedge R(t_0)(t-t_0)\\=I+{\phi(t_0)}^\wedge t R(t)≈R(t0)+R.(t0)(t−t0)=R(t0)+ϕ(t0)∧R(t0)(t−t0)=I+ϕ(t0)∧t
此为一个关于 RRR 的微分方程,且 R(0)=IR(0) = IR(0)=I,便可解得:
R(t)=exp(ϕ0∧t)R(t)=exp(\phi_0^\wedge t)R(t)=exp(ϕ0∧t)
2. 说明在 t=0t=0t=0的附近,旋转矩阵可以由exp(ϕ0∧t)exp(\phi_0^\wedge t)exp(ϕ0∧t),解出。
给定某个时刻的 RRR,我们可以求出一个ϕ\phiϕ ,描述了RRR 在局部的导数关系; ϕ\phiϕ 是SO(3)SO(3)SO(3)对应的李代数 so(3)so(3)so(3);
R=exp(ϕ∧)R= exp(\phi^\wedge) R=exp(ϕ∧)
2.6.2 李代数 so(3)so(3)so(3) 与se(3)se(3)se(3)
→\rightarrow→ 给定一个ϕ\phiϕ 可以通过指数映射exp(ϕ∧)exp(\phi^\wedge )exp(ϕ∧),求出RRR
→\rightarrow→ 给定一个RRR 可以通过对数映射,求出ϕ\phiϕ
RRR的李代数为 so(3)so(3)so(3),变换矩阵 TTT 的李代数为 se(3)se(3)se(3)
so(3)so(3)so(3)中的ϕ\phiϕ 变换到SO(3)SO(3)SO(3)中的 RRR:
R=exp(ϕ∧)R= exp(\phi^\wedge) R=exp(ϕ∧)
SO(3)SO(3)SO(3)中的 RRR 变换到 so(3)so(3)so(3)中的ϕ\phiϕ:
ϕ=ln(R)∨\phi= {\ln\left(R\right)}^\vee ϕ=ln(R)∨
总结:
so(3)so(3)so(3) 这个李代数集合中的元素为 三维向量 ϕ\phiϕ 或者是三维反对称矩阵ϕ∧\phi^\wedgeϕ∧
se(3)se(3)se(3) 这个李代数集合中的元素为 六维向量 ξ=[ρϕ]\xi=\begin{bmatrix}\rho\\\phi\end{bmatrix}ξ=[ρϕ] ,其中ρ\rhoρ 表示平移,ϕ\phiϕ 则是上面的旋转三维向量;但是 ρ\rhoρ 并不直接等于变换矩阵中的 ttt;对应的四维 反对称矩阵 ξ∧=[ϕ∧ρ0T0]\xi^\wedge=\begin{bmatrix}\phi^\wedge&\rho\\0^T&0\end{bmatrix}ξ∧=[ϕ∧0Tρ0]
2.6.3 李代数求导
使用李代数表示姿态,根据李代数加法运算对李代数求导
旋转之后的位姿对旋转矩阵求导:∂(Rp)∂R\frac{\partial(Rp)}{\partial R}∂R∂(Rp) ,由于SO(3)SO(3)SO(3)没有加法运算,转而使用李代数加法运算去求导:
∂(exp(ϕ∧)p)∂ϕ=lim△ϕ→0exp((ϕ+△ϕ)∧)p−exp(ϕ∧)p△ϕ=...=(−Rp)∧Jl\frac{\partial(exp(\phi^\wedge)p)}{\partial\phi}=\lim_{\triangle\phi\rightarrow0}\frac{exp({(\phi+\triangle\phi)}^\wedge)p-exp(\phi^\wedge)p}{\triangle\phi}=...={(-Rp)}^\wedge J_l∂ϕ∂(exp(ϕ∧)p)=△ϕ→0lim△ϕexp((ϕ+△ϕ)∧)p−exp(ϕ∧)p=...=(−Rp)∧Jl
2.6.4 李群左右扰动
左扰动求导:
对 RRR 进行一次左扰动△R\triangle R△R,左乘在RRR左侧,△R\triangle R△R对应的李代数设为φ\varphiφ , RpRpRp对φ\varphiφ 求导:
∂(Rp)∂φ=limφ→0△RRp−Rpφ=limφ→0exp(φ∧)exp(ϕ∧)p−exp(ϕ∧)pφ=limφ→0(I+φ∧)exp(ϕ∧)p−exp(ϕ∧)pφ=limφ→0φ∧exp(ϕ∧)pφ=limφ→0φ∧Rpφ=limφ→0−(Rp)∧φφ=−(Rp)∧\frac{\partial(Rp)}{\partial\varphi}=\lim_{\varphi\rightarrow0}\frac{\bigtriangleup RRp-Rp}\varphi=\lim_{\varphi\rightarrow0}\frac{exp(\varphi^\wedge)exp(\phi^\wedge)p-exp(\phi^\wedge)p}\varphi\\\;\;\;\;\;\;\;\;=\lim_{\varphi\rightarrow0}\frac{(I+\varphi^\wedge)exp(\phi^\wedge)p-exp(\phi^\wedge)p}\varphi=\lim_{\varphi\rightarrow0}\frac{\varphi^\wedge exp(\phi^\wedge)p}\varphi\\=\lim_{\varphi\rightarrow0}\frac{\varphi^\wedge Rp}\varphi=\lim_{\varphi\rightarrow0}\frac{-{(Rp)}^\wedge\varphi}\varphi=-{(Rp)}^\wedge∂φ∂(Rp)=φ→0limφ△RRp−Rp=φ→0limφexp(φ∧)exp(ϕ∧)p−exp(ϕ∧)p=φ→0limφ(I+φ∧)exp(ϕ∧)p−exp(ϕ∧)p=φ→0limφφ∧exp(ϕ∧)p=φ→0limφφ∧Rp=φ→0limφ−(Rp)∧φ=−(Rp)∧
此式比上面用李代数求导少了一个雅克比计算,所以扰动模型更实用。
旋转点右扰动求导:
三. 旋转连乘雅克比
四. 作业
4.1 题目一 — VIO 文献阅读
参考文献: “A review of visual inertial odometry from filtering and optimisation perspectives”. Advanced Robotics 29.20 (2015)
4.1.1 视觉与 IMU 进行融合之后有何优势?
4.1.2 有哪些常见的视觉 +IMU 融合方案?有没有工业界应用的例子?
4.1.3 学术界,VIO 研究有哪些新进展?有没有将(深度)学习方法用到 VIO 中的例子?
4.2 题目二 — 四元数和李代数更新
4.1.1 题目:
4.1.2 解答
需要的库:
sophus :李群SO(3),SE(3) --- Sophus::SO3d ; // d表示 double
eigen3 :旋转矩阵R --- Eigen : :Matrix3d; 微小增量ω ---- Vector3d ; 李代数(三维向量) ---- Vector3d ;四元数--- Quaterniond
引入头文件
#include <iostream>
#include <sophus/se3.hpp>
#include <sophus/so3.hpp>
#include <eigen3/Eigen/Core>
#include <eigen3/Eigen/Dense>
旋转向量 θn\theta nθn (角度+单位三维向量) 转为旋转矩阵 RRR
// Eigen::AngleAxisd(M_PI / 2, Eigen::Vector3d(0, 0, 1)) 旋转向量
Eigen::Matrix3d R = Eigen::AngleAxisd(M_PI / 2, Eigen::Vector3d(0, 0, 1)).toRotationMatrix();
旋转矩阵 RRR 构造四元数 qqq
Quaterniond q(R);
旋转矩阵 RRR ,四元数 qqq 构造 SO(3)SO(3)SO(3) ; Sophus::SO3d 是一个类 ; SO(3)SO(3)SO(3)本质是矩阵 RRR;
类方法 SO3_R.matrix() 返回其旋转矩阵形式
Sophus::SO3d SO3_R(R); // 从旋转矩阵构造Sophus::SO(3)Sophus::SO3d SO3_q(q); // 也可以使用四元素构造Sophus::SO(3)
std::cout << "SO3 : " << SO3_R.matrix() << std::endl;
1.使用旋转矩阵更新 R←Rexp(ω∧)R\leftarrow R\;exp(\omega^\wedge)R←Rexp(ω∧) , ω\omegaω 微小增量李代数,三维向量
Vector3d update_so3(0.01, 0.02, 0.03); //更新量
Sophus::SO3d SO3_updated = SO3_R * Sophus::SO3d::exp(update_so3); //右乘更新
SO(3) 用矩阵R显示
std::cout << "SO3 R= \n"<< SO3_updated.matrix() <<std::endl;
2.使用四元数更新 q←q⊗[1,12ω]Tq\leftarrow q\;\otimes\begin{bmatrix}1,&\frac12\omega\end{bmatrix}^Tq←q⊗[1,21ω]T
Eigen::Quaterniond update_q(1, update_so3(0) / 2, update_so3(1) / 2, update_so3(2) / 2);
update_q.normalize(); //四元数归一化处理
Eigen::Quaterniond q_updated = q * update_q;
四元数 转为 矩阵R显示
Eigen : : Matrix3d q2R = q_updated.toRotationMatrix()
std::cout << "q2R = \n"<< q2R <<std::endl;
4.3 题目三 — 推导其他导数
4.3.1 题目
4.3.2 解答
从零开始学习VIO笔记 --- 第一讲:基础知识(四元数,李代数)相关推荐
- 从零开始学习VIO笔记 --- 第四讲:滑动窗口(基于滑动窗口算法的 VIO 系统:可观性和一致性)
从零开始学习VIO笔记 --- 第四讲:滑动窗口(基于滑动窗口算法的 VIO 系统:可观性和一致性) 一. 从高斯分布到信息矩阵 1.1 高斯分布 1.2 高斯分布和协方差矩阵 1.3 信息矩阵 二. ...
- 从零开始学习VIO笔记 --- 第三讲:基于优化的IMU和视觉信息融合
从零开始学习VIO笔记 --- 第三讲:基于优化的IMU和视觉信息融合 一. 预备知识 1.1 知识点概述 1.2 PnP 中的重投影误差函数 1.3 后端优化中重投影误差函数/BA问题 二. VIO ...
- php百分比乘加,PHP学习笔记第一篇 基础知识
基础知识 我将php语言学习里面最最基础的部分,需要第一个学的,必须牢牢掌握的,归类到一起. 大纲 1.数据类型 2.变量 3.常量 4.操作符 5.流程控制 6.数组 7.字符串操作 8.正则 基础 ...
- MySQL学习笔记-第一篇-基础知识与命令
目录 1 登录命令 1.1 主机域名登录 1.2 主机ip登录 2 库命令 2.1 显示库 2.2 创建数据库 2.3 删除数据库 2.4 MySQL-8.新特性 3 表命令 3.1 创建数据表 3. ...
- [Python笔记]第一篇:基础知识
本篇主要内容有:什么是python.如何安装python.py解释器解释过程.字符集转换知识.传参.流程控制 初识Python 一.什么是Python Python是一种面向对象.解释型计算机程序设计 ...
- python知识笔记_[Python笔记]第一篇:基础知识
二.为什么要使用Python 优点: 学习成本低 开发效率高–拥有丰富而且强大的第三方库 高级语言–不用关心底层运作细节 可扩展性–Python是一门胶水语言,能于其他语言如C ,C#进行扩展 缺点: ...
- 【Python学习笔记】第一章基础知识:格式化输出,转义字符,变量类型转换,算术运算符,运算符优先级和赋值运算符,逻辑运算符,世界杯案例题目,条件判断if语句,猜拳游戏与三目运算符
Python学习笔记之[第一章]基础知识 前言: 一.格式化输出 1.基本格式: 2.练习代码: 二.转义字符 1.基本格式: 2.练习代码: 3.输出结果: 三.输入 1.基本格式: 2.练习代码: ...
- 《Java并发编程实践》学习笔记之一:基础知识
<Java并发编程实践>学习笔记之一:基础知识 1.程序与进程 1.1 程序与进程的概念 (1)程序:一组有序的静态指令,是一种静态概念: (2)进程:是一种活动,它是由一个动作序列组成 ...
- 前端学习笔记(js基础知识)
前端学习笔记(js基础知识) JavaScript 输出 JavaScript 数据类型 常见的HTML事件 DOM 冒泡与捕获 流程控制语句 for..in 计时器 let,var,const的区别 ...
最新文章
- php composer 无法下载,php – composer无法安装laravel / passport
- NLP学习笔记:word2vec
- Oracle入门(十二G)之序列
- php5.3降5.2,php5.3降级为5.2
- 打开慢_苹果手机聊天回复特别慢?打开这个开关,1分钟打200字都没问题
- 经济日报:法定数字货币的推出将会大大压缩比特币的投资空间
- Qt信号与槽传递QList动态数组
- DevExpress控件之主题
- 30多岁,你的存款有多少?
- Charles使用教程(Mac)
- 智慧校园整体解决方案
- php逻辑判断真假,逻辑判断之真假推理型答题技巧
- 路飞学城python开发ftp_路飞学城-Python开发集训-第一章
- H3C设备的基本配置
- Excel函数--SUM计算累计销量
- 建设路肩适用性设备分析之路缘石滑模机
- 【can总线】stm32的can控制器
- jQuery库——引入CDN
- 客户端提示连接oracle出错,客户端登录报错:与服务端的网络连接发生异常,请您联系管理员处理...
- 云呼叫中心?云通讯?云联络 中心?傻傻分不清楚
热门文章
- 详解 SCI SCIE SSCI
- lustre lnet
- 故障分析 | Cassandra 用户信息 list Error
- python中 什么意思_请问python中%代表什么意思?
- 真正的手机密码大全!(完整版)(转)
- 互联网学习记录:三件套_Javascript
- 一阶欧拉近似matlab,MATLAB改进欧拉法与四阶龙格-库塔求解一阶常微分方程.doc
- 生产服务器硬盘寻道时间,HD Tune平均读写/寻道时间对比_希捷 NAS HDD 4TB 5900转 64MB_内存硬盘评测-中关村在线...
- SQL Sever2012安装错误——Windows Installer错误消息:打开安装日志文件的错误的原因及解决方案
- App Store ASO必备指南:3个步骤做好aso优化