忍者ブログ
たまにロボットを考えるブログ・・・。
×

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

簡単な部品でノンバックラッシ伝達ができないかと思ってチャレンジしました。
2本のテグス間にテンションをかけます。
小プーリで270deg動きます。



忘備録

回転の伝達なので、歯車かプーリかの2択です。
バックラッシのない歯車は超激レアなので重課金です。
タイミングベルトでプーリも面倒です。
ノンバックラッシにしようと思うと、いずれの場合も専門の加工が必要なので面倒です。

状況を有限角度に絞って簡単にすれば

・リンク

という選択肢があります。
が、リンクはノンバックラッシではありません。
重い部品が増えます。
構造物が増えることは作るのがめんどくさくなります。

結果として、リンクとプーリを組み合わせた感じにしました。

以下、こんな感じに作る。

2本のナイロンテグスをそこそこ同じ長さでつけて、
プーリを動かしてテンション調整して完成。

材料
3Dプリント部品4点
M3のねじが2本
6900ZZが4個
M2のねじが4本
ナイロンテグス適当

拍手[0回]

PR
忘備録

Cでテキストファイルを処理したいとき、アドレスのパスをどうやって渡すかいつも面倒だと思っていました。

で、よく考えると実行形式のファイルに乗っけて起動するタイプのソフトってありますよね。

だからそういうのできるんだと思ってググりました。

http://achapi2718.blogspot.jp/2012/06/c_1002.html

簡潔にまとめていただいているサイト様がありましたので記録しておきます。

後日、トライします。

拍手[0回]

超素人が、pythonでGUI開発を軌道に乗せるまで備忘録

いろいろググるとanacondaをインストールすることになります。

https://www.continuum.io/downloads

windows版の32bitを10分ぐらいでダウンロードして、
実行して
30分弱ぐらいのインストールをします。

この時点で時間がかかりすぎです。10人以上のウルトラマンが帰ってしまうでしょう。

もうそれだけで環境の準備は終わります。

いろいろインストールされて、何をやればいいのか分からなくなります。

で何をすればいいかというと

スタートメニュー→あなこんだ→jupyter notebook
を開きます。

そうすると、ブラウザの新しいたぶとして開かれます。

マイドキュメントとかが見えると思うので、
エクスプローラとかでpython用のフォルダを作っておく。

こちらが参考になります。
http://pythondatascience.plavox.info/python%E3%81%AE%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83/jupyter-notebook%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86/

と思いきや、ブラウザは立ち上がらないです。
なんでか分かりません。

で、アナコンダナビゲーターというのを開きます。
そこから、jupyternotebookをローンチュします。

あとは大丈夫です。

pythonのコードを書いて、shift enterします。

でき上がりです。


GUIをします。

guiする方法は数多ある様ですが、アナコンダにはPyQt5が盛り込まれていました。

で、
http://d.hatena.ne.jp/mFumi/20141112/1415806010

こちらのサイトのコピペを実行してみます。

普通にできます。

エクストラステージ
新しい環境を入れる時は順風満帆ではないのが常です。

実行できるんですけども、
The kernel appears to have died. It will restart automatically.

とjupyterさんに言われます。

で、
http://stackoverflow.com/questions/40094086/python-kernel-dies-for-second-run-of-pyqt5-gui

こちらを参考に

app = QApplication(sys.argv)
がいけないらしいので

    app = QApplication.instance()
    if app is None:
       app = QApplication(sys.argv)

とします。

終わり。













拍手[0回]

創生×⇒創成○

だそうです。
大きな問題ですね。

シミュレーションに迫られておりまして、非線形微分方程式を積分したくなっております。

解析解は出ませんどころか、点群データなわけで。

シミュレーションに迫られて います。

5年前にこのブログでもルンゲクッタ法にふれていましたが。
すっかり忘れたのでもう一度記事にします。

参考サイト様

