ニュース トピックス |
|
|
|
|
|
ブログ トピックス |
|
|
|
|
|
|
年末年始休業のお知らせ (2023/12/18)
2023年12月28日(木)~2024年1月4日(木)の間は、年末年始休業とさせていただきます。
|
年末年始休業のお知らせ (2022/12/15)
2022年12月28日(水)~2023年1月4日(水)の間は、年末年始休業とさせていただきます。
|
Dynamixel Starter Kit販売のお知らせ (2022/07/21)
Dynamixelを始めてみようという方向けのキットを久しぶりに用意しました。
第1弾としてDXSHIELD・NerO(Arduino UNO互換機)・XL430-W250-T 3台・電源を一式としたStarter Kit Aの販売を開始します。
本キットに限りDXSHIELDの部品は全てはんだ付け済みですので、はんだゴテを握らずともDynamixelを動かすところまではそこそこスムーズに辿りつけるかと思います。
しかしながらArduino UNOであるが故のジレンマは踏襲されたままなので、もう少し欲張りたい方向けに異なるコントローラを同梱したキットを別途準備中です。そちらもお楽しみに。
|
||
KONDO PMX試食3 (2024/04/18)
前回に引き続き小出し第3弾。
その前に、今までPMXのボーレートを3Mbpsとしていたが、バックグラウンドで動かしているアプリケーションによって受信データの欠損やズレが散見されていた。そのために態々リトライする関数を用意した訳だが。
原因を追求すべく色々試した結果、Zero 2の都合で時折受信データを取りこぼしていると考えられ、最終的にはボーレートにも依存するところまで判明した。OSが過負荷状態であっても、今のところ1.5Mbps以下であれば受信データを取りこぼさないようだ。 それでは本題に。
前回の漫画にどうしてXC330-T181-Tがつながっていたかの答えでもあるが、常々やってみたかったのが、異なる異メーカのサーボを同時に使うという少々危険なネタ。 これをやってみようと思ったのは、DXLに用意されているV1/V2の通信プロトコルを混在させている実例があったのと、PMXの通信プロトコルがB3MやKRSシリーズのプロトコルに比べ格段に堅牢になっていたからでもある。また単一メーカに依存して無い物ねだりする事を無くす事も狙い。 ちなみにB3MやKRSでは深く考えるまでもなく絶対的に無理、というか危険極まりないのでやってはならない。またDXLもV1とV2を混在させるとV1側の挙動がおかしくなるのは既知なので、実質的に無理。プロトコルの混在を実現するには、各サーボが自身には無関係なパケットを即時破棄する事と、自身に関係のあるパケットを取りこぼさないというそこそこ厳しい条件が求められる。それらは当然こちらでどうにかできる話ではないので、完全に自己責任のネタである。 では徐にやってみる。
PMXはID=0でボーレートを1Mbps、DXLはID=1でボーレートを1Mbpsとした。そもそもプロトコルが異なるのでお互いにIDが同じであっても構わないだろう。ライブラリは前回同様にpyPMX.pyとpyDXL.pyを使用。以下は1つのコードになっているか、PMXとDXLを各々個別のスレッドで処理させ、互いの存在は全く意識していない。オープンしたポートのインスタンスとLockを両スレッド共通に使用している。いずれも正弦波を元に位置決め制御を行いつつ、現在位置を取得してモニタ用の変数に書き込んでいる。ループ中には適当な時間のsleepを入れておいた方が良いだろう。 #!/usr/bin/python3 結果、いずれのサーボもスムーズに動くし、更に長時間運転してみても各関数はエラーを吐いていない。
色々虐め始めるとボロも出て来るだろうが、サーボそのものが不可解な挙動をしない限り、もしかしたら新たな使い道が見い出せるかも知れない。
キャリアボードに装備した機能の検証を含んだ操作している様子を動画にしておいた。
以上で久々に新鮮な気持ちで遊興したレポートを終える。
技術 |
KONDO PMX試食2 (2024/04/16)
前回に引き続きPMX。
各装置の接続は最終的にこのような構成に。
キャリアボードに供給する電源が内蔵のスイッチ回路を介してEHコネクタからサーボへ供給される。
Raspberry Pi Zero 2 Wの操作はモニタとキーボードを直接接続して行うも良し、USB経由のRNDISでリモートログインしても良し、WiFi経由でリモートログインしても良し。 これでハードウェアの準備は完了。 ではようやくソフトウェアに。
Raspberry Pi Zero 2 WをホストとしたのでLinuxが前提、Zeroは極めてメモリが少ないのでCLIを基本とした。今回はモータが動きさえすれば良いので、プログラムのデバッグはキャラクタベースで十分と判断。 キャリアボードはRaspberry Piの機能を利用するので、本家のドキュメントやDXHATの使用方法を元に設定。念のためcmdline.txtからconsoleの記述が消えているのを確認しておこう。 キャリアボードのRS-485 I/FはZeroの「/dev/ttyAMA0」に割り当てられる。 この辺は先人の知恵を借りれば良し。 次にPythonによるPMXとの通信だが、既にDXL用Pythonライブラリが公開されているのでその構成を真似ね、PMXのプロトコルで規定されているコマンドに応じた関数を用意し、こちらでpyPMX.pyとして公開。あると便利な検索・ID変更・ボーレート変更の各スクリプトも事のついでに作成。これにてオンラインマニュアル片手にポチポチと弄る準備が完了。
一応ライブラリの末尾にテストコードを仕込んでおいたが、PMXに位置決め制御を行わせるだけであれば、以下のように動作モードを設定しTorqueONした後にMotorWRITEで角度を指令するだけ。 #!/usr/bin/python3 実はこの程度の処理にもかかわらず、想定した動作を行ってくれない事が散見された。各関数の成否を確認しないまま次の処理に遷移させているため、初期設定の所で何かしら失敗したまま角度の指令がなされている時に動かなかった様だ。
それがキャリアボードの問題なのか通信方法の問題なのかの切り分けはしていないが、関数の返り値を確認してリトライする等の処理を加えれば、とりあえずお茶は濁せそうだ。 それらを意識した上で複数IDを一括で処置する関数を作成、少しだけコンソール上での操作をしやすくするためにkbhitを導入、最終的に2軸を対象にしたプログラムを作ってみた。
#!/usr/bin/python3 適当な指令値を元に位置決め制御と速度制御を行い、コンソール上で何か入力すると処理を推移する。制御中は読み出した現在値をバラバラとコンソールに吐き出し続ける。
紹介したコードはいらぬものも含んでいるので少々長くなっているが、SetModeを行って成功したらSetAngleやSetVelocityを行っているだけの事である。 Zeroを一通り操作している様子をラズパイカメラで自撮りしておいた。
技術 |
KONDO PMX試食1 (2024/04/13)
リリースから多少時間が経過した頃合いを見計らって、KONDO PMXシリーズに触れてみた。
今回は具体的に何かしらのカタチをなすものではなく、試作機や通信方式、Pythonといったところの評価を兼ねての事だが。 改めてPMXがどういった素性を持っているかを紹介するまでもないが、今回評価するにあたり必要な点を挙げておくと、
といったところで、Dynamixelで謳っている事と大きな差異はないが、指令やフィードバックが物理値という所が琴線に触れる。電気的には既存のI/Fを流用することもできるだろうし、プログラムとしての概念も自分の認識と大きく乖離するものでもなさそうだ。
PMXのコネクタは手持ちのI/Fとは何ら互換性が無いので、EHコネクタへ変換するだけのケーブルを用意。
Raspberry Pi Zero用に試作したキャリアボードの評価も兼ねているので、XC330-T181-TがつながるようにRS-485からTTLに変換するケーブルを準備。
最後にキャリアボード。DXHATとPicoSHIELDのあいのこのようなもの。
今回はここまで。
技術 |
Controlling Dynamixel with Python (2024/01/09)
大勢を占めつつあるPython、多勢に無勢というのであれば全部Pythonで書いてしまえば前準備も端折れるという事で追記しました。
ちなみにデバッグに支障があるでしょうから、例外はクラスの中ではトラップしていません。
技術 |