リニアガイドをArduino+JetsonNano+Webカメラで動作させる

リニアガイドをArduino+JetsonNano+Webカメラで動作させてみたのでその備忘録用の記事となります。

まずはステッピングモーターを動かしてみる

Arduino と A4988 でステッピングモーターを制御する方法

TB6600を使ってステッピングモータをArduinoで動作させる

上記の記事を参考にしてステッピングモーターを動かしてみます。

先にA4988のほうで動かしてみました。

TB6600のほうでも動かしてみました。

 

TB6600のインターフェース

TB6600のインターフェースはこのようになっている。

配線はこのように接続している。
PUL+,DIR+,ENA+ ⇔ Arduinoの5Vを接続
DIR- ⇔ ArduinoのPin12を接続、0Vまたは5Vを入れて回転の向きを変更
ENA- ⇔ ArduinoのPin11を接続、5Vでステッピングモーターが動かすことができ、0Vでは動かせない
PUL- ⇔ ArduinoのPin13を接続、パルス信号を入れて回転数と速度を制御
GNDとVCC ⇔ 駆動用の電源(9V~42V)を接続、ステッピングモーターの仕様に合わせる

簡単なコードは以下の通り。

設定方法についてはこちらの動画がとても参考になる

リニアガイドを組み立てて動かしてみた

リニアガイドを組み立てて動かしてみたときのコードは以下の通り。TB6600とArduino MEGAを使用し、X軸・Y軸・Z軸にはそれぞれ2個ずつリミットセンサを取り付けている。

参考にしたのはこちらのページ

How To Control a Stepper Motor with A4988 Driver and Arduino

小型リニアアクチュエータをArduino+A4988+CNCシールドで駆動させる

XYZ方向に同時に動かせるように変更してみた

XYZ方向に同時に動かせるように変更してみた。また動き出すときに加速するような処理を追加してみた。

 

ロボットハンドを動かしてみた

次にロボットハンドのプログラムを作成し、Arduinoとリレーを接続して動かしてみた。pinに接続するのは8番のみでいい。

WebカメラとJetsonNanoとArduinoを連携して動かす

リニアガイドの座標系

リニアガイドの座標系は以下のようになっている。まずWebカメラを設置し、オレンジの範囲が映るように位置を調整する。

Webカメラからの映像で物体検出を行い、水色の範囲の座標系に変換している。水色の範囲はロボットハンドの中心位置が移動する範囲となっている。

初期ポジションには手動で動かしておくものとする。

Arduino側に送信するコマンド例

ロボットハンドの移動位置はJetsonNano側からArduinoに送信されるパルス数によって決まる。

例えば以下のコマンドを送信すると、左方向に400pulse(72mm)、前方向に400pulse(72mm)、上方向に400pulse(72mm)移動する。

・START L 0400 F 0400 U 0400 O

同様にほかのコマンド例を示す。コマンドのフォーマットは以下のように設定している。

START␣左右方向(LまたはR)␣移動パルス␣前後方向(FまたはB)␣移動パルス␣上下方向(UまたはD)␣移動パルス␣開閉方向(OまたはC)

START L 0200 F 0000 D 0000 O     左方向
START R 0200 F 0000 D 0000 O     右方向

START R 0000 F 0200 D 0000 O     前方向
START R 0000 F 0200 D 0000 O     後方向

START L 0000 F 0000 U 0200 O     上昇
START L 0000 F 0000 D 0200 O     下降

START R 0000 F 0000 D 0000 O     開く
START R 0000 F 0000 D 0000 C     閉じる

Arduino側のシーケンス図

リニアガイド・Arduino・JetosonNanoの回路図

回路は以下のように接続する。今回は12VのDCモーターも利用しているため、駆動用の電源は24Vから12Vに降圧している。

リニアガイドの組み立て

スイッチの1、2、3はパルス数(MOTOR_STEPS)に合わせて切り替える。今回は400のため、ON・OFF・ONに設定する。

スイッチの4、5、6はリニアガイドにかかる負荷に合わせて切り替える。Z軸は一番負荷がかかる予定なので4、5、6のスイッチを全てOFFにしてトルクを最大にする。

Arduino側の処理

まずはArduinoに書き込むソースは以下のようにする。シリアル通信で文字列を取得し、文字列に含まれるパラメータを判定してステッピングモータードライバを制御する。

 

JetsonNano側の処理

JetsonNano側の処理については省略する。Webカメラから映像を取り込み、物体検出を行ったのち、Arduinoへ文字列を送信している。

実際に動かしてみた

まずは以下の準備を行う。
①ArduinoとJetosonNanoをUSBケーブルで接続
②JetosonNanoとモニターをHDMIケーブルで接続
③JetosonNanoにモバイルバッテリーを接続し、電源を入れる
④リニアガイドの位置を初期ポジションに移動しておく
⑤リニアガイドの動力電源を入れる
⑥JetosonNanoのターミナルを起動し、以下のコマンドを実行する

上記を実行してしばらくするとリニアガイドの初期動作(UP動作)が開始される。

台形制御を導入

Arduinoのプログラムを最適化し、騒音対策で台形制御を導入してみた。また、リニアガイドの固定金具の下に防振ゴムを置き、防振対策を行ってみた。結果として、騒音のほうはまだかなりする状態となっている。