2輪差動駆動型ロボット2WDの運動学モデル

運動学分析

2輪差動駆動型ロボット運動学モデル
2輪差動駆動型ロボット運動学モデル

以上のイラストに示された、車軸中心Cの瞬間速度はVc、回転角速度ω、回転半径Rは、以下の数式にて計算できる。
$$Vc = \frac{Vl + Vr}{2}$$
$$ω = \frac{Vl – Vr}{l}$$
$$R = \frac{Vc}{ω} = \frac{l}{2} \frac{Vl + Vr}{Vl – Vr}$$
l:左右車輪間の距離、Vl:左側車輪の速度、Vr:右側車輪の速度

運動状態分析

2輪差動駆動型ロボット運動状態
2輪差動駆動型ロボット運動状態

if Vl > Vr → ロボットが右方向へ回転する
if Vl = Vr → ロボットが直進または後退する
if Vl = -Vr → ロボットが車軸中心Cまわりに回転する、回転半径0m

運動学モデル

$$\begin{pmatrix}x\\y\\θ\end{pmatrix} = \begin{pmatrix}cosθ & 0\\sinθ & 0\\0 & 1\end{pmatrix} \begin{pmatrix}1/2 & 1/2\\1/l & -1/l\end{pmatrix} \begin{pmatrix}Vr \\ Vl\end{pmatrix}$$

以上。

研究開発・検証試作に提案するロボット翔・電子部品ストアにロボット・ドローン関連部品が品揃えています。どうぞご利用ください

DCブラッシュモータのPID制御

古典制御

モータへの入力(PWM制御のオンの時間幅より得られた正弦波の交流電圧)とモータからの出力(エンコーダより得られたモータ軸の回転後位置の値)に注目して、しかしピッタリ、しかも早く回転後の目標値に達するには、入力値と出力値は単純に線形関係では済まず、以下のイラストに示される、PID(P:エンコーダ出力値と目標値の差の線形比率成分、I:エンコーダ出力値と目標値の差の積分成分、D:エンコーダ出力値と目標値の差の微分成分)が考案された古典制御である。

Wikipedia PID制御のブロック図
Wikipedia PID制御のブロック図

PID制御の実現について、以下のようにArduinoボードに実装する。

// p->output:モータへの入力、p->Encoder:モータからの出力
input = p->Encoder - p->PrevEnc;
Perror = p->TargetTicksPerFrame - input;
// PIDのP成分、I成分、D成分を線形合成する
output = (Kp * Perror - Kd * (input - p->PrevInput) + p->ITerm) / Ko;
p->PrevEnc = p->Encoder;
// 簡略化を図るゆえにoutputの最大値の判定およびその際の処理を省略する
output += p->output;
p->ITerm += Ki * Perror;
p->output = output;
p->PrevInput = input;

PID制御のP I Dに伴う係数のKp Ki Kdが、以上ソースコードを実装したArduinoボード、モータコントローラ、モータを接続して、ロボットの実重さ、実走行環境にて実験を行い、Kp Ki Kdを決める方法がある。これを別途記述とする。

以上ソースコードの出典は以下のとおり、但し簡略化を図るゆえにソースの一部を削除したことがあり、ご注意願います。

https://github.com/hbrobotics/ros_arduino_bridge/blob/indigo-devel/ros_arduino_firmware/src/libraries/ROSArduinoBridge/diff_controller.h

現代・ポスト現代制御

現代制御では状態空間モデルが用いられて、ポスト現代制御では代表的なものにロバスト制御や適応制御がある。ニューラルネットワークを用いる深層学習、強化学習の活用が期待される。

以上。

研究開発・検証試作に提案するロボット翔・電子部品ストアにロボット・ドローン関連部品が品揃えています。どうぞご利用ください

ROS・Unity・ロボット・ドローン姿勢制御に関わるクォータニオン

オイラー角による回転行列の表現

coordinate
coordinate

物体を座標系とともにx軸、y´軸、z´軸まわりの順にそれぞれ角度ϕ、θ、ψだけ回転させたときに、物体の位置の変換を表す回転行列は、

euler_angle
euler_angle

と表する。 3つの角度ϕ、θ、ψ をオイラー角と呼ぶ。

しかし、以下のイラストのとおり、オイラー角による姿勢制御の弱点(Gimbal lock)があり、例えば西方向のY軸を90度傾けると、X軸とZ軸が同軸となってしまい、姿勢制御が困難となる。

ジンバルロック
ジンバルロック

このジンバルロックを解消するのがクォータニオンの出番だ。

クォータニオンによる回転の表現

ROSではクォータニオンのq=(x,y,z,w)を虚数形式で

q=ix+jy+kzq=ix+jy+kz+W

と表する。原点を通す回転軸を表す単位ベクトルa=(ax,ay,az)で、この回転軸から物体軸の回転角度がθの場合は、クォータニオンは

