忍者ブログ
ロボット、千葉ロッテマリーンズについていいかげんなことを書きます。
[494]  [493]  [492]  [491]  [490]  [489]  [488]  [487]  [486]  [485]  [484
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

色々試してみた結果以下の製品を使う事になりました。

地磁気、加速度センサ
LSM303DLHC

1500円は手ごろな値段だと思ったのでこれにしました。
姿勢の計測に使います。
さすがに加速度センサの計測値を二重積分して現在位置を求めるのは無茶なのでやめました。

角速度センサ
L3GD20

なんでも430円の角速度、角加速度センサがあるらしいですが、持っていないので上のセンサを使います。加速度センサの計測値と合わせて姿勢を計算しようとしたのですが、まだ実装できていません。姿勢は地磁気、加速度だけで計算しています。なので今の所は角速度の計測値をデータポートから出力する事にしか使っていません。


測距センサ
GP2Y0A21YK ×4

とりあえず近い所に障害物を検知すると避けるようにします。
クローラーの前後に2つずつ取り付けます。
本当は3つ取り付けたいのですがアナログ入力ピンが全部埋まっているので2つで妥協します。
後は制御でなんとかカバーします。

モータードライバIC
TA8428K

比較的流せる電流値が大きいのでこれにしました。
と言うか130モーターなんか使わなければこんなにモータードライバで苦労する事もなかったような気もしますが、組み立てるのが面倒になりそうなので仕方ないです。
7V以上が動作電圧になっていますが、試してみたところ6Vでも動作するみたいです。
130モーターなので3Vぐらいにしたいのですが、さすがに3Vでは動作しないみたいです。
ただ、6Vを入力すると電圧のドロップで3~4Vぐらいになるのでちょうどいい感じになっているみたいです。


PWM出力ドライバー
PCA9685

今さらですけどEdisonでサーボを制御する方法って何かないのですかね?
多分Arduinoでサーボを制御する場合はPWMを使うのではなくて直接HIGHとLOWを一定時間で切り替えていると思うのですけどEdisonで同じ事はできるのでしょうか?sleepの精度が無理な感じがするのですがよくわからないので上記の製品を使います。
本当はarduinoのシールドではなくてこの製品を使いたかったのですが、いつ見ても在庫切れなので今回は妥協します。値段はあまり変わらないのですが多少大きいのが厳しいですね。同じチップを使っているので別にどちらでも動作はできるとは思います。




後はクローラー作成に必要なものなので値段や入手しやすさとかで選んでいます。
自分で加工は全くしないようにしています。RTMコンテストに出すかどうかは分かりませんが、加工するとなると動作できる可能性が下がりそうなので避けていきます。

ライトダッシュモーター ×2

モーターの性能
を調べてみて、消費電流3A以下でちょうどよさそうなのを選びました。
まあ4Vぐらいの電圧が加わるので、実際はもっと大きな電流が流れると思うのですが・・・まあ多分大丈夫だろう。多分。
あまり関係ないけどTA7291Pでプラズマダッシュモーターを制御しようとするとピクって動いた後に全く動かなくなって、TA7291Pがやたらと発熱していました。プラズマダッシュモーター恐ろしい子。

トラック&ホイールセット ×4

適当なのを選びました。
下のユニバーサルプレートLと組み合わせた制作例で4つキャタピラを使っているようだったので4つ使います。作ってみて分かったのですが付属している車軸の長さの関係で2つずつ使わざる得ないようですね。

ユニバーサルプレートL 210×160mm ×2

アームを搭載できるように少し大き目なのを選びました。


シングルギヤボックス 4速タイプ ×2

上記のトラック&ホイールセットと簡単に組み合わせられそうなのがこれなのでこれにします。


ユニバーサルプレートセット ×2

実の所プレートが目的ではなくて、付属の部品を測距センサの取り付けに使います。
余ったプレートを左右に取り付けていますが飾りです。


あとはロボットアームを買ってください。

4自由度ロボットアーム

6自由度のアームは少し高いので4自由度のアームを買った方が良いと思います。


それからEdisonはArduinoキットを使っています。

Intel Edison Kit for Arduino

Breakout Boardキットを使う場合はPWM、I2Cの信号をレベル変換してください。



後は必要に応じてブレッドボード、ジャンパーコード、コネクタ付きコード、コンデンサ、スペーサー、電池ボックス、ACアダプタ、USB-MicroUSBケーブル等を買ってください。




これらを使って以下のようなロボットを作成しました。




配線がごちゃごちゃしていますが気にしない事にします。
EdisonとPWMサーボドライバーがやたらと面積を取るため二段になっていますが、EdisonをBreakout Boardキットに変更して、PWMサーボドライバは在庫切れで買えなかった方に変更、さらに回路基板を自作すればブレッドボードを使うより小さくできるので2段にする必要はないかもしれないです。




RTCは以下の4つを作成しました。

まずはGUIのRTCです。



GUIでアーム、クローラーを操作するとデータポート、サービスポートで他のRTCに通信してアーム、クローラーを操作します。


InPortの仕様は以下のようになっています。

crawlerPos TimedPose2D型 クローラーの位置、姿勢

OutPortの仕様は以下のようになっています。

crawlerTargetPos TimedPose2D型 クローラーの目標位置、姿勢
crawlerTargetSpeed0 TimedDouble 右車輪の速度(ただし、以下で説明するシステムではモーターの電圧としている)
crawlerTargetSpeed1 TimedDouble  左車輪の速度




次にアーム制御RTCです。
 

サービスポートで目標位置を入力すると現在位置からの軌道を計算し、そこから目標関節角速度を計算します。ただ今回はサーボが位置制御しかできず、関節角度を取得する手段もないため目標関節角速度を積分した値を目標関節角度にしています。

OutPortの仕様は以下のようになっています。

jpos TimedDoubleSeq 目標関節角度
mpos TimedDoubleSeq モーターの目標角度


コンフィギュレーションパラメータの仕様は以下のようになっています。

init_angle1 double 関節1の初期角度 0
init_angle2 double 関節2の初期角度 1.5
init_angle3 double 関節3の初期角度 -0.5
init_angle4 double 関節4の初期角度 0
init_gripperPos double グリッパーの初期位置 0



次にサーボ制御RTCです。

 

RCサーボへの目標角度をInPortから受信して、PCA9685搭載のデバイスにI2CでPWMのデューティー比を指令します。

InPortの仕様は以下のようになっています。

in TimedDoubleSeq サーボモータの目標角度



コンフィギュレーションパラメータの仕様は以下のようになっています。

I2C_address int PCA9685のI2Cスレーブアドレス 0x40
I2C_channel int I2Cポート番号 1




最後にクローラー制御RTCです。



InPortの仕様は以下のようになっています。

in0 TimedDouble 左モーターの電圧
in1 TimedDouble 右モーターの電圧



OutPortの仕様は以下のようになっています。

gyro TimedAngularVelocity3D ジャイロセンサーの計測値(rad/s)
range0 TimedDouble 距離センサ(右前)の計測値(m)
range1 TimedDouble 距離センサ(左前)の計測値(m)
range2 TimedDouble 距離センサ(右後)の計測値(m)
range3 TimedDouble 距離センサ(左後)の計測値(m)
acc TimedAcceleration3D 加速度センサの計測値(m/s^2)
magn TimedDoubleSeq 地磁気センサの計測値(gauss)
temp TimedDouble 温度センサの計測値(℃)
pos TimedPose2D センサ情報から計算した現在位置、姿勢(位置の計測は実装できていないので左右モーターの電圧が正の場合は前進、負の場合は後退するようにしてある)


センサで検出した値は括弧内の単位に変換してあります。



コンフィギュレーションパラメータの仕様は以下のようになっています。


motor0pwm0 int 右モーター制御用TA8428KのIN1に接続するピン番号 3
motor0pwm1 int 右モーター制御用TA8428KのIN2に接続するピン番号 5
motor1pwm0 int 左モーター制御用TA8428KのIN1に接続するピン番号 6
motor1pwm1 int 左モーター制御用TA8428KのIN2に接続するピン番号 9
gyroSensor int 1の時はジャイロセンサを使用する 1
gyroSensor_addr int L3GD20のI2Cスレーブアドレス 0x6A
rangeSensor0 int 1の時は距離センサ(右前)を使用する 1
rangeSensor1 int 1の時は距離センサ(左前)を使用する 1
rangeSensor2 int 1の時は距離センサ(右後)を使用する 1
rangeSensor3 int 1の時は距離センサ(左後)を使用する 1
rangeSensor0_Pin int 距離センサ(右前)の信号線と接続するアナログ入力ピンの番号 2
rangeSensor1_Pin int 距離センサ(左前)の信号線と接続するアナログ入力ピンの番号 3
rangeSensor2_Pin int 距離センサ(右後)の信号線と接続するアナログ入力ピンの番号 0
rangeSensor3_Pin int 距離センサ(左後)の信号線と接続するアナログ入力ピンの番号 1
LSM303DLHC int 1の時はLSM303DLHCを使用する 1
Acc_addr int LSM303DLHCの加速度センサのI2Cスレーブアドレス 0x19
Magn_addr int LSM303DLHCの地磁気センサのI2Cスレーブアドレス 0x1E
I2C_channel int I2Cのポート番号 1
rotOffset double posから出力する姿勢角のオフセット値 -1.1

以下は障害物回避の制御に必要なパラメータです。

bias double 障害物が近づいた場合にどの程度旋回を行うか?値が大きくなるほど旋回しやすくなります。 1.0
frontDistance double 回避運動を開始する障害物までの最長距離 0.5
backDistance double 回避運動を開始する障害物までの最短距離。この値より近い距離に障害物があっても回避運動を行いません 0.1
filter double センサが前後で2つずつしかないため後述する問題が発生します。それを回避するために余分に回避運動を取る必要があります。この値が大きいほど余分な回避運動が小さくなります。 0.05


まずセンサは2つ平行に取り付けてあるため以下のように測距センサで障害物が検知出来ていなくても回避運動が不十分で障害物に衝突する可能性があります。



測距センサをもっと外側に取り付けるか角度をつければ良いのですが、それでは正面の障害物が検知できません。そのため余分に回避運動をするようにしています。



これらのRTCを使って以下のシステムを構築できます。
GUI以外のRTCはEdisonで起動してください。






後は必要に応じてRTno対応サーボ制御RTCシミュレータRTCを使ってください。



それで一応実験はしたのですがまだ動画を撮っていません。
さすがに深夜に動かすのは近所迷惑なので後で撮ります。








にほんブログ村 科学ブログ ロボットへ
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・

人気ブログランキングへ
PR
この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
カレンダー
04 2024/05 06
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
フリーエリア
最新CM
[08/31 ysuga]
[08/31 Nobu]
[08/31 ysuga]
[12/11 Nobu]
[12/11 Kanamura]
最新TB
プロフィール
HN:
Nobu
年齢:
35
性別:
男性
誕生日:
1988/09/22
職業:
あれ
趣味:
妄想、自堕落
バーコード
ブログ内検索
P R
カウンター
忍者ブログ [PR]