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\to 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

$\require{mathtools}$

• This note combines content from ME 564 Linear Systems and ME 561 Discrete Digital Control
• Please read the Algebra Basics notes first if you are not familiar with related concepts.
• 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}\to\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> 标签，并指定键值或者文件路径。 