簡単なシミュならオイラー法を使います。
dx/dt=Ax
であれば,刻みのステップをhとして
x1=x0+A*x0*h
という漸化式なので次々と計算すればいいです。
ただ、1次の傾きを積分していくので誤差が積もります。
そこで誤差の少ない方法が世間には広まっているのです。

その例としてルンゲクッタを選びました。
↑の式で進めると
a b c dという4つの係数から、理想的な傾きを求めるようです。
数値計算の教科書とかだと、一般的な常微分方程式を念頭に置いているので、単純な式だと返って分かりづらいものでした。
引数?がだいぶ減るので簡単です。
例えば、
dx/dt=A*t*x
みたいな場合であれば、もう少し教科書寄りの式に成ります。

で、どのくらい精度がいいかということですが


ただのexpカーブが解析解となりますが、このようにオイラーだと離れていくところが付いていくわけです。

でもって、簡単なところはこの辺で。

もう少し応用の利く例を置いておきます。
運動方程式であれば、2階の微分方程式だと思います。
d^2x/dt^2=Bx
みたいな。
Bが負であれば単振動です。

計算は、状態方程式のように2つに分けて、y1,y2の連立の1階微分方程式にします。
 

さっきと同様にa b c d を計算しますが、
y1とy2の流れを交互にやることに注意します。
y2のb、つまりb2はa1を使って計算する必要があります。
少し複雑です。

計算結果です。
B=-1だと思いますが。
ざっくりこんな状態です。

オイラーでもほとんど一緒です。
ですが、解析解との差分をみると
このようになっているので、ルンゲクッタの頑張りようがわかるのではないでしょうか。

ダウンロード

元エクセルを置いておきます。内容は整理していませんのですいません。

さて、2階だろうが、連立だろうができるようになりましたので、
多質点の運動方程式に手が届きます。

それはまた今度。

拍手[0回]

歯車どうやって作るシリーズ再開です。

ぜんかい、図形を少しずつずらしていくと曲線が見えてくる⇒これが歯だ

という展開でしたが、ではその曲線そのものはどんな関数としてあらわされるのか?

で、ネットサーフィンの果てに"包絡線"というものを見つけました。

参考サイト様http://hooktail.sub.jp/mathInPhys/envelope/

直線をずらしていく
線が一杯引ける
さて、その線群はどんな曲線を描くか?

現在の理解レベル:
①曲線に一つ変数を加えて、ずらすことを表現する ← 歯車は1自由度だから当然か…
②その曲線群関数を加えた変数で偏微分する
③連立させて変数を消す
④勝利

・・・☆

というのは難しいので、既にある曲線から接線の群を取り出し、曲線を見いだすという実験をしてみます。
2次関数は
てなかんじで接線の方程式がもとめられますね!

接線を一杯描いてみる&2次関数と重ねる

JPEGで張り付けるとカスみたいな画質ですね。
ちなみにθを0.5:5まで正負いれてみた接線と、
2次関数は分かりづらかったのでアスタリスクで出しました。
間違えた線も入ってますけど、
まーこんなかんじっていうイメージを掴むには充分と思います。

では、やってみますか
①曲線に一つ変数を加えて、ずらすことを表現する ← 歯車は1自由度だから当然か…
②その曲線群関数を加えた変数で偏微分する
③連立させて変数を消す
④勝利

勝利しましたね。
世の中大したことありません。

はて、接線群の関数の偏微分とはどういう意味でしょうか?
偏導関数なので、接した時の向きを言っています。
で、それは(x,y,θ)を通ると言っているのです。

・・・よくわかりません。偏微分を勉強しましょう。


拍手[0回]

★ロボットを作っていくうえでギアが必要ですが、ギアはどうやって作るんでしょう?

・そもそも歯の形状って何なの。
・インヴォリュートってなんなの。
・なんでうまくかみ合うの。

などなどいろんな不思議と戦う必要があります。
かなり世の中は不思議でいっぱいです。


ググってみると加工法は分かります。
ラックをつかうのとピニオンカッターをつかうのと・・・いろいろです。
というわけで、まずはどうやって歯形を得るかを考えてみます。

