2015年10月17日土曜日

Raspberry Pi 2 4足歩行ロボット用「簡易ポーズエディタ」

前回「Raspberry Pi 2 やっぱりシェルスクリプトでやる」で作ったServoBlaster用シェルスクリプトの発展形。


 4足歩行ロボットの脚に対応したスライダーを操作してポーズを決め、
その時点のコマンドを任意のファイルに書き出すgtkdialog使用のシェルスクリプト。

  1. #!/bin/bash
  2.  
  3. export test00='
  4. echo $USER
  5. '
  6. export SERVO0='50'
  7. export SERVO1='50'
  8. export SERVO2='50'
  9. export SERVO3='50'
  10. export SERVO4='50'
  11. export SERVO5='50'
  12. export SERVO6='50'
  13. export SERVO7='50'
  14.  
  15. export MAIN_DIALOG='
  16. <window>
  17. <vbox>
  18. <hbox>
  19. <vbox>
  20. <hbox>
  21. <frame サーボ5(%)>
  22. <vscale height-request="200" range-min="10" range-max="90" range-step="1">
  23. <default>50</default>
  24. <variable>SERVO5</variable>
  25. <action>bash -c "echo 5="$SERVO5"% > /dev/servoblaster"</action>
  26. <action type="refresh">TEXT5</action>
  27. </vscale>
  28. </frame>
  29. <frame サーボ4(%)>
  30. <vscale height-request="200" range-min="10" range-max="90" range-step="1">
  31. <default>50</default>
  32. <variable>SERVO4</variable>
  33. <action>bash -c "echo 4="$SERVO4"% > /dev/servoblaster"</action>
  34. <action type="refresh">TEXT4</action>
  35. </vscale>
  36. </frame>
  37. </hbox>
  38. <hbox>
  39. <frame サーボ7(%)>
  40. <vscale height-request="200" range-min="10" range-max="90" range-step="1" inverted="true">
  41. <default>50</default>
  42. <variable>SERVO7</variable>
  43. <action>bash -c "echo 7="$SERVO7"% > /dev/servoblaster"</action>
  44. <action type="refresh">TEXT7</action>
  45. </vscale>
  46. </frame>
  47. <frame サーボ6(%)>
  48. <vscale height-request="200" range-min="10" range-max="90" range-step="1">
  49. <default>50</default>
  50. <variable>SERVO6</variable>
  51. <action>bash -c "echo 6="$SERVO6"% > /dev/servoblaster"</action>
  52. <action type="refresh">TEXT6</action>
  53. </vscale>
  54. </frame>
  55. </hbox>
  56. </vbox>
  57.  
  58. <vbox>
  59. <hbox>
  60. <button>
  61. <label>ボタン 1</label>
  62. <action>echo $LANG</action>
  63. </button>
  64. <vbox>
  65. <button>
  66. <label>前進</label>
  67. <action>bash -c "$test00"</action>
  68. </button>
  69. <button>
  70. <label>後退</label>
  71. </button>
  72. </vbox>
  73. <button>
  74. <label>ボタン4</label>
  75. </button>
  76. </hbox>
  77. <vbox>
  78. <frame>
  79. <text>
  80. <variable>TEXT0</variable>
  81. <input>echo "echo 0="$SERVO0"% > /dev/servoblaster"</input>
  82. </text>
  83. <text>
  84. <variable>TEXT1</variable>
  85. <input>echo "echo 1="$SERVO1"% > /dev/servoblaster"</input>
  86. </text>
  87. <text>
  88. <variable>TEXT2</variable>
  89. <input>echo "echo 2="$SERVO2"% > /dev/servoblaster"</input>
  90. </text>
  91. <text>
  92. <variable>TEXT3</variable>
  93. <input>echo "echo 3="$SERVO3"% > /dev/servoblaster"</input>
  94. </text>
  95. <text>
  96. <variable>TEXT4</variable>
  97. <input>echo "echo 4="$SERVO4"% > /dev/servoblaster"</input>
  98. </text>
  99. <text>
  100. <variable>TEXT5</variable>
  101. <input>echo "echo 5="$SERVO5"% > /dev/servoblaster"</input>
  102. </text>
  103. <text>
  104. <variable>TEXT6</variable>
  105. <input>echo "echo 6="$SERVO6"% > /dev/servoblaster"</input>
  106. </text>
  107. <text>
  108. <variable>TEXT7</variable>
  109. <input>echo "echo 7="$SERVO7"% > /dev/servoblaster"</input>
  110. </text>
  111. </frame>
  112. </vbox>
  113. <entry>
  114. <variable>FILE0</variable>
  115. <default>"./temp.txt"</default>
  116. </entry>
  117. <button>
  118. <label>Write</label>
  119. <action>echo "echo 0="$SERVO0"% > /dev/servoblaster" > $FILE0</action>
  120. <action>echo "echo 1="$SERVO1"% > /dev/servoblaster" >> $FILE0</action>
  121. <action>echo "echo 2="$SERVO2"% > /dev/servoblaster" >> $FILE0</action>
  122. <action>echo "echo 3="$SERVO3"% > /dev/servoblaster" >> $FILE0</action>
  123. <action>echo "echo 4="$SERVO4"% > /dev/servoblaster" >> $FILE0</action>
  124. <action>echo "echo 5="$SERVO5"% > /dev/servoblaster" >> $FILE0</action>
  125. <action>echo "echo 6="$SERVO6"% > /dev/servoblaster" >> $FILE0</action>
  126. <action>echo "echo 7="$SERVO7"% > /dev/servoblaster" >> $FILE0</action>
  127. </button>
  128. </vbox>
  129.  
  130. <vbox>
  131. <hbox>
  132. <frame サーボ0(%)>
  133. <vscale height-request="200" range-min="10" range-max="90" range-step="1" inverted="true">
  134. <default>50</default>
  135. <variable>SERVO0</variable>
  136. <action>bash -c "echo 0="$SERVO0"% > /dev/servoblaster"</action>
  137. <action type="refresh">TEXT0</action>
  138. </vscale>
  139. </frame>
  140. <frame サーボ1(%)>
  141. <vscale height-request="200" range-min="10" range-max="90" range-step="1" inverted="true">
  142. <default>50</default>
  143. <variable>SERVO1</variable>
  144. <action>bash -c "echo 1="$SERVO1"% > /dev/servoblaster"</action>
  145. <action type="refresh">TEXT1</action>
  146. </vscale>
  147. </frame>
  148. </hbox>
  149. <hbox>
  150. <frame サーボ2(%)>
  151. <vscale height-request="200" range-min="10" range-max="90" range-step="1" inverted="true">
  152. <default>50</default>
  153. <variable>SERVO2</variable>
  154. <action>bash -c "echo 2="$SERVO2"% > /dev/servoblaster"</action>
  155. <action type="refresh">TEXT2</action>
  156. </vscale>
  157. </frame>
  158. <frame サーボ3(%)>
  159. <vscale height-request="200" range-min="10" range-max="90" range-step="1">
  160. <default>50</default>
  161. <variable>SERVO3</variable>
  162. <action>bash -c "echo 3="$SERVO3"% > /dev/servoblaster"</action>
  163. <action type="refresh">TEXT3</action>
  164. </vscale>
  165. </frame>
  166. </hbox>
  167. </vbox>
  168. </hbox>
  169. </vbox>
  170. </window>
  171. '
  172.  
  173. gtkdialog -p MAIN_DIALOG -c

