パむ゜ンの尻尟での6パワヌの生掻

Arduinoハヌドりェアプラットフォヌムずさたざたな即興ゎミを䜿甚したパラレルメカニズムのモデリングに関する䞀連の蚘事を続けお Arduinoで地平線を぀かむ 、 3パワヌArduinoマニピュレヌタヌ 、今日はLinuxオペレヌティングシステムからPythonを䜿甚しお6パワヌプラットフォヌムを管理するこずに泚意する䟡倀がありたす。

以前の投皿で、6床のスチュアヌトプラットフォヌムのモックアップを䜜成する芋蟌みに぀いお話したした。 そしお、すべおのコンポヌネントは遠い䞭囜から来お、テヌブルの䞊に組み立おられたした、あなたは先に進むこずができたす

画像


ツヌルず材料


以前のレむアりトの開発は、Visual Studio 2008がむンストヌルされたWindows 7オペレヌティングシステムを搭茉したラップトップを䜿甚しお実行され、すべおのプログラミングはMicrosoft .NET Frameworkラむブラリを䜿甚しおCで実行されたした。

日垞のタスクを実行および実行するためのメむンマシンは、オペレヌティングシステムUbuntu Linux 10.4がむンストヌルされたデスクトップコンピュヌタヌであるため、ArduinoずPythonの盞互䜜甚をマスタヌするこずになりたした。 さたざたな環境のハヌドりェアの経隓を身に぀けおみたせんか

仕事には、次のツヌルず材料が必芁です。
呜名数量
Linuxむンストヌル1個
6電源プラットフォヌム1個
Arduino Mega1個
ブレッドボヌド1個
スクリヌド6個
サヌボ6個
コヌナヌ6個
ボヌルベアリング12個
ヘリりムペン6個
接続線20個
ペンギン+スコッチ1個
ゞョむスティック1個

必芁な゜フトりェアから


プラットフォヌムをたずめる


パラレルキネマティック接続に基づくさたざたな自由床を持぀メカニズムの範囲は非垞に広いです。

このようなメカニズムの拡匵性により、倧型のナニットをベヌスに高速で簡単に構築できたす。たた、倧きな蚭蚈加速を䜿甚しお、たずえば望遠鏡、レヌザヌ、通信アンテナ、ゞェット゚ンゞンなどのさたざたな産業甚ロボットたたはプラットフォヌムを䜜成したす。

サヌボでの䜜業の詳现な説明は、 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軞を䞭心ずした回転の䟋-容噚のロヌル  source 
画像

Y軞を䞭心ずした回転の䟋-船舶のピッチ  source 
画像

Z軞を䞭心ずした回転の䟋-船のペヌ  ゜ヌス 
画像

むンタヌネット䞊には、軞の呚りの回転の皋床を蚘述する倚くの䟋がありたす 。ここにそれらの1぀がありたす 。

プログラミング


レむアりトを組み立お、3぀のサヌボの制埡プログラムを倉曎した埌、制埡コマンドの圢匏は次のずおりです。
画像

制埡コマンドは、1バむトのコマンドプレフィックスで構成されおいたす。この堎合、シンボル「S」が䜿甚され、ドラむブの6぀の䜍眮、それぞれ2バむトです。 C蚀語を䜿甚しおこのようなコマンドを䜜成する方法はすぐにわかりたす。察応する圢匏の構造を宣蚀したす。 Pythonの「バッテリヌパック」には、䞀連のフィヌルドから文字列を圢成するためのすばらしい構造䜓モゞュヌルがありたす。

structモゞュヌルに関しお䞊蚘で提瀺された構造は、次の圢匏を持ちたす。
むンポヌト 構造

struct pack  '<chhhhhh' 、 'S' 、pos1、pos2、pos3、pos4、pos5、pos6 


モゞュヌルのドキュメントによるず


すべおの䞻芁なテストはPython蚀語コン゜ヌルで実行できたす。この堎合、匷力なIPythonツヌルを䜿甚し、シリアルラむブラリが必芁なハヌドりェアに接続したす。

プラットフォヌムぞの接続は次のずおりです。
茞入シリアル

serialPort =シリアル。 シリアル  '/ dev / ttyUSB0' 、 115200 
serialPort。 オヌプン  


接続が成功した埌にデヌタを送信し、ポヌトを開く手順は次のずおりです。
serialPort。 write  struct。pack  '<chhhhhh' 、 'S' 、x、y、z、roll、pitch、yaw  


このコヌドは、ゞョむスティックを䜿甚したプラットフォヌム管理プログラムず同様に、プラットフォヌムのテスト手順の基瀎を圢成したす。

次の簡単なPythonプロシヌゞャを䜿甚しお、すべおの自由床を自動的にテストできたす。
  1. むンポヌト 構造
  2. 茞入 時間
  3. むンポヌト æ•°å­Š
  4. def send_data シリアル、x、y、z、ロヌル、ピッチ、ペヌ 
  5. シリアル write  struct。pack  '<chhhhhh' 、 'S' 、x、y、z、roll、pitch、yaw  
  6. def complex_test シリアル、長さ= 200 、回数= 1000 、デルタ= 0.05 、䞀時停止= 0.7  
  7. test_linear シリアル、長さ、時間、デルタ
  8. 時間 。 スリヌプ 䞀時停止
  9. test_yaw シリアル、長さ、時間、デルタ
  10. 時間 。 スリヌプ 䞀時停止
  11. test_angles シリアル、長さ、時間、デルタ
  12. 時間 。 スリヌプ 䞀時停止
  13. def test_linear シリアル、長さ= 200 、回数= 1000 、デルタ= 0.05  
  14. xrange  1 、times、 5 の角床の堎合
  15. a =角床* æ•°å­Š 。 pi / 180
  16. send_data  serial、 int  lenght * math。cos  a   、 int  lenght * math。sin  a   、0、0、0、0 
  17. 時間 。 スリヌプ デルタ
  18. send_data シリアル、0、0、0、0、0、0 
  19. def test_angles シリアル、長さ= 200 、回数= 1000 、デルタ= 0.05  
  20. xrange  1 、times、 5 の角床の堎合
  21. a =角床* æ•°å­Š 。 pi / 180
  22. send_data  0、0、0、0、 int  30 * math。cos  a   、 int  30 * math。sin  -a   
  23. 時間 。 スリヌプ デルタ
  24. send_data シリアル、0、0、0、0、0、0 
  25. def test_yaw シリアル、長さ= 200 、回数= 1000 、デルタ= 0.05  
  26. xrange  1 、times、 5 の角床の堎合
  27. a =角床* æ•°å­Š 。 pi / 180
  28. send_data  serial、 int  lenght * math。cos  a   、 0、0 、 int  30 * math。sin  a   、 0、0 
  29. 時間 。 スリヌプ デルタ
  30. 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間隔埌のデヌタがゲヌムコントロヌラから受信され、ボヌドに転送されたす。

管理プログラムむンタヌフェむス
画像

泚ゞョむスティックは安䟡であるため、倚くのデッドゟヌンず䞍快な感床があり、プラットフォヌムが「高速」サヌバヌ䞊にあるため、ゞョむスティックのゞャムがすぐに芋えるように予玄したいだけです。

プログラムをテストした結果、次のビデオが刀明したした。


結論


䜜業の結果、次の結果を達成したした。


将来の䞻な問題、あなたのコメントがしばしば圹立぀解決策


PS私はこの分野の革新者ではありたせん。提案や批刀を歓迎したす。

ご枅聎ありがずうございたした

Source: https://habr.com/ru/post/J130788/


All Articles