0%

Selected notes from ROB 501 and ME 564.
$\{x_i\}^b_a$ denotes set $\{x_a, x_{a+1}, \ldots, x_b\}$

# Algebraic Structures

## Operation

• Definition: an (binary, closed) operation $\ast$ on a set $S$ is a mapping of $S\times S\rightarrow S$
• Commutative: $x\ast y=y\ast x,\;\forall x,y\in S$
• Associative: $(x\ast y)\ast z=x\ast (y\ast z),\;\forall x,y,z\in S$

## Group

• Definition: a group is a pair $(\mathcal{S},\ast)$ with following axioms
1. $\ast$ is associative on $\mathcal{S}$
2. (Identity element) $\exists e\in \mathcal{S}\text{ s.t. }x\ast e=e\ast x=x,\;\forall x\in \mathcal{S}$
3. (Inverse element) $\forall x\in \mathcal{S}, \exists x’ \in \mathcal{S}\text{ s.t. }x\ast x’=x’\ast x=e$
• Abelian: a group is called abelian group if $\ast$ is also commutative

WIP. Progress: (ME 561 @ Week4; ME 564 @ 0%)
This note combines content from ME 564 Linear Systems and ME 561 Discrete Digital Control
In this note, $f\in\mathbb{F}^\mathbb{G}$ stands for a function with domain in $\mathbb{G}$ and co-domain in $\mathbb{F}$, i.e. $f:\mathbb{F}\rightarrow\mathbb{G}$, $H(x)$ generally stands for Heaviside function (step function)

# Transforms

## Laplace Transform

• Definition: $F(s)=\mathcal{L}\{f(t)\}(s)=\int^\infty_0 f(t)e^{-st}\mathrm{d}t$

Note that the transform is not well defined for all functions in $\mathbb{C}^\mathbb{R}$. And the transform is only valid for $s$ in a region of convergence, which is usually separated by 0.

• Laplace Transform is a linear map from $(\mathbb{C}^\mathbb{R}, \mathbb{C})$ to $(\mathbb{C}^\mathbb{C}, \mathbb{C})$ and it’s one-to-one.
• Derivative: $f’(t) \xleftrightarrow{\mathcal{L}} sF(s)-f(0^-)$
• Integration: $\int^t_0 f(\tau)d\tau \xleftrightarrow{\mathcal{L}} \frac{1}{s}F(s)$
• Delay: $f(t-a)H(t-a) \xleftrightarrow{\mathcal{L}} e^{-as}F(s)$
• Convolution: $\int^t_0 f(\tau)g(t-\tau)\mathrm{d}\tau \xleftrightarrow{\mathcal{L}} F(s)G(s)$
• Stationary Value: $\lim\limits_{t\to 0} f(t) = \lim\limits_{s\to \infty} sF(s), \lim\limits_{t\to \infty} f(t) = \lim\limits_{s\to 0} sF(s)$

# ASCII 控制符

Cython提供了很多方法来搭建C/C++内存和Python对象间的桥梁，但是官方的教程只介绍了一些基础的方法。这篇文章就介绍一下我在各个场合学到和用到的Cython封装（多维）数组的技巧。一般而言这个桥梁会分为两部分，Python与Cython和Cython与C/C++。其中Python中的数组主要形式是listarray.arraynumpy.ndarray；Cython中的数组形式有[:,:,:]Memoryview/Buffer）和cython.view.array；C/C++的数组形式有**（指针）、vectorEigen::Vector/Matrix

# def, cdef和cpdef

Python作为一门胶水语言，它与C/C++之间的兼容性（Interoperability）我认为是它相比其他动态语言脱颖而出的最大原因。Python原生支持的是与C语言的接口，Python的发行版自带有Python.h头文件，里面提供了在C中调用Python和反过来在Python中调用C的接口定义。但是C++就不一样了，虽然C++ ⇔ C ⇔ Python的通道是可行的，但是想要完整兼容C++的特性的话需要很多额外的重复代码（boilerplate）。因此相应针对Python/C++绑定的库也就应运而生了，我所了解的库主要有四个：Boost.PythonCythonpybind11SWIG。虽然网上也有不少比较三者的页面，但是我觉得都不够详细，这篇博客就介绍一下我基于使用这几个库的经验比较。

# 参数服务器

ROS中很有名的支持参数设置的结构是参数服务器，参数服务器是一个包含在master结点里的集中式字典结构，在ROS的Wiki上有介绍：中文|英文。参数服务器也可以从文件中读取参数，文件格式是yaml，读取的方式是在.launch文件中添加<rosparam>标签，并指定键值或者文件路径。