というわけで、中央上部のボタンは前回同様飾り。
 使い道の無かったシェルスクリプトに、多少は意味を持たせてみた。

2015年10月12日月曜日

Raspberry Pi 2 やっぱりシェルスクリプトでやる

シェルスクリプトでもgtkdialogを使うことで、GUI操作が可能なので、
gtkdialogのスライダーを使って、サーボモータを動かしてみようと思った。
(サーボモータの制御にはServoBlasterを使用するので、そのインターフェースって感じ。)

Arch Linux ARMではリポジトリにgtkdialogがパッケージとしてあるので、
pacmanでインストールする。

例によって体裁は考えずに、兎に角動くものを作る。

  1. #!/bin/bash
  2.  
  3. export test00='
  4. echo $USER
  5. '
  6.  
  7. export MAIN_DIALOG='
  8. <window>
  9. <vbox>
  10. <hbox>
  11. <button>
  12. <label>ボタン1</label>
  13. <action>echo $LANG</action>
  14. </button>
  15. <vbox>
  16. <button>
  17. <label>前進</label>
  18. <action>bash -c "$test00"</action>
  19. </button>
  20. <button>
  21. <label>後退</label>
  22. </button>
  23. </vbox>
  24. <button>
  25. <label>ボタン4</label>
  26. </button>
  27. </hbox>
  28. <frame サーボ0(%)>
  29. <hscale range-min="10" range-max="90" range-step="1">
  30. <default>50</default>
  31. <variable>SERVO0</variable>
  32. <action>bash -c "echo 0="$SERVO0"% > /dev/servoblaster"</action>
  33. </hscale>
  34. </frame>
  35. <frame サーボ1(%)>
  36. <hscale range-min="10" range-max="90" range-step="1">
  37. <default>50</default>
  38. <variable>SERVO1</variable>
  39. <action>bash -c "echo 1="$SERVO1"% > /dev/servoblaster"</action>
  40. </hscale>
  41. </frame>
  42. <frame サーボ2(%)>
  43. <hscale range-min="10" range-max="90" range-step="1">
  44. <default>50</default>
  45. <variable>SERVO2</variable>
  46. <action>bash -c "echo 2="$SERVO2"% > /dev/servoblaster"</action>
  47. </hscale>
  48. </frame>
  49. <frame サーボ3(%)>
  50. <hscale range-min="10" range-max="90" range-step="1">
  51. <default>50</default>
  52. <variable>SERVO3</variable>
  53. <action>bash -c "echo 3="$SERVO3"% > /dev/servoblaster"</action>
  54. </hscale>
  55. </frame>
  56. <frame サーボ4(%)>
  57. <hscale range-min="10" range-max="90" range-step="1">
  58. <default>50</default>
  59. <variable>SERVO4</variable>
  60. <action>bash -c "echo 4="$SERVO4"% > /dev/servoblaster"</action>
  61. </hscale>
  62. </frame>
  63. <frame サーボ5(%)>
  64. <hscale range-min="10" range-max="90" range-step="1">
  65. <default>50</default>
  66. <variable>SERVO5</variable>
  67. <action>bash -c "echo 5="$SERVO5"% > /dev/servoblaster"</action>
  68. </hscale>
  69. </frame>
  70. <frame サーボ6(%)>
  71. <hscale range-min="10" range-max="90" range-step="1">
  72. <default>50</default>
  73. <variable>SERVO6</variable>
  74. <action>bash -c "echo 6="$SERVO6"% > /dev/servoblaster"</action>
  75. </hscale>
  76. </frame>
  77. <frame サーボ7(%)>
  78. <hscale range-min="10" range-max="90" range-step="1">
  79. <default>50</default>
  80. <variable>SERVO7</variable>
  81. <action>bash -c "echo 7="$SERVO7"% > /dev/servoblaster"</action>
  82. </hscale>
  83. </frame>
  84. </vbox>
  85. </window>
  86. '
  87.  
  88. gtkdialog -p MAIN_DIALOG -c