歯形が得られれば、NCで作るとか3Dプリンタするとかチョロいですからね。

1、ラックが動く
歯車の材料は円柱です。
これにぎざぎざをつけます。

円柱にラックをグザグサ刺していけばいいらしいです。
どのくらいのペースでさすかっていうのは、ラックの並進速度とギアの基準ピッチ円の円周速度を一致させます。

で、台形のラックを動かすっておもえば
こんな感じです。
6ステップぐらい動かします。
ラックを移動→円柱を回転→加工ってなります。
台形の加工形状は円柱に付いて回ります。
加工形状はこんな感じになります。
いっぱいになってよくわかりません。
1ステップ目の加工形状は2ステップ目に回転します。
2ステップ目の加工形状は3ステップ目に回転します。
ステップが進むと加工形状がいっぱい重なります。



2、何度もラックがグサグサする
円柱に台形がぐさってなります。
で次のステップでは、前のステップの台形の加工形状に追加で加工がおこなわれます。
つまり2ステップ目は
ラックの移動と、加工の軌跡をかぶせた感じになります。
台形の穴に、ちょっとずらしてラックで削る感じですね。

ちなみに3ステップ目は
3つの台形を重ねた感じになります。



3、何回も繰り返すと歯形になる。。
ラックの位置は右方向に6ステップ
ギア材料の回転角度は時計回りに6ステップです。
6個の台形が重なります。
台形の左側面をみると歯形になってます。
あとは適当なスプラインでつなげればいいですね。





以上です。
これでみんな歯車が作れますね。おわり。




拍手[1回]

ジャイロを買って、サーボも買って、mbedもかって・・・

シリアル用の回路つけてなんにもしてない日々が流れていたので、ちょっとあそびました。

◆まずはじめに、近藤の半2重通信をmbedにどうつなぐかです。
回路図はこんな感じ
mbedからの信号を5Vにしつつ半2重通信をします。
なぜそういうことをしようと思ったのか、それはもう思い出せません。

 
↑は赤がサーボのピン、緑がマイコンのRXD、青がマイコンのTXDそれぞれの電圧です。
マイコンから出た信号がマイコンに入っていますが、まー読まないから関係ないと思います??
ほんとかなぁ。

◆ほんでもって、ICS3.5をさーぼとやるので、シリアルをはいてやる必要があります。
コマンド方式サーボKRS-6003HVの制御 その1
こちらのプログラムを参考にさせていただきました。

また、本家のリファレンスも参考にしました。

ざっくり、こんな感じ
Serial ko(p9,p10);//txrx

void setServoDeg(float deg)//+-135deg
{
    deg=deg+135;
    if(deg>270)deg=270;
    if(deg<0)deg=0;
    targetPosi = 3500 + (int)((deg*800)/27);
}

//↑3500~11500で0~270°動きます。

float getServoDeg(void)
{
    return (((float)(feedbackPosi-3500)*27)/800)-135;
}

/*----------------------------------*/
/* KONDOと角度                      */
/*----------------------------------*/
int set_posi(char id, int pos)
{
  unsigned char tx[3];
  unsigned char rx[6];
  int i;
  int data=0;
 
  tx[0] = 0x80 | id;
  tx[1] = (unsigned char)( (pos >> 7) & 0x7f);
  tx[2] = (unsigned char)(pos &0x7f);
 
  for(i = 0; i<3; i++){
    ko.putc(tx[i]);
  }
  //wait(16);
  for(i = 0; i<6; i++){
    rx[i] = ko.getc();
  }
 
  data = (int)(rx[4] & 0x7f);
  data = (data << 7) + (int)(rx[5] & 0x7f);
 
  return data;
}

