編集履歴一覧に戻る
nakkyiのアイコン画像

nakkyi が 2021年05月04日19時24分19秒 に編集

@[youtube](の追加

本文の変更

<コントロールボードは頭の中のobuniz-1Yです> ![キャプションを入力できます](https://camo.elchika.com/4a9f0b31dc0e731a45aa8be955d91c15edbe4e0a/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62333466356663372d613730652d343463362d613263362d6132336663343963626131382f37333662303139662d363263392d343266302d386331312d643833373038616336306462/) **< もくじ >** 1.はじめに 2.用意した物 3.プロジェクト 4.回路図 5.まとめ **1.はじめに**  obniz の仕様を見て、これでロボットができると思いました。 私は趣味のひとつで、以前からロボットはいろいろ作っていました。  今回、obnizで二足歩行ロボットを作ってみようと思いました。 JavaScriptのプログラムは初めてです。イチから順番にやることにしました。  ロボットは、友人が製作したもので、以前ロボット用のボードを使って動かした機体を使います。  名前は「オブちゃん」にしました。コンテストの終わりまでどこまで出来るか挑戦です。 皆さん、温かい目で見守ってください。 **2.用意した物** 2-1  足歩行ロボット × 1体    機体の構成(サーボモーター 7個)    ・腰ヨー 1個    ・肩ロール 2個    ・腿ピッチ 2個    ・足首ピッチ 2個    ・足はリンク機構です。 2-2 obniz-1Y × 1個 2-3 サーボ接続用基板 × 1個   ・6個のサーボモーターを駆動させるため自作です。 **3.プロジェクト** 3-1 サーボモーターを動かす。  はじめに、obunizでサーボモーターを動かすプログラムのテストを行います。  3-1-1 サーボモーターサンプルコード ・obunizのサンプルを使って、1個のサーボモーターを動かしてみた。 ![キャプションを入力できます](https://camo.elchika.com/ea91ed8e8cd8db3836f1684fb0d51bde0f1e8d9e/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62333466356663372d613730652d343463362d613263362d6132336663343963626131382f62343039636437612d303866642d343832662d626265622d636235313561333237336237/) ・サンプルコードとコントローラー ![キャプションを入力できます](https://camo.elchika.com/43e353118037489c053ca0e4063288572a904948/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62333466356663372d613730652d343463362d613263362d6132336663343963626131382f66383163396630372d616562332d343630312d393734342d356131623436643063393339/) ・サーボモーター1個(動画)

-

https://www.youtube.com/watch?v=kRzHFrdO03c

+

@[youtube](https://www.youtube.com/watch?v=kRzHFrdO03c)

3ー2 サーボ接続基板を作る。  obunizのコネクターにはサーボモーターが4個しか接続できないので、接続用の基盤を作りました。(PWMが6個なので、6端子にしました。)  3-2-1 サーボ接続基板の製作  ユニバーサル基盤を加工して、ピンコネクターをハンダ付けしました。 ・サーボ基板の表側 ![キャプションを入力できます](https://camo.elchika.com/7913fe7c2d38776afc0eecf5feab4aa70a8b6836/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62333466356663372d613730652d343463362d613263362d6132336663343963626131382f33636261353863352d653436392d343832302d613337662d646339323065303430343864/) ・サーボ基板の裏側 ![キャプションを入力できます](https://camo.elchika.com/30c548915556f6c2fa8880ef1de5b3152cd3b2db/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62333466356663372d613730652d343463362d613263362d6132336663343963626131382f33656234303262322d653630382d346166652d613863612d623439376633656434666661/) ・サーボ基板にobunizを取り付け ![キャプションを入力できます](https://camo.elchika.com/1ccfb4c1ddbc4cca449865c87deed6e8dd4dd9cd/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62333466356663372d613730652d343463362d613263362d6132336663343963626131382f30393439323332642d373164622d346264322d613661632d383234363061663362386438/)  3-2-2 コントロール基板の取付  ロボットの頭部に、obunizコントロール基板をセッティングします。 ・この様にぴったりと収まりました。 ![キャプションを入力できます](https://camo.elchika.com/cb416635a12e7fd78a4aa6cb7652ff63627a126f/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62333466356663372d613730652d343463362d613263362d6132336663343963626131382f35623461666362632d326535352d343036632d623163652d396461356534633734313761/) **3-3 上半身サーボモーターの作動テスト**  上半身の、腰ヨー軸と左右の腕のロール軸のサーボモーターを動かしてみます。  3-3-1 3個のサーボモーターの配線  サーボモーターをコントロール基板のピンに配線します。   ピンはobniz側から、signal:、vcc:、gnd:です。  サーボモーターのコネクターはobnizの次の番号に刺します。   1番ピン 左腕サーボ24   2番ピン 腰サーボ8   3番ピン 右腕サーボ9 3-3-2 上半身のサーボモーターを動かす。  サンプルコードを変更して3個にサーボのソースコードを作りました。 ① ロールバーにより、それぞれのサーボモを動かします。 ![キャプションを入力できます](https://camo.elchika.com/448c28ca293bf6d206f51b9450537108b703b3e4/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62333466356663372d613730652d343463362d613263362d6132336663343963626131382f34636134613036612d393662382d343636342d613762662d326535313839643832343861/) ② 画面のロールバーをスライドさせて、各サーボモーターを動かす動画。 https://youtu.be/ikNNA3TFVto ③ ソースコード(ロールバー・サーボモーター) ```<html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <script src="https://obniz.io/js/jquery-3.2.1.min.js"></script> <script src="https://unpkg.com/obniz@3.14.0/obniz.js" crossorigin="anonymous"></script> </head> <body> <div id="obniz-debug"></div> <h1>ServoMotor</h1> <input id="slider1" type="range" min="45" max="180" /> <input id="slider2" type="range" min="60" max="120" /> <input id="slider3" type="range" min="0" max="135" /> <script> var obniz = new Obniz("     "); obniz.onconnect = async function () { var servo1 = obniz.wired("ServoMotor", {gnd:0, signal:1}); var servo2 = obniz.wired("ServoMotor", {gnd:0, signal:2}); var servo3 = obniz.wired("ServoMotor", {gnd:0, signal:3}); $("#slider1").on('input', function() { servo1.angle($("#slider1").val()) }); $("#slider2").on('input', function() { servo2.angle($("#slider2").val()) }); $("#slider3").on('input', function() { servo3.angle($("#slider3").val()) }); }; obniz.onclose = async function(){ $("#slider1").off('input'); $("#slider2").off('input'); $("#slider3").off('input'); }; </script> </body> </html> ``` 3-3-3 上半身のモーション作成  上半身の3個のサーボモーターを使って、「いやいや!」と「バンザイ!」のモーションをコントロールする。 ① 画面のボタンを押して、それぞれのモーションを発動させます。 ![キャプションを入力できます](https://camo.elchika.com/dcb9cf0a85c35dbd2dfcb028357ad8717cdbbb59/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62333466356663372d613730652d343463362d613263362d6132336663343963626131382f33316439306139302d383061332d343534612d383832622d313736663066616330396565/) ② 「いやいや!」と「バンザイ!」の動画です。 https://youtu.be/DDo4C7MAqeA   ③ ソースコード(上半身・ボタン・モーション) ```<html lang="en"> <head> ーーー省略(obnizのサンプルコードを使用ーーー <script> $("#bploading").text("RUNNING..."); (async function(){ var obniz, servomotor1,servomotor2,servomotor3, button1,button2; obniz = new Obniz('     '); await obniz.connectWait(); servomotor1 = obniz.wired("ServoMotor",{"signal":1, "gnd":0}); servomotor2 = obniz.wired("ServoMotor",{"signal":2, "gnd":0}); servomotor3 = obniz.wired("ServoMotor",{"signal":3, "gnd":0}); button1 = new ObnizUI.Button('イヤイヤ!'); button2 = new ObnizUI.Button('バンザイ!'); while (true) { await ObnizUI.Util.wait(0); if (button1.isTouching()) { servomotor2.angle(45); await obniz.wait(500); servomotor2.angle(90); servomotor2.angle(136); await obniz.wait(500); } else { servomotor2.angle(90); } if (button2.isTouching()) { servomotor1.angle(45); servomotor3.angle(135); await obniz.wait(1000); servomotor1.angle(180); servomotor3.angle(0); await obniz.wait(1000); } else { servomotor1.angle(45); servomotor3.angle(135); } } })(); </script> </body> </html> ``` ** 3-4 ロボットを立たせる。** 脚部の、腿ピッチ軸(左右)と足首ピッチ軸(左右)の4個のサーボモータを駆動し立ち上がり、座るモーションを作る。 3-4-1 下半身の4個のサーボモーターの配線 サーボモーターをコントロール基板のピンに配線します。   ピンはobniz側から、signal:、vcc:、gnd:です。  サーボモーターのコネクターはobnizの次の番号に刺します。   1番ピン 左腿サーボ3   2番ピン 左足首サーボ5   3番ピン 右腿サーボ22   4番ピン 右足首サーボ20 3-4-2 下半身のサーボモーターの駆動。  サーボモーターを駆動させ、真っすぐに立つモーション(初期位置)を作る。 ① 直立モーションの動画です。 https://youtu.be/WDyVnfaMI80 ② ソースコード(初期位置・直立モーション) ``` <html lang="en"> <head> ーーー省略(obnizのサンプルコードを使用ーーー <script> $("#bploading").text("RUNNING..."); (async function(){ var obniz, servomotor, button; obniz = new Obniz('     '); await obniz.connectWait(); servomotor1 = obniz.wired("ServoMotor",{"signal":1, "gnd":0}); servomotor2 = obniz.wired("ServoMotor",{"signal":2, "gnd":0}); servomotor3 = obniz.wired("ServoMotor",{"signal":3, "gnd":0}); servomotor4 = obniz.wired("ServoMotor",{"signal":4, "gnd":0}); button = new ObnizUI.Button('起立!'); while (true) { await ObnizUI.Util.wait(0); if (button.isTouching()) { servomotor1.angle(90); servomotor2.angle(90); servomotor3.angle(90); servomotor4.angle(90); await obniz.wait(500); } else { servomotor1.angle(120); servomotor2.angle(60); servomotor3.angle(60); servomotor4.angle(120); } } })(); </script> </body> </html> ``` 3-4-2 座る、立つのモーションを作成。  下半身のサーボモーターをモーションボタンによりコントロールする。 ① 座る、立つのモーションの動画です。 https://youtu.be/gJzDmGhkM1Q ② ソースコード(初期位置・直立モーション) ``` <html lang="en"> <head> ーーー省略(obnizのサンプルコードを使用ーーー <script> $("#bploading").text("RUNNING..."); (async function(){ var obniz, servomotor, button; obniz = new Obniz('    '); await obniz.connectWait(); servomotor1 = obniz.wired("ServoMotor",{"signal":1, "gnd":0}); servomotor2 = obniz.wired("ServoMotor",{"signal":2, "gnd":0}); servomotor3 = obniz.wired("ServoMotor",{"signal":3, "gnd":0}); servomotor4 = obniz.wired("ServoMotor",{"signal":4, "gnd":0}); button = new ObnizUI.Button('起立!'); while (true) { await ObnizUI.Util.wait(0); if (button.isTouching()) { servomotor1.angle(90); servomotor2.angle(90); servomotor3.angle(90); servomotor4.angle(90); await obniz.wait(500); } } })(); </script> </body> </html> ``` ** 3-5 「オブちゃん」を歩かせる。** 下半身の4個のサーボモーターを使って、歩くモーションを作りました。よちよち歩きですが、何とか歩かせることが出来ました。 ① 歩行のモーションの動画です。 https://youtu.be/a5zetaZI1P8 ② ソースコード(初期位置・直立モーション) ``` <html lang="en"> <head> ーーー省略(obnizのサンプルコードを使用ーーー <script> $("#bploading").text("RUNNING..."); (async function(){ var obniz, servomotor1,servomotor2,servomotor3, button1,button2; obniz = new Obniz('    '); await obniz.connectWait(); servomotor1 = obniz.wired("ServoMotor",{"signal":1, "gnd":0}); servomotor2 = obniz.wired("ServoMotor",{"signal":2, "gnd":0}); servomotor3 = obniz.wired("ServoMotor",{"signal":3, "gnd":0}); servomotor4 = obniz.wired("ServoMotor",{"signal":4, "gnd":0}); servomotor5 = obniz.wired("ServoMotor",{"signal":5, "gnd":0}); servomotor6 = obniz.wired("ServoMotor",{"signal":6, "gnd":0}); button1 = new ObnizUI.Button('前進!'); button2 = new ObnizUI.Button('後退!'); while (true) { await ObnizUI.Util.wait(0); // 前進 if (button1.isTouching()) { // 右足前に servomotor1.angle(90); //左腿 servomotor2.angle(60); //右腿 servomotor3.angle(90); //左足首 servomotor4.angle(90); //右足首 servomotor5.angle(90); //胸ヨー servomotor6.angle(45); //右腕 await obniz.wait(500); // 左足前に servomotor1.angle(120); //左腿 servomotor2.angle(90); //右腿 servomotor3.angle(90); //左足首 servomotor4.angle(90); //右足首 servomotor5.angle(90); //胸ヨー servomotor6.angle(45); //右腕 await obniz.wait(500); } // 後退 else if (button2.isTouching()) { // 左足後ろに servomotor1.angle(60); //左腿 servomotor2.angle(90); //右腿 servomotor3.angle(90); //左足首 servomotor4.angle(90); //右足首 servomotor5.angle(90); //胸ヨー servomotor6.angle(45); //右腕 await obniz.wait(500); // 右足前に servomotor1.angle(90); //左腿 servomotor2.angle(120); //右腿 servomotor3.angle(90); //左足首 servomotor4.angle(90); //右足首 servomotor5.angle(90); //胸ヨー servomotor6.angle(45); //右腕 await obniz.wait(500); } // 初期位置 else { servomotor1.angle(90); //左腿  servomotor2.angle(90); //右腿 servomotor3.angle(90); //左足首 servomotor4.angle(90); //右足首 servomotor5.angle(90); //胸ヨー servomotor6.angle(45); //右腕 await obniz.wait(500); } } })(); </script> </body> </html> ``` **4.回路図** ![キャプションを入力できます](https://camo.elchika.com/08ab65efaa89aecf69ddf0e2734604ca91859b89/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62333466356663372d613730652d343463362d613263362d6132336663343963626131382f61656234346339392d343766382d343637302d623839362d346438663230626661303566/) **5.まとめ  obnizBoardとJavaScriptで作った、二足歩行ロボット「オブちゃん」をよちよち歩きですが、歩かせる事までたどり着きました。  JavaScriptのソースコードもかなり怪しいと思います。これからさらに勉強をしてスマートなものにしていきたいと思います。  また、残念なことに、「オブちゃん」は7軸あるロボットですが、obnizのPWMが6個しかないために、足に4個使うため、胸と右手を動かすと、左手を動かすことが出来ません。今後何か対策を探したいと思います。 最後に、これが「オブちゃん」の後ろ姿です。 ![キャプションを入力できます](https://camo.elchika.com/b7f654d9337a18f1d044fe1a344be81f68f0c183/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62333466356663372d613730652d343463362d613263362d6132336663343963626131382f31393030383862642d643866322d346431332d393734612d323536383463326138646538/)