2019年10月29日火曜日

playstation4 cameraをvisual studioを使わずにwindows10で使う(Python使用)

PS4カメラでSLAMとかを動かしたいと思ってメルカリで1000円でポチったので今回はそれをなるべく楽ちんにwindows10で使ってみた(備忘録)的な記事でございます。


まず、そもそもパソコンに物理的にコネクション出来るようにしなければいけません。
Aliとかebayで変換コネクタを買えるのですが、中古で1000円程度で買えるカメラなので壊しても許されるかと思って私はケーブルの端子をUSB3.0に付け替えました。

PS4カメラでは新版(CUH-ZEY2)と旧版(CUH-ZEY1)があるのですが、間違いなく動かしたい方は旧版をおすすめします。ただ、新版でも動くかもしれないです。

あと、USB3.0必須です。
USBコントローラによっては動作できないものもあるようです。(古い物では動かないものがあるらしい)

では、実際の作業をダラダラ書いていきます。
というか、コネクタの付け替えとドライバ周りについては
こちらのサイトを参考にさせていただきました。

コネクタの付け替えは他のケーブルとくっつけてる方も多かったですが、
初め、その方法でやった時コネクションロストがたまに起きたので、
コネクタで根本から配線することをおすすめしたいです。
(どちらにしろ絶縁処理はしっかりとね)

そんな感じで秋月電子で買ってきたコネクタをこんな感じでハンダ付けして…



次はドライバ周りですけど、Zdiagを開いて、
Driverをlibusb-winにして、インストールしてください。



次が参考にさせていただいた記事と違います。
まず、windowsにpythonをインストールしてください。(Windows storeのpython3でも可)
そのあとPowerShellを開いて、

pip install --pre pyusb

と入力してください。


その後、こちらをダウンロードして、解凍してください。

解凍したフォルダーのscriptディレクトリにPowerShellで移動して、

python ps4eye_init.py

を実行してください。


そうすると、PS4カメラにファームウェアがインストールされて
UVCカメラとして認識されるはずです。


お疲れ様でした!!



お気づきかと思われますが、この手法はmacでもlinux系でもpythonとpyusbがインストールできれば使えるはずです。

1000円ちょっとでハイスペックステレオカメラで遊べれるのはとっても魅力的!!(´艸`)
みなさんも挑戦されてはいかがですか?




2019年10月6日日曜日

stm32(NUCLEO-F767ZI)でUDP通信する!

stm32シリーズ第二弾ということで今回はUDP通信です。

nucleoボードの中にはEthernet端子がついていているものもあり、
お値段もピンきりではありますが、NUCLEO-F767ZIは3000円を切って購入できます。
そのくせメモリ豊富で動作周波数もなかなか高いのでとても夢広がる(?)マイコンボードです。

...ということでRTOSとLWIPもりもりで今回はお送りします!(笑)

まず毎度恒例動作環境です。

  • Windows 10 (ver 1903 build 18362.356)
  • STM32CubeMX (ver 5.3.0)
  • Atollic TrueSTUDIO® for STM32, Built on Eclipse Neon.1a.(ver 9.3.0 build id 20190212-0734)
  • 使用ボード: NUCLEO-F767ZI

まずはcubeMXでクロック周りやRTOSやLWIPなどを設定してください。
STM32でEthernetするっ!様のサイトがとっても参考になりました!
この場を借りて感謝申し上げますm(_ _)m

お次はソースコードです。
私の拙いコード(githubに繋がります)を用いてください。

このソースの肝はudp_easy_io.hとudp_easy_io.cです。
こいつらはLWIPの処理を丸めた関数群です。基本的には

  • 1.UDP_EASY_IO_init()関数でポート設定とアドレス設定をする。(初期化)
  • 2.自分のさせたい処理用(main関数に書きたい処理)に新しくRTOSでタスクを始動させる
  • 3.そのタスクの中でUDP_EASY_IO_write()関数を使って送信するなり、UDP_EASY_IO_read_char_prt()関数を使って受信するなりごにょごにょする。
といった感じで使います。
詳しくは私の拙いコードのなかにあるmain.cをご参照くださいませ。

あとはビルドして書き込んでPCとLANケーブル直挿ししてマイコン側の準備は完了!(ざっくり

今度はIPアドレス設定です。
cubeMXでDHCPに設定してarpコマンドからIPアドレス特定するとかでもいいのですが、
めんどくさい(おい)ので、今回の例では固定IPにしています。

まず、タスクバーのネットワークアイコンを右クリックして、出てきたメニューのなかにある「ネットワークとインターネットの設定を開く」をクリック

つぎに、「アダプターのオプションを変更する」をクリック
つぎに、マイコンと接続しているアダプタ以外(ここ大事)を右クリックで一覧にあるプロパティを選択

あとはネット共有をマイコンと接続してるアダプタに指定してあげるとな。

これでwindows側の設定は完了です。
コマンドプロンプトを開いてcubemxで設定したIPアドレスに向けてpingを送ってみて応答確認してください。
応答が...あるッ!!
こんどはUDPのパケットを送るツールの準備です。
Pythonとかでスクリプト書くなり好きにしてください(なげやり
私はUDP/IPテストツールを使わせていただきました。
こちらもこの場を借りて感謝申し上げますm(_ _)m

んで、メッセージを受信したり送ったりしてみます。
なお、今回の私の拙いコードではUDP通信で受信した文字列をUART経由で出力される仕様になっています。ボーレートは115200です。

んまぁこんな感じでごにょごにょすると↓の動画のようになってくれるはず??

お疲れさまでした!!



イーサネット通信は通信コストはいくらか掛かりますが、無線LAN子機を用いたりすることで容易に無線化できたり、IoTできたりするわけです。個人的に美味しい要素は

  • データをやりとりする上でデータの区切りがはっきりしている
  • 差動線通信であったりアダプタがぬけにくいため、不安要素がいくらか拭える
といったところでしょうかね。
あと今回はLWIPもですが、RTOSもstm32ではお初のテーマでした。
いろいろ調べていくうちにCMSIS2ってFreeRTOSをラッピングしてるだけだと知り、
そのままFreeRTOSのAPIを叩いちゃいました(笑)
だって情報量がFreeRTOSのほうが多いもん...(切実

こんな感じで夢が広がるマイコンボード、皆さんどうでしょう?(〆が雑