(x,y,z,w)=(ax*sin(θ/2), ay*sin(θ/2), az*sin(θ/2),cos(θ/2))

となる。

以下の例では、平坦地面にて辺長1mの正方形に沿って自律移動ロボット(クローラ)に走行させて、動作を確認する。

※ROSでは、ロボットの位置&姿勢の表現について、ロボットの中心(センタ・ポイント)または、ロボットにある他のポイントの位置はx,y,z(m)、姿勢はそのポイントのクォータニオンにて表する。

from geometry_msgs.msg import Pose, PoseWithCovarianceStamped, Point, Quaternion, Twist  
...
locations['square_vertex_1'] = pose = Pose(Point(1.0,0.0,0.0), Quaternion(0.0,0.0,0.0,1.0))
locations['square_vertex_2'] = pose = Pose(Point(0.0,1.0,0.0), Quaternion(0.0,0.0,0.707,0.707))
locations['square_vertex_3'] = pose = Pose(Point(0.0,1.0,0.0), Quaternion(0.0,0.0,0.707,0.707))
locations['square_vertex_4'] = pose = Pose(Point(0.0,1.0,0.0), Quaternion(0.0,0.0,0.707,0.707))
...

クォータニオンからオイラー角へ変換する

geometry_msgs::Quaternion orientation = msg->pose.pose.orientation;    
tf::Matrix3x3 mat(tf::Quaternion(orientation.x, orientation.y, orientation.z, orientation.w));    
double yaw, pitch, roll;    
mat.getEulerYPR(yaw, pitch, roll);

オイラー角からクォータニオンへ変換する

tf::Quaternion q;
q.setRPY(Out_X, Out_Y, Out_Z);
sensor_msgs::Imu imu_data;
imu_data.orientation.x=q[0];
imu_data.orientation.y=q[1];
imu_data.orientation.z=q[2];
imu_data.orientation.w=q[3];

以上

研究開発・検証試作に提案するロボット翔・電子部品ストアにロボット・ドローン関連部品が品揃えています。どうぞご利用ください

3DR Pixhawk Mini フライトコントローラー キット

3DR Pixhawk Mini フライトコントローラー キット
3DR Pixhawk Mini フライトコントローラー キット

概要

3DR Pixhawk Mini Autopilot & Micro M8N GPS コンパス付き & PM06 PDBボードのフライトコントローラーキットです。3DR Pixhawk MiniオートパイロットはPixhawkの次世代進化バージョンです。 元のPixhawkのサイズの約1/3で、より強力なプロセッサとセンサーを備えています。PPX4オープンハードウェアプロジェクトに基づいており、PX4フライトスタック用に最適化されています。

主な仕様

メイン・プロセッサ

・STM32F427 Rev 3

IOプロセッサ

・STM32F103

センサ

・Accel / Gyro / Mag:MPU9250
・Accel / Gyro:ICM20608
・気圧計:MS5611

電圧定格

・パワーモジュール出力:4.1~5.5V
・最大入力電圧:45V(10S LiPo)
・最大電流検出:90A
・USB電源入力:4.1~5.5V
・サーボレール入力:0~10V

サイズ・重量

・38x43x12mm
・15.8g

GPSモジュール

・GNSS受信機:ublox Neo-M8N
・コンパスHMC5983
・重量:22.4g
・サイズ:37x37x12mm

インタフェース

・1×UARTシリアルポート
・Spektrum DSM / DSM2 / DSM-X?衛星対応
・フタバSBUS?対応
・PPM合計信号入力
・I2C
・CAN
・ADC
・内蔵マイクロUSBポート

開封動画

販売サイト

3DR Pixhawk Mini フライトコントローラー キット

以上です。

研究開発・検証試作に提案するロボット翔・電子部品ストアにロボット・ドローン関連部品が品揃えています。どうぞご利用ください

Zaif web オーダーツール

Zaifさんへの注文はオフィシャル画面で通らないときがあり、果たして画面がフリーズとなり、売買タイミングが失ってしまう。なので注文が板に載せるまで注文リクエストを繰り返すツール作成した。

主な機能

1)資産、価格情報を取得
2)買い注文・売り注文を出す
3)投げた注文の状況を確認する
4)投げた注文をキャンセルする

環境

python3.6 or above、Flask、zaif-client

実装手順

git clone https://github.com/soarbear/zaif-order-tool.git
cd zaif_order_tool
sudo pip3 install flask
sudo pip3 install zaif-client
python3 app.py
→ブラウザを立ち上げて http://localhost:5000/ にアクセスしてみる。

免責事項

このツールのご利用は自己責任でお願いします。

ソースコード

ソースコードはgithubに公開済み→github

研究開発・検証試作に提案するロボット翔・電子部品ストアにロボット・ドローン関連部品が品揃えています。どうぞご利用ください