永井 忠一 2025.5.5
状態方程式を考える
どれか一つ選んで定式化してみましょう。15分くらい。
第二回
デッドレコニングを扱います。
v, ω が入力(対向2輪ロボット。前進後退、旋回)。xc, yc は回転中心。r は、回転半径(半径に角速度を掛けると速度。\( v = r\omega \)) \[ \begin{align} \begin{pmatrix} x' \\ y' \\ \theta' \end{pmatrix} &= \begin{pmatrix} x_\mathrm c + r\cos(\theta - 90^\circ + \omega\Delta t) \\ y_\mathrm c + r\sin(\theta - 90^\circ + \omega\Delta t) \\ \theta + \omega\Delta t \end{pmatrix} \\ &= \begin{pmatrix} x_\mathrm c + r\sin(\theta + \omega\Delta t) \\ y_\mathrm c - r\cos(\theta + \omega\Delta t) \\ \theta + \omega\Delta t \end{pmatrix} \\ &= \begin{pmatrix} x_\mathrm c + \frac{v}{\omega}\sin(\theta + \omega\Delta t) \\ y_\mathrm c - \frac{v}{\omega}\cos(\theta + \omega\Delta t) \\ \theta + \omega\Delta t \end{pmatrix} \end{align} \]
回転中心\[ \begin{align} x_\mathrm c &= x - r\cos(\theta - 90^\circ) \\ &= x - r\sin\theta \\ &= x - \frac{v}{\omega}\sin\theta \end{align} \] \[ \begin{align} y_\mathrm c &= y - r\sin(\theta - 90^\circ) \\ &= y + r\cos\theta \\ &= y + \frac{v}{\omega}\cos\theta \end{align} \]
式を代入\[ \begin{align} \begin{pmatrix} x' \\ y' \\ \theta' \end{pmatrix} &= \begin{pmatrix} x_\mathrm c + \frac{v}{\omega}\sin(\theta + \omega\Delta t) \\ y_\mathrm c - \frac{v}{\omega}\cos(\theta + \omega\Delta t) \\ \theta + \omega\Delta t \end{pmatrix} \\ &= \begin{pmatrix} x - \frac{v}{\omega}\sin\theta + \frac{v}{\omega}\sin(\theta + \omega\Delta t) \\ y + \frac{v}{\omega}\cos\theta - \frac{v}{\omega}\cos(\theta + \omega\Delta t) \\ \theta + \omega\Delta t \end{pmatrix} \\ &= \begin{pmatrix} x \\ y \\ \theta \end{pmatrix} + \begin{pmatrix} -\frac{v}{\omega}\sin\theta + \frac{v}{\omega}\sin(\theta + \omega\Delta t) \\ \frac{v}{\omega}\cos\theta - \frac{v}{\omega}\cos(\theta + \omega\Delta t) \\ \omega\Delta t \end{pmatrix} \end{align} \]
Δt 秒後の、(理想的な)ロボットの位置・姿勢 \( \vec x_t = (x', y', \theta')^\top \)
作図プログラム
Python |
---|
|
R が回転半径、W が車輪間距離(track width)\[ \left\{ \begin{align} &v_\mathrm L = \left(R - \frac{W}{2}\right)\omega \\ &v_\mathrm R = \left(R + \frac{W}{2}\right)\omega \\ &v = R\omega \end{align} \right. \]
R を消去して、(v と ω について)連立方程式を解く
Maxima |
---|
|
(微分)順運動学 FK\[ \begin{bmatrix} v \\ \omega \end{bmatrix} = \begin{pmatrix} \frac{v_\mathrm R + v_\mathrm L}{2} \\ \frac{v_\mathrm R - v_\mathrm L}{W} \end{pmatrix} = \begin{bmatrix} \frac{1}{2} & \frac{1}{2} \\ \frac{1}{W} & -\frac{1}{W} \end{bmatrix}\begin{bmatrix} v_\mathrm R \\ v_\mathrm L \end{bmatrix} \]
(微分)逆運動学 IK\[ \begin{bmatrix} v_\mathrm R \\ v_\mathrm L \end{bmatrix} = \begin{pmatrix} \frac{1}{2} & \frac{1}{2} \\ \frac{1}{W} & -\frac{1}{W} \end{pmatrix}^{-1}\begin{pmatrix} v \\ \omega \end{pmatrix} = \begin{bmatrix} 1 & \frac{W}{2} \\ 1 & -\frac{W}{2} \end{bmatrix}\begin{bmatrix} v \\ \omega \end{bmatrix} \]
(逆行列。記号計算)
Maxima | Python SymPy |
---|---|
|
|
2自由度(全方位移動は、できない)。ロボットは、横方向に動けない
作図プログラム
Python |
---|
|
デッドレコニング。ロボットの位置・姿勢 \( \vec p(t) = (x(t), y(t), \theta(t))^\top \)
連続時間\[ \begin{align} &x(t) = x(t_0) + \int_{t_0}^{t}v\cdot\cos\theta(\tau)\,d\tau \\ &y(t) = y(t_0) + \int_{t_0}^{t}v\cdot\sin\theta(\tau)\,d\tau \\ &\theta(t) = \theta(t_0) + \int_{t_0}^{t}\omega(\tau)\,d\tau \end{align} \]ここで、\( v\cdot\cos\theta(\tau) \) は、時刻 τ における速度のX軸成分。\( v\cdot\sin\theta(\tau) \) は、速度のY軸成分
離散時間(の積分計算)\[ \begin{align} &x(t) = x(t_0) + \sum_{\tau = t_0}^{t}v(\tau)\Delta\tau\cdot\cos\theta(\tau) \\ &y(t) = y(t_0) + \sum_{\tau = t_0}^{t}v(\tau)\Delta\tau\cdot\sin\theta(\tau) \\ &\theta(t) = \theta(t_0) + \sum_{\tau = t_0}^{t}\omega(\tau)\Delta\tau \end{align} \]
\( x(t_0) \)、\( y(t_0) \)、\( \theta(t_0) \) は、それぞれの初期値(初期位置・姿勢)
作図プログラム
Python |
---|
|
© 2025 Tadakazu Nagai