int main(){

ko.baud(115200);
ko.format(8, Serial::Even, 1);

setServoDeg(もくひょうかくど);
feedbackPosi=set_posi(1, targetPosi);

↑それっぽいところだけ抜粋。
変数の宣言とか足りないと思う。

◆動かすだけじゃつまらないので、ジャイロとコラボしました。


カメラのジンバルっていうか、そんな感じの動画。
ジャイロの角速度"積分値"を、角度として入力すると、
回路の動いた角度だけ、サーボは逆転動作します。
つまり動いてないかのよう。
今回は5msごとにジャイロ取得、サーボに指令してます。
積分は何にも考えないで、
Σ(現在のジャイロ値×0.005)
です。



ジャイロは角速度を電圧にするんですけれでも、
ドリフトっていって動いてない時の電圧がだんだん増えていく弱点があります。

そこで、ハイパスフィルターとか淹れてみようって準備しました。
けど、動画の通りそこまで必要じゃなかったかっていう。

◆ハイパスフィルター
ゆっくりした変化を無視する方法がハイパスフィルターです。

こちらのプログラムを参考にしました。
簡単なデジタルフィルタの実装

ざっくりこんな感じで真似させていただきました。
// それぞれの変数は下記のとおりとする
// float samplerate … サンプリング周波数
// float freq … カットオフ周波数
// float q    … フィルタのQ値
float omega,alpha,a0,a1,a2,b0,b1,b2;
float freq=.01;
float q=0.7071;
float samplerate=200;
/*----------------------------------*/
/* ハイパスフィルターセット            */
/* Data入力                         */
/*----------------------------------*/
void setHPF(void)

omega = 2.0 * 3.14159 *  freq/samplerate;
alpha = sin(omega) / (2.0* q);
 
a0 =   1.0 + alpha;
a1 =  -2.0 * cos(omega);
a2 =   1.0 - alpha;
b0 =  (1.0 + cos(omega)) / 2.0;
b1 = -(1.0 + cos(omega));
b2 =  (1.0 + cos(omega)) / 2.0;
}
float in1=0,in2=0,out1=0,out2=0;
/*----------------------------------*/
/* ハイパスフィルタ出力            */
/* Data入力                         */
/*----------------------------------*/
float outHPF(float input)
{
// それぞれの変数は下記のとおりとする
//  float input[]  …入力信号の格納されたバッファ。
//  flaot output[] …フィルタ処理した値を書き出す出力信号のバッファ。
//  int   size     …入力信号・出力信号のバッファのサイズ。
//  float in1, in2, out1, out2  …フィルタ計算用のバッファ変数。初期値は0。
//  float a0, a1, a2, b0, b1, b2 …フィルタの係数。 別途算出する。
// 入力信号にフィルタを適用し、出力信号として書き出す。
float output;
output = b0/a0 * input + b1/a0 * in1  + b2/a0 * in2
                             - a1/a0 * out1 - a2/a0 * out2;
 
in2  = in1;       // 2つ前の入力信号を更新
in1  = input;  // 1つ前の入力信号を更新
 
out2 = out1;      // 2つ前の出力信号を更新
out1 = output; // 1つ前の出力信号を更新

return out1;
}

ハイパスフィルターですから動画見たいに、動きが無くなる=高周波成分は0になろうとします。

普通はローパス分を別のセンサーとかを入れて相補するっぽいですが難しいことは・・・。


◆◆◆想像以上に積分値安定してるんで感動した。



拍手[0回]

軌道上を通った場合の関節角度の決定方法は前回の通りです。

で軌道を決定する上での残ったパラメータは
●Sinの周期の長さ
●振幅
●↑とロボットのサイズ比
です。

こんかいは
2π:1:???
で???のところを、0.5,0.75,1.5(ロボットの3節を1:2:1とする)
というのを試しました。
で、ベターだったのは1.5です。

・・・ちなみに0.75では推進できませんでした。床にごむしーとを敷くと推進できましたが・・・つまり、摩擦が充分であればもっといい感じになるのでしょう。・・・広大なごむしーと・・・ほしぃ。

生成した軌道は

こんな軌道ととおり、
角度としては

こんな感じになります。
後ろの関節と、前の関節の軌道は違うものでした。
「どっちが前?」というのは綺麗に分かれるようです。

