问题：矩阵左乘，右乘到底是什么意思？
我看机器人坐标计算方面的书，说到坐标变换的时候，相对参考坐标变换时左乘，相对新坐标变换时用右乘！但是有的书说法刚好相反！我当然知道数学符号的正确写法！我现在只是纠结中文上面的左乘右乘是不是没有统一的说法！我查百度，答案有的说从左边开始写，有的说从右边开始写！维基百科上面也没有答案！

回答：简而言之，对于矩阵表示，在左乘时候，实际上是对坐标 (或者说对偶空间上的元素) 进行变换，表现为原空间基向量不变，变换本身发生了变换。而右乘是对原空间基向量进行变换，表现为坐标 (对偶空间上的元素) 不变，原空间基向量发生改变。

具体到题目问题。假设有一组线性变换的矩阵表示 $A$ ，那么右乘得到的变换 $C=A B$ ，在原来的空间上代表对变换 $B$ 叠加一组变换，比 如欧式空间下的 $S E(3)$ 就是叠加一个刚体运动。而左乘 $C=B A$ 则代表了变换 $B$ 本身在原坐标系按 $A$ 的右作用以后新的坐标 。

证明可以从绝大多数线代教材找到:假设有一个有限维线性空间，对于同一个元素 $\mathbf{v}$ ，在该空间的两组基下有两组坐标表示:$$\left[\begin{array}{lll}\mathbf{e}_1 & \ldots & \mathbf{e}_n\end{array}\right]\left[\begin{array}{c}v^1 \\\vdots \\v^n\end{array}\right]=\mathbf{v}=\left[\begin{array}{lll}\tilde{\mathbf{e}}_1 & \ldots & \tilde{\mathbf{e}}_n\end{array}\right]\left[\begin{array}{c}\tilde{v}^1 \\\vdots \\\tilde{v}^n\end{array}\right]$$

又假设这两组坐标差了一组变换 $A$$$\mathbf{v}=\left[\begin{array}{lll}\tilde{\mathbf{e}}_1 & \ldots & \tilde{\mathbf{e}}_n\end{array}\right] A\left[\begin{array}{c}v^1 \\\vdots \\v^n\end{array}\right]$$

则得到基变换公式:$$\left[\begin{array}{lll}\mathbf{e}_1 & \ldots & \mathbf{e}_n\end{array}\right]=\left[\begin{array}{lll}\tilde{\mathbf{e}}_1 & \ldots & \tilde{\mathbf{e}}_n\end{array}\right] A$$然后再看坐标变换公式。坐标实际上就是原空间对偶空间的元素，是一组作用于原空间的线性变换 $f\left(\mathbf{e}_1, \ldots, \mathbf{e}_{\mathbf{n}}\right)$ ，坐标是其中的系数部分，设对偶空间中的基向量是 $\alpha^i$ ，这个变换它在这组基下的坐标是 $b_i$ ，那么有:$$f\left(\mathbf{e}_1, \ldots, \mathbf{e}_{\mathbf{n}}\right)=\left(\left[\begin{array}{lll}b_1 & \cdots & b_n\end{array}\right]\left[\begin{array}{c}\alpha^1 \\\vdots \\\alpha^n\end{array}\right]\right)\left(\left[\begin{array}{lll}\mathbf{e}_1 & \cdots & \mathbf{e}_n\end{array}\right]\right)$$

在矩阵表示下群作用就是矩阵乘法， 因此括号可以用右乘去掉，而根据结合律，上式也能写成:$$f\left(\mathbf{e}_1, \ldots, \mathbf{e}_{\mathbf{n}}\right)=\left[\begin{array}{lll}b_1 & \cdots & b_n\end{array}\right]\left[\begin{array}{c}\alpha^1 \\\vdots \\\alpha^n\end{array}\right]\left[\begin{array}{lll}\mathbf{e}_1 & \cdots & \mathbf{e}_n\end{array}\right]$$

在原空间中，将坐标系变为变换 $A$ 之后的坐标系，对偶元素新的坐标和基以 $\tilde{\alpha}^i$ 表示，则上式变为:

$$\begin{aligned}f\left(\mathbf{e}_{\mathbf{1}}, \ldots, \mathbf{e}_{\mathbf{n}}\right)=\left(\left[\begin{array}{lll}\tilde{b}_1 & \cdots & \tilde{b}_n\end{array}\right]\left[\begin{array}{c}\tilde{\alpha}^1 \\\vdots \\\tilde{\alpha}^n\end{array}\right]\right)\left(\left[\begin{array}{ccc}\tilde{\mathbf{e}}_1 & \cdots & \tilde{\mathbf{e}}_n\end{array}\right] A\right) \\\quad=\left[\begin{array}{lll}\tilde{b}_1 & \cdots & \tilde{b}_n\end{array}\right]\left(\left[\begin{array}{c}\tilde{\alpha}^1 \\\vdots \\\tilde{\alpha}^n\end{array}\right]\left[\begin{array}{lll}\tilde{\mathbf{e}}_1 & \cdots & \tilde{\mathbf{e}}_n\end{array}\right]\right) A=\left[\begin{array}{lll}\tilde{b}_1 & \cdots & \tilde{b}_n\end{array}\right] A\end{aligned}$$

可得坐标变换公式:$$\left[\begin{array}{lll}b_1 & \cdots & b_n\end{array}\right]=\left[\begin{array}{lll}\tilde{b}_1 & \cdots & \tilde{b}_n\end{array}\right] A$$

注释: $b_i a^j$ 是什么? 为什么 $b_i a^i$ 和 $\tilde{b_i} \tilde{\alpha}^i$ 相等?

$\left[\begin{array}{lll}b_1 & \cdots & b_n\end{array}\right]\left[\begin{array}{c}\alpha^1 \\ \vdots \\ \alpha^n\end{array}\right]$ 实际上是空间中的度量张量矩阵 $g_{i j}$ ，是空间结构本身的一种描述，用以在在不同空间中描述的转换，但它本身是不变的。比如欧式空间中，距离定义就会引入度量张量:$$d^2=<\mathbf{v}, \mathbf{v}>=\mathbf{v} G \mathbf{v}^T=v_i g_{i j} v_j$$

其中度量矩阵是单位矩阵，也就是说是一个平直 空间，这是空间本身的几何性质。在这样的意义下，度量本身可以看作空间性质的一种刻画。

以基于旋量运动学描述的开链机器人正向运动学为例，实际上是看成各个关节刚体运动的复合作用于末端之上，因此有公式 (此处可参考Modern Robotics, Lynch and Park, ) :$$T(\boldsymbol{\theta})=\prod_{i=1}^n\left(e^{\left[S_i\right] \theta_i}\right) M$$

上式中的各项意义不清楚并不要紧，把每个 $e^{\left[S_i\right] \theta_i}$ 看作一个SE3中的变换矩阵就行了，也就说这个式子的意义是对于 所有计算都相对于全局的固定坐标系 $s$ ，经过 $n$ 个关节运动 $\boldsymbol{\theta}$ 后，末端上固连的坐标系从原来 $M$ 变为了 $T$ 。

但这个公式还有一个版本:$$T(\boldsymbol{\theta})=M \prod_{i=1}^n\left(e^{\left[B_i\right] \theta_i}\right)$$

这个区别在于，所有的矩阵都是基于末端描述的，这种意义下，你可以认为整个过程是在转换 $M$的描述方法。

而 $B$ 和 $S$ 之间的联系就是B和 $\mathrm{S}$ 互为伴随，他们是对偶空间上的一组元素，即存在关系:$$[B]=M^{-1}[S] M$$以上回答希望对您有所帮助。