RCサーボを制御するにはどうすればよいですか?


26

Pythonを介してGPIOピンから小さなRCサーボ(5 V、500 mA)を制御したいと思います。

ハードウェア

  • 必要な電気接続は何ですか?
  • Raspberry Piに複数のサーボを接続できますか?
  • 現在の制限はありますか?出力ピンをトランジスタでバッファリングする必要がありますか?
  • Raspberry Piから直接サーボに電力を供給できますか、または外部電源を使用する必要がありますか?サーボのぎくしゃくした消費電力を滑らかにするためにコンデンサが必要ですか?

ソフトウェア

  • どのソフトウェア/ Pythonコードが必要ですか?20 msのパルスが必要なことは知っていますが、これを達成するにはどうすればよいですか?
  • このようにRaspberry Piを使用すると、どのようなCPU負荷が予想されますか?

これはあなたが始めるのに役立つ可能性が似て質問です:raspberrypi.stackexchange.com/questions/27/...
アンドリュー・ラーション

回答:


9

必要な電気接続は、使用しているサーボによって異なります。GPIOは、3.3 Vを提供し、16ミリアンペアまでのあなたは、トランジスタとそれをバッファリングする必要がありますので、ご使用のサーボには不十分です。

拡張ヘッダーに8つのGPIOピンがありますが、他のピンを再構成して、合計で最大17のGPIOピンを割り当てることができます。さらに必要な場合は、何らかの種類のマルチプレクサを追加する必要があります。

割り込みやタスクの切り替えはいつでも発生する可能性があるため、Raspberry Piまたは非リアルタイムOSでは、正確なタイミングの信号を取得することは困難です。正確なタイミングの信号を提供するには、おそらく外部電子機器が必要になります。

アンドリューは、いくつかのソフトウェアを指摘しました。CPUの負荷は実行内容によって異なりますが、GPIO自体は負荷を追加しません。


2
一方、Raspberry PiのCPU条件でも、20ミリ秒は長い時間です。RCサーボの時間精度についてはあまり心配しません。

2
@Tibor:20msはサーボパルスの周期であり、幅en.wikipedia.org/wiki/Servo_control#Pulse_durationではありません。そして、解像度の要件はそれよりもはるかに悪いです-8ビットの解像度を得るには、2ミリ秒で256ステップが必要です。
マーティントンプソン

8

Raspberry Piでリアルタイムオペレーティングシステムを実行している場合、これは実際に可能です。他の人がすでに述べたように、サーボへの外部電源が必要になりますが、それ以外の追加のハードウェアは必要ありません。

Xenomai(Linux用のリアルタイムパッチ)を実行している場合、完全に使い慣れたLinuxシステムを実行できますが、リアルタイム機能が追加されています。

Raspberry Piからサーボを制御する目的で、小さなCライブラリを作成しました。同時に3つのサーボを制御しようとしましたが、それ以上動作しない理由はまったくありません。

ここに私の小さなライブラリがあります:https : //github.com/simonfi/pi-servo Pythonラッパーを追加するのは簡単です。Raspberry PiのXenomaiは次の場所にあります:http : //powet.eu/2012/07/25/raspberry-pi-xenomai/

3つのサーボに必要な信号を生成することは、基本的にごくわずかなCPUを消費します。私はまだ3つ以上でテストしていません。


5

Linuxカーネルドライバーの使用を気にしない場合は、サーボをcharデバイスとして公開するサーボブラスターがあります。

https://github.com/richardghirst/PiBits

サーボ用のすべてのgpioピンを消費しない新しいバージョンをフォークしました。私は現在、IPGamePadを使用してロボットクラブ用に構築およびデモした小型のサーボ駆動ロボットでそのようなものを使用しています。

https://github.com/jronald/PiBits

また、RPIを介してサーボを制御する電源は本当に必要ないので、代わりに別の電源を使用します。もちろん、その根拠を結び付ける必要があります。RPIはサーボに出力するため、電圧シフトは必要ありませんが、間違った配線をしないように非常に注意する必要があります。


fyi-richartghristリポジトリは維持されているようですが、jronaldフォークは古く壊れているようです。また、私は方法を読んでお勧めのすべてを無視するが、最初の2つのサーボコントロールおよびインストールServoblaster
CWD

3

通常、サーボはPWM信号を使用して制御されます。GPIOをPWM出力と呼びます

チップにはPWMがサポートされているため、将来的には使用できるはずです。基本的に、ソフトウェアはすべて、特定の周波数でパルスを生成するようにハードウェアに指示します。I2C経由で外部PWMコントローラーを使用して成功した人もいます。


3

ラズベリーパイ用に利用できる拡張ボードがあり、ガートボードと呼ばれます。これは、Piだけでは駆動できないサーボやその他の負荷を制御するために使用されます。


また、この製品の人気のため、ラズベリーパイとアクセサリーを提供するほとんどのサイトで売り切れていると思います。
ブランドンベイリー

3

この質問が出されてから、Piで物事を行う方法に関する知識は、長年にわたってかなり改善されました。

外部ハードウェアを使用せずに、PiのgpiosでハードウェアタイミングPWM /サーボパルスを生成するには、少なくとも4つの方法があります。

これを行うためのカーネルモジュールの使用は非推奨になりました。次のユーザーランドソリューションが利用可能です。

  • 私自身のpigpioは、gpios 0〜31(C、Python、ソケット、パイプ)のいずれかで独立してサーボおよび一般的なPWMパルスを生成します。
  • Servoblasterは、最大21 gpios(パイプ)で独立してServoおよび一般的なPWMパルスを生成します。
  • RPIOは、gpios 0〜31(Python)のいずれかで独立してサーボおよび一般的なPWMパルスを生成します。
  • Servoblasterから派生したpi- blaster(パイプ)

2

Linuxを実行してサーボを正確に制御しながら、出力のタイミングを十分に合わせることができれば、私は驚くでしょう。

パルスは2ミリ秒の範囲で制御する必要があります。スケジューラのティックの解像度が100us(それをプッシュしている-通常は10ms)であっても、解決できるのはわずか20ステップです。そして、それはタスクスイッチングによって生じるジッタを考慮しないことです。

使用可能な別のタイマーがある場合は、非常に低レベルのドライバーを作成して、OSを先取りしてタイミングを正確にすることができます。楽しいように聞こえる!


2

可能であれば、GPIOポートから直接サーボを実行しようとするのは難しく、多くのCPUオーバーヘッドを引き起こすと思います。私はUSBサーボコントローラーを使用していますが、セットアップが少し難しいですが、うまく動作し、CPUをほとんど使用しません。私が持っているのは24チャンネルですが、彼らは6チャンネルバージョンを作ります。また、シリアルを使用する他のベンダーの2チャンネルおよび4チャンネルコントローラーを見てきました。シリアルコントローラーは、それほど多くのサーボを制御する必要がない場合、USBよりも簡単で安価です。


0

独自のプラグインを作成できる完全に機能するGPIO Webサービスがあります。すでに任意の数のサーボの制御をサポートしているようです。ボードレイアウトの画像の束については、「コンテンツ」ディレクトリを参照してください。

https://bitbucket.org/PaulTechGuy/raspberrypi.dotnet.gpioweb

PiでMonoを実行しているC#のようです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.