以åã®æçš¿ã§ã6床ã®ã¹ãã¥ã¢ãŒããã©ãããã©ãŒã ã®ã¢ãã¯ã¢ãããäœæããèŠèŸŒã¿ã«ã€ããŠè©±ããŸããã ãããŠããã¹ãŠã®ã³ã³ããŒãã³ãã¯é ãäžåœããæ¥ãŠãããŒãã«ã®äžã«çµã¿ç«ãŠãããŸãããããªãã¯å ã«é²ãããšãã§ããŸãïŒ
ããŒã«ãšææ
以åã®ã¬ã€ã¢ãŠãã®éçºã¯ãVisual Studio 2008ãã€ã³ã¹ããŒã«ãããWindows 7ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãæèŒããã©ãããããã䜿çšããŠå®è¡ããããã¹ãŠã®ããã°ã©ãã³ã°ã¯Microsoft .NET Frameworkã©ã€ãã©ãªã䜿çšããŠCïŒã§å®è¡ãããŸããã
æ¥åžžã®ã¿ã¹ã¯ãå®è¡ããã³å®è¡ããããã®ã¡ã€ã³ãã·ã³ã¯ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã Ubuntu Linux 10.4ãã€ã³ã¹ããŒã«ããããã¹ã¯ãããã³ã³ãã¥ãŒã¿ãŒã§ãããããArduinoãšPythonã®çžäºäœçšããã¹ã¿ãŒããããšã«ãªããŸããã ããŸããŸãªç°å¢ã®ããŒããŠã§ã¢ã®çµéšã身ã«ã€ããŠã¿ãŸãããïŒïŒ
ä»äºã«ã¯ã次ã®ããŒã«ãšææãå¿ èŠã§ãã
åœå | æ°é |
Linuxã€ã³ã¹ããŒã« | 1å |
6é»æºãã©ãããã©ãŒã | 1å |
Arduino Mega | 1å |
ãã¬ããããŒã | 1å |
ã¹ã¯ãªãŒã | 6å |
ãµãŒã | 6å |
ã³ãŒã㌠| 6å |
ããŒã«ãã¢ãªã³ã° | 12å |
ããªãŠã ãã³ | 6å |
æ¥ç¶ç· | 20å |
ãã³ã®ã³+ã¹ã³ãã | 1å |
ãžã§ã€ã¹ãã£ã㯠| 1å |
å¿ èŠãªãœãããŠã§ã¢ããïŒ
- Linux
- Arduino 0022
- Python
- ã¢ã€ãã€ãœã³
- ãã€ã¬ã¡
- PySerial
- PyQt4
ãã©ãããã©ãŒã ããŸãšãã
ãã©ã¬ã«ããããã£ãã¯æ¥ç¶ã«åºã¥ãããŸããŸãªèªç±åºŠãæã€ã¡ã«ããºã ã®ç¯å²ã¯éåžžã«åºãã§ãã
- å€è»žãã©ã€ã¹ç€ããã³ããŒã«ç€
- ãã©ã€ãã·ãã¥ã¬ãŒã¿ãŒ
- ãªããžã§ã¯ããé 眮ããããã®èª¿æŽå¯èœãªé¢ç¯åŒãã©ã¹
- ã¬ã³ãŒããŒãªã©
ãã®ãããªã¡ã«ããºã ã®æ¡åŒµæ§ã«ããã倧åã®ãŠããããããŒã¹ã«é«éã§ç°¡åã«æ§ç¯ã§ããŸãããŸãã倧ããªèšèšå éã䜿çšããŠãããšãã°æé é¡ãã¬ãŒã¶ãŒãéä¿¡ã¢ã³ããããžã§ãããšã³ãžã³ãªã©ã®ããŸããŸãªç£æ¥çšãããããŸãã¯ãã©ãããã©ãŒã ãäœæããŸãã
ãµãŒãã§ã®äœæ¥ã®è©³çŽ°ãªèª¬æã¯ã 3é»æºãã©ãããã©ãŒã ã«é¢ããç§ã®èšäºã§èª¬æãããŠããŸã ããã®å Žåã3ã€ã®ãã©ã€ãã®ä»£ããã«6ã€ã䜿çšãããã¬ã€ã¢ãŠãã¯Stuartãã©ãããã©ãŒã ã«å¯Ÿå¿ããŸãã
å±æ©çãªç¶æ³ã§ããŸãã¯æ¥ç¶éšåãšããŠè² è·ãããã£ãŠãããšãã«ãã©ãããã©ãŒã ãå£ããªãããã«ãååïŒããã€ã«ã«æè¬ããŸãïŒã¯ãããªãŠã ãã³ã®éåžžã®ããããšããªã³ãã¿ãŒã®ããŒã«ãã¢ãªã³ã°ããããã³ã°ããŒããšããŠäœ¿çšããããšãææ¡ããŸããã
çµã¿ç«ãŠåŸã®ãã©ãããã©ãŒã ã®äžé¢å³ïŒ
ãµãŒããã©ã€ãã¯ãããããArduino Megaã®2ã7ã®åºåããPWMã䜿çšããŠå¶åŸ¡ãããŸãã
å éšã§ã¯ããã©ãããã©ãŒã ã®äžã§ããã¬ããããŒãäžã§éåžžã®æ¹æ³ã§ãµãŒããæ¥ç¶ãããŠããŸãã
äžè¬çãªã±ãŒã¹ã§ã¯ã3é»åã¹ããŒã ã«å¯ŸããŠã³ã³ããŒãã³ãã®æ°ãåçŽã«2åã«ãã1ã€ã®ããªãå®å®ããèšèšã«ããŸããã å€ãã®ãã¹ãäžããžã§ã€ã³ãããé£ã³åºãã®ã¯åã«ãã£ãšãããããããããã®ããŒã«ãã¢ãªã³ã°ãæ¥çå€ã§åºå®ããããšãéèŠã§ãã
6床
ãŠã£ãããã£ã¢ã«ãããšã6ã€ã®èªç±åºŠã®æŠå¿µã«ã¯æ¬¡ã®å®çŸ©ããããŸãã
6èªç±åºŠ ïŒè±èªã®6èªç±åºŠã®ç¥èª6DoFããã䜿çšãããŸãïŒ-ïŒ3次å ïŒç©ºéã§å¹ŸäœåŠçãªåãããã幟äœåŠçå³åœ¢ã®èœåã瀺ããŸããããªãã¡ãåæ¹/åŸæ¹ãäžäž/å·Šå³ïŒãã«ã«ãïŒ 3次å 座æšç³»ïŒãçžäºã«åçŽãª3ã€ã®è»žïŒãšãŒãããããããŒã«ïŒã®ããããã®åšãã®å転ãå«ã¿ãŸãã 空éå ã®ä»»æã®ãã¯ãã«ã«æ²¿ã£ãå€äœã¯ãå軞ã«æ²¿ã£ãåºæ¬ãã¯ãã«ã«æ²¿ã£ã3ã€ã®åºæ¬å€äœã®åèšãšããŠè¡šãããšãã§ãããã®ãããªååºæ¬å€äœã¯ä»ã®2ã€ããå°åºã§ããªãããšãç¥ãããŠããŸãã 空éå ã®ãã©ãŒã ã®ä»»æã®å転ã¯ãå軞ã®åšãã®äžé£ã®å転ã«ãã£ãŠãæå®ã§ããŸãïŒãªã€ã©ãŒã«ããïŒã ãããã£ãŠãçªå·6ïŒ6ïŒã
ã°ã©ãã£ã«ã«ã«ããã®å®çŸ©ã¯æ¬¡ã®ããã«è¡šç€ºã§ããŸãïŒ ãœãŒã¹ ïŒ
ããã«åºã¥ããŠã6èªç±åºŠã¯æ¬¡ã®ããã«ãªããŸãã
- X軞çŽç·å€äœ
- Y軞ç·åœ¢ãªãã»ãã
- Z軞çŽç·å€äœ
- X軞ã®åšãã®åè»¢ïŒ roll -rollïŒ
- y軞ãäžå¿ã«å転ïŒãããïŒ
- y軞ãäžå¿ã«åè»¢ïŒ ãšãŒ -ãšãŒïŒ
X軞ãäžå¿ãšããå転ã®äŸ-容åšã®ããŒã« ïŒ source ïŒïŒ
Y軞ãäžå¿ãšããå転ã®äŸ-è¹è¶ã®ããã ïŒ source ïŒïŒ
Z軞ãäžå¿ãšããå転ã®äŸ-è¹ã®ãšãŒ ïŒ ãœãŒã¹ ïŒïŒ
ã€ã³ã¿ãŒãããäžã«ã¯ã軞ã®åšãã®å転ã®çšåºŠãèšè¿°ããå€ãã®äŸããããŸã ãããã«ãããã®1ã€ããããŸã ã
ããã°ã©ãã³ã°
ã¬ã€ã¢ãŠããçµã¿ç«ãŠã3ã€ã®ãµãŒãã®å¶åŸ¡ããã°ã©ã ãå€æŽããåŸãå¶åŸ¡ã³ãã³ãã®åœ¢åŒã¯æ¬¡ã®ãšããã§ãã
å¶åŸ¡ã³ãã³ãã¯ã1ãã€ãã®ã³ãã³ããã¬ãã£ãã¯ã¹ã§æ§æãããŠããŸãããã®å Žåãã·ã³ãã«ãSãã䜿çšããããã©ã€ãã®6ã€ã®äœçœ®ããããã2ãã€ãã§ãã Cèšèªã䜿çšããŠãã®ãããªã³ãã³ããäœæããæ¹æ³ã¯ããã«ããããŸãã察å¿ãã圢åŒã®æ§é ã宣èšããŸãã Pythonã®ãããããªãŒããã¯ãã«ã¯ãäžé£ã®ãã£ãŒã«ãããæååã圢æããããã®ãã°ãããæ§é äœã¢ãžã¥ãŒã«ããããŸãã
structã¢ãžã¥ãŒã«ã«é¢ããŠäžèšã§æ瀺ãããæ§é ã¯ã次ã®åœ¢åŒãæã¡ãŸãã
ã€ã³ããŒã æ§é
struct pack ïŒ '<chhhhhh' ã 'S' ãpos1ãpos2ãpos3ãpos4ãpos5ãpos6 ïŒ
ã¢ãžã¥ãŒã«ã®ããã¥ã¡ã³ãã«ãããšïŒ
- <-ã¯ãå€æ°ã®å€æåŸã®äœããé«ãžã®ãã€ãé ã瀺ããŸã
- c-Cèšèªã®charåïŒ1ãã€ãïŒã®å€æ°ã®é·ãã1æåã®Pythonã¹ããªã³ã°ã«äžèŽããŸã
- h-PythonæŽæ°å€ãCèšèªã®çãå€æ°ïŒ2ãã€ãïŒã«ãããããŸã
ãã¹ãŠã®äž»èŠãªãã¹ãã¯Pythonèšèªã³ã³ãœãŒã«ã§å®è¡ã§ããŸãããã®å Žåã匷åãªIPythonããŒã«ã䜿çšããã·ãªã¢ã«ã©ã€ãã©ãªãå¿ èŠãªããŒããŠã§ã¢ã«æ¥ç¶ããŸãã
ãã©ãããã©ãŒã ãžã®æ¥ç¶ã¯æ¬¡ã®ãšããã§ãã
èŒžå ¥ã·ãªã¢ã«
serialPort =ã·ãªã¢ã«ã ã·ãªã¢ã« ïŒ '/ dev / ttyUSB0' ã 115200 ïŒ
serialPortã ãªãŒãã³ ïŒ ïŒ
æ¥ç¶ãæåããåŸã«ããŒã¿ãéä¿¡ããããŒããéãæé ã¯æ¬¡ã®ãšããã§ãã
serialPortã write ïŒ structãpack ïŒ '<chhhhhh' ã 'S' ãxãyãzãrollãpitchãyaw ïŒ ïŒ
ãã®ã³ãŒãã¯ããžã§ã€ã¹ãã£ãã¯ã䜿çšãããã©ãããã©ãŒã 管çããã°ã©ã ãšåæ§ã«ããã©ãããã©ãŒã ã®ãã¹ãæé ã®åºç€ã圢æããŸãã
次ã®ç°¡åãªPythonããã·ãŒãžã£ã䜿çšããŠããã¹ãŠã®èªç±åºŠãèªåçã«ãã¹ãã§ããŸãã
- ã€ã³ããŒã æ§é
- èŒžå ¥ æé
- ã€ã³ããŒã æ°åŠ
- def send_data ïŒã·ãªã¢ã«ãxãyãzãããŒã«ããããããšãŒïŒ ïŒ
- ã·ãªã¢ã« write ïŒ structãpack ïŒ '<chhhhhh' ã 'S' ãxãyãzãrollãpitchãyaw ïŒ ïŒ
- def complex_test ïŒã·ãªã¢ã«ãé·ã= 200 ãåæ°= 1000 ããã«ã¿= 0.05 ãäžæåæ¢= 0.7 ïŒ ïŒ
- test_linear ïŒã·ãªã¢ã«ãé·ããæéããã«ã¿ïŒ
- æé ã ã¹ãªãŒã ïŒäžæåæ¢ïŒ
- test_yaw ïŒã·ãªã¢ã«ãé·ããæéããã«ã¿ïŒ
- æé ã ã¹ãªãŒã ïŒäžæåæ¢ïŒ
- test_angles ïŒã·ãªã¢ã«ãé·ããæéããã«ã¿ïŒ
- æé ã ã¹ãªãŒã ïŒäžæåæ¢ïŒ
- def test_linear ïŒã·ãªã¢ã«ãé·ã= 200 ãåæ°= 1000 ããã«ã¿= 0.05 ïŒ ïŒ
- xrange ïŒ 1 ãtimesã 5 ïŒã®è§åºŠã®å ŽåïŒ
- a =è§åºŠ* æ°åŠ ã pi / 180
- send_data ïŒ serialã int ïŒ lenght * mathãcos ïŒ a ïŒ ïŒ ã int ïŒ lenght * mathãsin ïŒ a ïŒ ïŒ ã0ã0ã0ã0 ïŒ
- æé ã ã¹ãªãŒã ïŒãã«ã¿ïŒ
- send_data ïŒã·ãªã¢ã«ã0ã0ã0ã0ã0ã0 ïŒ
- def test_angles ïŒã·ãªã¢ã«ãé·ã= 200 ãåæ°= 1000 ããã«ã¿= 0.05 ïŒ ïŒ
- xrange ïŒ 1 ãtimesã 5 ïŒã®è§åºŠã®å ŽåïŒ
- a =è§åºŠ* æ°åŠ ã pi / 180
- send_data ïŒ 0ã0ã0ã0ã int ïŒ 30 * mathãcos ïŒ a ïŒ ïŒ ã int ïŒ 30 * mathãsin ïŒ -a ïŒ ïŒ ïŒ
- æé ã ã¹ãªãŒã ïŒãã«ã¿ïŒ
- send_data ïŒã·ãªã¢ã«ã0ã0ã0ã0ã0ã0 ïŒ
- def test_yaw ïŒã·ãªã¢ã«ãé·ã= 200 ãåæ°= 1000 ããã«ã¿= 0.05 ïŒ ïŒ
- xrange ïŒ 1 ãtimesã 5 ïŒã®è§åºŠã®å ŽåïŒ
- a =è§åºŠ* æ°åŠ ã pi / 180
- send_data ïŒ serialã int ïŒ lenght * mathãcos ïŒ a ïŒ ïŒ ã 0ã0 ã int ïŒ 30 * mathãsin ïŒ a ïŒ ïŒ ã 0ã0 ïŒ
- æé ã ã¹ãªãŒã ïŒãã«ã¿ïŒ
- send_data ïŒã·ãªã¢ã«ã0ã0ã0ã0ã0ã0 ïŒ
ãžã§ã€ã¹ãã£ãã¯å¶åŸ¡
ããã¬ãžã£ãŒã¹ãã£ãã¯ãããå€ãååŸããæãç°¡åãªæ¹æ³ã¯ãPyGameã¢ãžã¥ãŒã«ã䜿çšããããšã§ãã ãã®ã¢ãžã¥ãŒã«ã¯SDLã«åºã¥ããŠãããPythonã§ããã¡ããéçºããããã®å€ãã®äŸ¿å©ãªããŒã«ããããã²ãŒã ã³ã³ãããŒã©ãŒãæäœããããã®ããŒã«ãå«ãŸããŠããŸãã
ãžã§ã€ã¹ãã£ãã¯ãåæåãã座æšãååŸããç°¡åãªäŸïŒ
pygameãã€ã³ããŒããã
ïŒå€ã®ã¹ã±ãŒã«
ã¹ã±ãŒã«= 1000
ïŒPygameã®åæåããžã§ã€ã¹ãã£ãã¯ã®åæåæ©èœãèªåçã«å®è¡ãããŸã
pygameã åæå ïŒ ïŒ
ïŒå©çšå¯èœãªããã€ã¹ã®ååŸ
ç¯å²å ã® jid ïŒ pygameãjoystickãget_count ïŒ ïŒ ïŒ ïŒ
èªå·± ã joysticksComboBox ã addItem ïŒ u 'ïŒ dïŒ s' ïŒ ïŒ jidãpygameãjoystickãJoystick ïŒ jid ïŒ ãget_name ïŒ ïŒ ïŒ ïŒïŒ
ïŒãžã§ã€ã¹ãã£ãã¯ãªããžã§ã¯ããåæåãã
self ._joystick = pygameã ãžã§ã€ã¹ãã£ã㯠ã ãžã§ã€ã¹ãã£ãã¯ ïŒ selfãJoysticksComboBoxãCurrentIndex ïŒ ïŒ ïŒ
ïŒpygameã§ã€ãã³ããæŽæ°ãã
pygameã ã€ãã³ã ãã³ã ïŒ ïŒ
ïŒç¹å®ã®è»žïŒãã®å Žåã軞X = 0ïŒã®ãžã§ã€ã¹ãã£ãã¯ããäœçœ®ãååŸããŸã
ïŒå€ã¯-1ãã1ãšããŠfloatãšããŠè¿ããããããã¹ã±ãŒã«ããŸã
self ._joystickã get_axis ïŒ 0 ïŒ *ã¹ã±ãŒã«
ãžã§ã€ã¹ãã£ãã¯ã䜿çšãããã©ãããã©ãŒã 管çããã°ã©ã ã«ã¯ãPyQt4ã©ã€ãã©ãªã®ãããã§ã°ã©ãã£ã«ã«ã€ã³ã¿ãŒãã§ã€ã¹ããããŸãããåœåã¯ïŒã»ãšãã©å®è£ ãããŠããïŒcursesã§äœæããããšããç±æããããŸããã ãžã§ã€ã¹ãã£ãã¯ãæ¥ç¶ãããããŒããæäœããããã®ããŒããéããŠããå Žåãã¿ã€ããŒã«åŸã£ãŠã33 msééåŸã®ããŒã¿ãã²ãŒã ã³ã³ãããŒã©ããåä¿¡ãããããŒãã«è»¢éãããŸãã
管çããã°ã©ã ã€ã³ã¿ãŒãã§ã€ã¹ïŒ
泚ïŒãžã§ã€ã¹ãã£ãã¯ã¯å®äŸ¡ã§ãããããå€ãã®ããããŸãŒã³ãšäžå¿«ãªæ床ãããããã©ãããã©ãŒã ããé«éããµãŒããŒäžã«ããããããžã§ã€ã¹ãã£ãã¯ã®ãžã£ã ãããã«èŠããããã«äºçŽãããã ãã§ãã
ããã°ã©ã ããã¹ãããçµæã次ã®ãããªãå€æããŸããã
çµè«
äœæ¥ã®çµæã次ã®çµæãéæããŸããã
- ããã°ã©ãã³ã°ç°å¢ã®å±éã«åé¡ã¯ãªããããŒãã¯ããã«ã«ãŒãã«ã«åŒãç¶ããããããLinuxãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®Arduinoã§ã®äœæ¥ããã¹ã¿ãŒããŸããïŒWindowsã§ã¯ãFTDIãã©ã€ããŒãå¿ èŠã§ãïŒã
- PythonèšèªããŒã«ã䜿çšããŠRS232ãæäœããæ¹æ³ãšãããŒããŠã§ã¢ã管çããæ¹æ³ãåŠã³ãŸããã ãã®çµéšã«ãããäžèŠãªã³ãŒããéçºããããšãªããã³ã³ãœãŒã«ããç°¡åã«äº€æãããã³ã«ãããŒãã§ãã¹ãã§ããŸãããã®åŸããã®ãããã³ã«ãRS232ã§åäœããæ¢è£œã®ãœãªã¥ãŒã·ã§ã³ã«çµã¿èŸŒãããšãã§ããŸãã
- PyGameã䜿çšããŠã³ã³ãããŒã©ãŒãæäœããæ¹æ³ãåŠã³ãŸããããé£ããã¯ãããŸããããåå¿è ã«ã¯åœ¹ç«ã¡ãŸãã
å°æ¥ã®äž»ãªåé¡ãããªãã®ã³ã¡ã³ãããã°ãã°åœ¹ç«ã€è§£æ±ºçïŒ
- ãã©ãããã©ãŒã ã®åãã®ç·åœ¢æªã¿ãæžããããã«æ£ç¢ºãªå転è§ãèšç®ããããšã¯ã§ããªãããããµãŒãã®äœ¿çšã¯é¿ããããšæããŸãããããã«ããŠãããªãã¢ã¢ã¯ãã¥ãšãŒã¿ïŒã¢ã¯ãã¥ãšãŒã¿ïŒãå¿ èŠã§ãã æ¢åã®ãã®ã®ãã¡ãFrigelli L12ããèŠã€ãããŸããã§ããããéåžžã«é ãã§ããå¥ã®ãªãã·ã§ã³ã¯ããŒã«ããã䜿çšããããšã§ããããŸã£ããå©çšã§ããŸããã§ããã
- ãã¯ãŒãŠããããå€æŽãããå Žåãæ°ããããŒã«ãã¢ãªã³ã°ãæ¢ãå¿ èŠããããŸããçŸåšäœ¿çšãããŠããããŒã«ãã¢ãªã³ã°ã¯å°ããããŠãç°ãªãã¹ã±ãŒã«ã§åé¡ã解決ã§ããŸããã
- ç£æ¥çšãªãŒãã¡ãŒã·ã§ã³ã®ã¢ã¯ãã¥ãšãŒã¿ããã®ãã£ãŒãããã¯æ¹æ³ã¯ãPIDã³ã³ãããŒã©ãŒãåããã»ã³ãµãŒã«ãã£ãŠè§£æ±ºãããŸãããå°èŠæš¡ã§ã¯åé¡ã§ããããšãå€æããŸããã
PSïŒç§ã¯ãã®åéã®é©æ°è ã§ã¯ãããŸãããææ¡ãæ¹å€ãæè¿ããŸãã