今のところボタンは飾りなので、気にしない。

一応、できたってだけで、使い道は無い

2015年10月4日日曜日

Raspberry Pi 2 4足歩行ロボットを作ってみよう(その4)

「先ずは、設計図を描け」ってのは言わずに 、
反省回。

1・素材選び
 加工がし易いだろうという安易な考えで、1mm厚の塩ビ板を選んだこと。
 又、部位による素材の使い分けをしなかったこと。強度を要する部位には
 それなりの素材を使用しなければならない。

2・サイズ及び重量
 Raspberry Pi 2 Model Bとブレッドボードをそのまま並列で置けるような
 大きさの本体を作ったこと。
 そもそも大きすぎ、重すぎてサーボモータSG90に負荷が掛かりすぎ。

3・ブラケット形状
 脚を水平方向に動かすサーボモータを収めるべきブラケットをL(エル)字型に
 したこと。
 脚を支える部分に当たるため、L字型ではなく、コの字型にすべき。
 (下の画像の赤線の形状)

 垂直方向に動かすサーボモータのを、水平方向サーボモータ及び本体から
 離して取り付けたこと。
 (下の画像の水色線のように取り付ける)

ブラケットを作り直したいけど、気力が無い

『次号機は無い』

2015年10月3日土曜日

Raspberry Pi 2 4足歩行ロボットを作ってみよう(その3)