実機の動作は

このようになり、前後というのははっきりしています。

動画からは、
・推進出来る時、出来ない時
・想定した軌道とのズレ
が明確に分かります。

なので、なるべく「推進できる時」というのを1周期ないで多く確保する軌道
というのを推定できると思いますが・・・

ま、あ、そろそろ飽きた・・・か・・・な。

拍手[0回]

ある軌道上に決まった長さのヘビロボの関節をのせて移動させる。

と、すべての関節点は関節間距離を保ったまま、軌道上を通過する必要がありますので、

全開のルールに基づき
こんな関数を

こんな風にループで回して

こんなグラフがかけます。

あとは、ヘビの全長とsinカーブの周期をどんな比にするかでしょうか?

拍手[0回]

くねくね移動がうまくいかないので、
上手くいくくねくね軌道を幾何学的に決定します。


偉い人から
「蛇行軌道にすべての車輪がのっかっていて、接線の方向を向いているべき」
とのお話を頂きましたので、それを検討します。


①sin関数にのっかる
②車輪が軌道にのるように角度を決定する
③もうひとつの車輪も同様に角度を決定する

だと思いましたが!
良く考えると・・・
平面的には2自由度、3節あります。
1個目の車輪は、のせられます。
2個目は?

1個目の車輪の位置と姿勢、例えば、
x=0,y=0,θ=45°
とかだとします。

すると、1個目の関節の位置は
x=cos45,y=sin45
です。

そこから1つめのモータの角度を変えて、
2個目の車輪を軌道に乗るように決めます。

すると、角度は接線方向になりません?!

困りました。
モータ1個では、位置&角度を決めるのは無理で、どちらか一方しか決められません。

困りました。

でもまあ、仕方ないので、接線は諦めることにしまして
各関節が、軌道に乗るような角度を決めていこうと思います。




と思いましたが、これも意外と大変。

3節あるヘビロボットの1節目のリンクだけを考えます。
このリンクの両端点がsin関数上に乗ってくれればいいのですが・・・
どうやって載せるんでしょう?
リンクを直線だと思って、x軸からの傾きを決める他ありません。

これはつまり、中心がsin関数上の円とsin関数の交点を求める問題です。

が、そのとき方については僕は収束計算以外の方法を知りません。
例えば
y=0,x=0からx=x,y=sinx
までの距離は、平方根の中に三角関数の2乗があるというこれまた難しい。

で、
その距離=リンクの長さ
という方程式を解く必要があるわけですが、
sqrt ( x*x + sinx*sinx ) = リンク長さ

うんむずかしい
。。。


プログラムを書く感じです。

・sin関数1周期を移動量、振幅を移動量にして、m単位でロボットの実現できるサイズで用意します。それを軌道関数(x)にします。
・xを入れます。→軌道関数(x)がもとまります。
・始点を決めます。
・始点からxを少し増やして、軌道関数を求めます。で距離を求めます。
・・・上を距離がいい具合になるまでやります。そのときのxをx1として覚えます。
・x1からすこしずつxを増やし、またちょうどいい距離までやってそれをx2とします。
・同様の方法でx3を決定します。
・・・これで、一番最初のヘビの形が決まりました。
・これを軌道関数1周期分計算します。
・データテーブルとして保存します。
・mbedに入れます。

これで動くんじゃね。









拍手[0回]

プロフィール
HN:
Adel
年齢:
28
性別:
男性
誕生日:
1989/09/17
職業:
会社員
趣味:
モチベーション探し
自己紹介:
ロボットつくるのが夢
ブログ内検索
カウンター
君は何人目かな
カレンダー
08 2017/09 10
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
最新コメント
[09/06 ジョー]
[06/22 fake serpenti watch bvlgari]
[06/22 where to buy hermes clic clac bracelet faux]
[04/09 blacklab]
[02/16 オイルマン]
最新トラックバック
コガネモチ
忍者AdMax
アクセス解析
忍者ブログ [PR]