さて、ロボットにRaspberry Pi 2 Model Bとブレッドボードを載せ、
サーボモータとの配線を完了する。

Raspberry Pi用の電源はスマートフォンの充電器(5V 2A)からとり、
サーボモータ用には別途用意する。
(本当は、ラズパイの電源もモバイルバッテリー等からとりたいけど、それまで
載せたら、脚が崩壊する)
当初単3電池4本でやってみたが、重過ぎで、ブラケット部の歪みが激しい。
そこで、単4電池にしてみたところ、何とか姿勢を維持できるようになった。



サーボモータを制御する為のシェルスクリプトを適当に作る。
兎にも角にも、動かしたいので、スクリプトの体裁は考えない。

  1. #!/bin/bash
  2.  
  3. hservo=(0 2 4 6)
  4. vservo=(1 3 5 7)
  5.  
  6. function home(){
  7. for i in ${hservo[@]};do
  8. echo $i=50% > /dev/servoblaster
  9. done
  10. echo 0=55% > /dev/servoblaster
  11. echo 4=45% > /dev/servoblaster
  12. for i in ${vservo[@]};do
  13. echo $i=50% > /dev/servoblaster
  14. done
  15.  
  16. echo 7=45% > /dev/servoblaster
  17. }
  18.  
  19. function star(){
  20. echo 0=65% > /dev/servoblaster
  21. echo 2=40% > /dev/servoblaster
  22. echo 4=35% > /dev/servoblaster
  23. echo 6=60% > /dev/servoblaster
  24. sleep 0.1
  25.  
  26. echo 1=30% > /dev/servoblaster
  27. echo 3=70% > /dev/servoblaster
  28. echo 5=70% > /dev/servoblaster
  29. echo 7=30% > /dev/servoblaster
  30.  
  31. sleep 0.5
  32.  
  33. echo 1=70% > /dev/servoblaster
  34. echo 3=30% > /dev/servoblaster
  35. echo 5=30% > /dev/servoblaster
  36. echo 7=70% > /dev/servoblaster
  37.  
  38. sleep 0.5
  39.  
  40. echo 1=30% > /dev/servoblaster
  41. echo 3=70% > /dev/servoblaster
  42. echo 5=70% > /dev/servoblaster
  43. echo 7=30% > /dev/servoblaster
  44. }
  45.  
  46. function first(){
  47. echo 1=70% > /dev/servoblaster
  48. echo 7=60% > /dev/servoblaster
  49.  
  50. sleep 0.2
  51.  
  52. echo 0=65% > /dev/servoblaster
  53. echo 6=40% > /dev/servoblaster
  54. echo 2=40% > /dev/servoblaster
  55. echo 4=55% > /dev/servoblaster
  56.  
  57. sleep 0.1
  58.  
  59. echo 1=30% > /dev/servoblaster
  60. echo 7=30% > /dev/servoblaster
  61. }
  62.  
  63. function second(){
  64. echo 5=30% > /dev/servoblaster
  65. echo 3=30% > /dev/servoblaster
  66.  
  67. sleep 0.2
  68.  
  69. echo 2=60% > /dev/servoblaster
  70. echo 4=35% > /dev/servoblaster
  71. echo 0=45% > /dev/servoblaster
  72. echo 6=60% > /dev/servoblaster
  73.  
  74. sleep 0.1
  75.  
  76. echo 5=70% > /dev/servoblaster
  77. echo 3=70% > /dev/servoblaster
  78. }
  79.  
  80. home
  81. sleep 0.5
  82. star
  83. sleep 0.5
  84.  
  85. for((i = 0; i < 5; i++));do
  86. first
  87. sleep 0.5
  88. second
  89. sleep 0.5
  90. done
  91.  
  92. sleep 1
  93. star

じゃあ、動かしてみよう。
デスクトップPCからSSHでRaspberry Piへログインし、先ずはsudoでServoBlasterを起動。
シェルスクリプトを動かす。


まあ、真っ直ぐ進まないのはご愛嬌。
何せ手作り故、脚部の加工精度なんて出てない。多少は補正を入れてあるけど、適当なので。

それでも、初めて自作したロボットが前進したので大満足!!

今後は、それっぽいモーションを少しずつ作って行きたい。