myCobot 280 Piを買ってみた
前から気になってて買うかどうか迷ってたものがあります。それがmyCobotです。
中国深センのElephant Roboticsが製造している格安のロボットアームです。
日本でもスイッチサイエンスでいろいろ売られていて個人の趣味で使っていたり、ビジネスで活用している事例もちらほら見るようになりました。
そんなわけで僕もお試しでシュミレータで遊んでみました。
遊んでいたやっぱり実機が欲しくなりました。
というわけでスイッチサイエンスの年末セールでめちゃくちゃ安くなっているうちに買ってしまいました!まだ出ていませんが、ボーナスが出ることを考えると実質ボーナスで買ったようなもんですw。
ボーナスの先払いとしてmycobot 買っちった
— KMiura (@k_miura_io) 2022年12月27日
転職してこいつを余裕で買えるぐらいはボーナスもらえるから助かる pic.twitter.com/dHFYlTAXCM
今回購入したロボットは、中にRaspberry Piが使われているモデルで、買ったときの価格はなんと107,057円でした。
もっと安いM5 Stackのモデルでもいい気がしましたが、Raspberry Piにしておけば開発環境が本体に入っていて導入が簡単な気がしたのでRaspberry Piのモデルを選びました。(最近Arduino全然触ってなくてM5 Stackも触ったことないのもありますw)
というわけで今回はこれを開封して動かしてみたいと思います。
開封の儀
期待に胸を膨らませ開封の儀です。中に使われていた緩衝材は持ち運ぶときに使えそう。
開封して真っ先に出てきた冊子はmyCobotについての紹介と簡単なデータシートが載ってました。
やっと開封の儀 pic.twitter.com/UaDsgjohqt
— KMiura (@k_miura_io) 2022年12月29日
付属品はACアダプターとディスプレイに接続するためのHDMIとUSB TypeC、GPIOに接続する用のジャンパーケーブルでした。
意外と充実してる印象。
付属品の面々
— KMiura (@k_miura_io) 2022年12月29日
HDMIケーブルついてるのがいい pic.twitter.com/OvZxlb2USC
本体はこんな感じで折り畳まれて入ってました。
ご対面ー!
— KMiura (@k_miura_io) 2022年12月29日
折りたたむとコンパクト pic.twitter.com/nS4yVPDUU5
SDカードはすでに刺さってました(実質これも付属品みたいなもん?)。32GBが刺さっていて十分いろいろ遊べそうです。
すでにSD刺さってるってことはもう電源入れたら遊べるのか⁇ pic.twitter.com/z2YbHA9Jbh
— KMiura (@k_miura_io) 2022年12月29日
初起動
ディスプレイとキーボードを接続して電源を入れましたが、なかなか画面が映らず苦戦しました…
接続するHDMIの端子を変えたら無事に画面が映りました。初期不良かと思って焦りましたw
Ubuntuは18.04が中に入っていて、ROSのmelodicがすでにインストールされてました。
画面映らず苦戦しだけど端子を変えて映った
— KMiura (@k_miura_io) 2022年12月29日
Raspbianかと思ったらUbuntu入ってるのか(それは映像端子片方しか使えないの納得)
ということはROSもうセットアップされてるのか⁇ pic.twitter.com/0CASveabVc
軽く動かしてみる
無事に起動したところでアームを簡単に動かしてみます。
今回はRaspberry Piにプリインストールされたブロックプログラミングツールの「Blockly」を使ってアームを動かしてみます。
UIFlowのようなツールでプログラミング初心者でも手軽にロボットアームを操作できる仕組みになっています。この手軽さもRaspberry Piバージョンならではですね。
アームの姿勢は各ジョイントの角度と移動速度を指定するだけでフローに組み込めます。
↑の画像のフローは以下のJSONです。このJSONを適当なファイル名で保存してBlocklyのメニュー(右上の青いアイコン)から load
をクリックしてJSONファイルを読み込んでフローを試していただけます。
{"mode":"single","json":{"blocks":{"languageVersion":0,"blocks":[{"type":"init_mycobot","id":"uaX`U[m134rqSFY~Xsh}","x":10,"y":10,"fields":{"ROBOT":"MyCobot","BAUD":"1000000"},"inputs":{"PORT":{"shadow":{"type":"text","id":"J+-+mda/:}Y-+w{E:$=0","fields":{"TEXT":"/dev/ttyAMA0"}}}},"next":{"block":{"type":"send_angles_1","id":"C=VMoJpiGwzGD4MFP[IR","inputs":{"J1":{"shadow":{"type":"angle_slider","id":")oMGRn/k#V!ocD}~nd{O","fields":{"NUM":0}}},"J2":{"shadow":{"type":"angle_slider","id":"LpVGrUW*Ynse+N~^Yq3M","fields":{"NUM":0}}},"J3":{"shadow":{"type":"angle_slider","id":"3sN+mVz]tCX9Q~ifMRvh","fields":{"NUM":0}}},"J4":{"shadow":{"type":"angle_slider","id":"T#bY4NRmAha[;aP$$`nY","fields":{"NUM":0}}},"J5":{"shadow":{"type":"angle_slider","id":"D5p7BhS?ccjVijp6q{`:","fields":{"NUM":0}}},"J6":{"shadow":{"type":"angle_slider","id":"pdYOE27s]c0s|4claR~(","fields":{"NUM":0}}},"SPEED":{"shadow":{"type":"speed_slider","id":"`.Gqdg3kDY#w@Nt:#%Lx","fields":{"NUM":30}}}},"next":{"block":{"type":"time_sleep","id":"ZQ;itb$yoEWcH:$l#{-x","inputs":{"TIME":{"shadow":{"type":"speed_slider","id":"$2A%Y8L6ER,(^Uh_cKh:","fields":{"NUM":5}}}},"next":{"block":{"type":"send_angles_1","id":"JojW]r:0[}i7VeH;(48Z","inputs":{"J1":{"shadow":{"type":"angle_slider","id":"ug(]|NW$H%w-IbX5E^6B","fields":{"NUM":84}}},"J2":{"shadow":{"type":"angle_slider","id":"yb`$u_6q{xCmcerpc5k,","fields":{"NUM":-32}}},"J3":{"shadow":{"type":"angle_slider","id":"iVnqBlS37bvaJSf8mqd@","fields":{"NUM":-49}}},"J4":{"shadow":{"type":"angle_slider","id":"6*N88fhsf!Fl5sayN#h1","fields":{"NUM":46}}},"J5":{"shadow":{"type":"angle_slider","id":"At#_uYvI`[#z=Y4eR[.W","fields":{"NUM":-17}}},"J6":{"shadow":{"type":"angle_slider","id":"B=h*GS-kr1T]Vq0=#ZeL","fields":{"NUM":0}}},"SPEED":{"shadow":{"type":"speed_slider","id":"K/%yeBZz[V{be5g),3GO","fields":{"NUM":30}}}},"next":{"block":{"type":"time_sleep","id":"HJl$/:}64`M38v+sb4}h","inputs":{"TIME":{"shadow":{"type":"speed_slider","id":"L}PwKatHN=)foFUh)(#)","fields":{"NUM":5}}}},"next":{"block":{"type":"send_angles_1","id":"G7!%wy_GQtH#K]@p[(vB","inputs":{"J1":{"shadow":{"type":"angle_slider","id":"yh#[c{E7G|H.#njQ3Uzf","fields":{"NUM":-84}}},"J2":{"shadow":{"type":"angle_slider","id":"VeO#{=-K?GIOQl[*YHv(","fields":{"NUM":29}}},"J3":{"shadow":{"type":"angle_slider","id":"R~:~mLAHHuf*fUQL1g4{","fields":{"NUM":40}}},"J4":{"shadow":{"type":"angle_slider","id":"cpmN=i!E(5_7*jH|cR:4","fields":{"NUM":9}}},"J5":{"shadow":{"type":"angle_slider","id":"ew##4,aEGqnAc?-ocKD?","fields":{"NUM":37}}},"J6":{"shadow":{"type":"angle_slider","id":"@MYBM!Ys?|l_ciA]w|J8","fields":{"NUM":0}}},"SPEED":{"shadow":{"type":"speed_slider","id":"#_.(6dVi{/#B%pfdKe3O","fields":{"NUM":30}}}},"next":{"block":{"type":"time_sleep","id":"kp+=n}VCP:tGwl:5UWKJ","inputs":{"TIME":{"shadow":{"type":"speed_slider","id":"*ZB7lBh4RVzbCU0cUN5o","fields":{"NUM":5}}}},"next":{"block":{"type":"send_angles_1","id":"}q|wzzu,D.U)lY=)T9ox","inputs":{"J1":{"shadow":{"type":"angle_slider","id":"C`34CHdra_I!x]T5TKe4","fields":{"NUM":0}}},"J2":{"shadow":{"type":"angle_slider","id":"8j5ucjs1teV`_r3LGjU[","fields":{"NUM":0}}},"J3":{"shadow":{"type":"angle_slider","id":"Tfy;6/k5}*B*/A,M:9N!","fields":{"NUM":0}}},"J4":{"shadow":{"type":"angle_slider","id":"`G@{:]d]7GX*@F6v_kZ5","fields":{"NUM":0}}},"J5":{"shadow":{"type":"angle_slider","id":"K-{#{n0FPdBWc;DD4Pp*","fields":{"NUM":0}}},"J6":{"shadow":{"type":"angle_slider","id":"3QZpx%C9?u3o/=BhKZO.","fields":{"NUM":0}}},"SPEED":{"shadow":{"type":"speed_slider","id":"n?bzQP`%n$7XwbP2m42W","fields":{"NUM":30}}}},"next":{"block":{"type":"time_sleep","id":"9P56?4Bq#QqzME[(F4VA","inputs":{"TIME":{"shadow":{"type":"speed_slider","id":"qC9FQY8Jgh(p3m%vZLAC","fields":{"NUM":5}}}},"next":{"block":{"type":"release_all_servos","id":"!%!(0s%j-;y@d8.0rz0Z"}}}}}}}}}}}}}}}}}}}]}}}
フローを動かすと以下の動画の動きになります。
固定具がないとすぐ倒れてしまうので、よく見ると土台を手で抑えてますw
とりあえず軽く動かしてみた
— KMiura (@k_miura_io) 2022年12月29日
Raspberry pi なら本体だけで手軽にブロックプログラミングできるのいいね! pic.twitter.com/C5nKKIGwR5
myCobotの先端部分にはM5 Atomが使われており、LEDマトリクスの色をBlocklyから変えることもできます。
そのフローも作ってみたので以下のJSONで試すことができます。
{"mode":"single","json":{"blocks":{"languageVersion":0,"blocks":[{"type":"init_mycobot","id":"uaX`U[m134rqSFY~Xsh}","x":10,"y":10,"fields":{"ROBOT":"MyCobot","BAUD":"1000000"},"inputs":{"PORT":{"shadow":{"type":"text","id":"J+-+mda/:}Y-+w{E:$=0","fields":{"TEXT":"/dev/ttyAMA0"}}}},"next":{"block":{"type":"send_angles_1","id":"C=VMoJpiGwzGD4MFP[IR","inputs":{"J1":{"shadow":{"type":"angle_slider","id":")oMGRn/k#V!ocD}~nd{O","fields":{"NUM":0}}},"J2":{"shadow":{"type":"angle_slider","id":"LpVGrUW*Ynse+N~^Yq3M","fields":{"NUM":0}}},"J3":{"shadow":{"type":"angle_slider","id":"3sN+mVz]tCX9Q~ifMRvh","fields":{"NUM":0}}},"J4":{"shadow":{"type":"angle_slider","id":"T#bY4NRmAha[;aP$$`nY","fields":{"NUM":0}}},"J5":{"shadow":{"type":"angle_slider","id":"D5p7BhS?ccjVijp6q{`:","fields":{"NUM":0}}},"J6":{"shadow":{"type":"angle_slider","id":"pdYOE27s]c0s|4claR~(","fields":{"NUM":0}}},"SPEED":{"shadow":{"type":"speed_slider","id":"`.Gqdg3kDY#w@Nt:#%Lx","fields":{"NUM":30}}}},"next":{"block":{"type":"set_color","id":"8.(fA}%?.wBe([[oTNce","inputs":{"R":{"shadow":{"type":"math_number","id":"1o9P4^rVVSLHviG?;l)o","fields":{"NUM":255}}},"G":{"shadow":{"type":"math_number","id":"xq5s$kbb5!fC4U$#=ru4","fields":{"NUM":0}}},"B":{"shadow":{"type":"math_number","id":"`K@gUA(18l.5b@ulU#Rt","fields":{"NUM":0}}}},"next":{"block":{"type":"time_sleep","id":"J$MkTj8oxb,k%JK*aD{x","inputs":{"TIME":{"shadow":{"type":"speed_slider","id":"I$#Ner:3)|WC._YLE;7s","fields":{"NUM":3}}}},"next":{"block":{"type":"set_color","id":"+_s*|V1Fo2M1sHzW9;6;","inputs":{"R":{"shadow":{"type":"math_number","id":":Qd:9J*F*2$cnZnu;lIa","fields":{"NUM":0}}},"G":{"shadow":{"type":"math_number","id":"ZZ@=a];R8d:cUT2_v@=:","fields":{"NUM":0}}},"B":{"shadow":{"type":"math_number","id":"`}Qe-WqU7?0iOFCe)Y^!","fields":{"NUM":255}}}},"next":{"block":{"type":"time_sleep","id":"yp}u8P;Ru|iU*tzvWI9;","inputs":{"TIME":{"shadow":{"type":"speed_slider","id":"OiH4y/iqXZ]*(r0M9^au","fields":{"NUM":3}}}},"next":{"block":{"type":"set_color","id":"P}kE+@}j=I8pWn+F(~+0","inputs":{"R":{"shadow":{"type":"math_number","id":"1H@ce@;R8|GwxUt@eUl?","fields":{"NUM":0}}},"G":{"shadow":{"type":"math_number","id":"{~vz[812.$)E0M6*{cU,","fields":{"NUM":255}}},"B":{"shadow":{"type":"math_number","id":"OWgbZG|SUQk+X%DObiu$","fields":{"NUM":0}}}},"next":{"block":{"type":"release_all_servos","id":"!%!(0s%j-;y@d8.0rz0Z"}}}}}}}}}}}}}}}]}}}
フローを動かすとLEDマトリックスの色が順番に変わります。
せっかくなのでAtomのLEDを光らせた
— KMiura (@k_miura_io) 2022年12月29日
ずいぶんと高級なLチカですなw pic.twitter.com/rAh4la6Z7V
Blocklyからアームの姿勢角を確認することもできます。
画面の右上にある赤いアイコンをクリックしてポートに接続すると姿勢角を表示できるようになります。
まとめ
今回はmyCobot 280 Piを触ってみました。
Raspberry Piを使うことでLinuxを使ったロボットプログラミングを本体で直接できるのはとても魅力的で高くてもRaspberry Piバージョン買ってよかったです!
なによりROSがセットアップされているので、以前試したMoveitを使って制御ができそうです。
おまけ
完全所見で遊んでましたが、後になって調べたら公式ドキュメントがあることに気づきましたw
これでできることが更に増えそうです。
reComputer J1010をUSBブートさせてみた
この記事はSeeed UG Advent Calendar 2022 18日の記事です。
今更ながらJetson nanoを触ってみたくなり、Jetson nano開発者キットを探そうとすると在庫が全然なくて買えないんですよね…(執筆時点では値上げして販売再開されましたね)
そんななか、今年に入ってSeeedさんからJetsonモジュールを搭載したreComputerが発売されました。
まだJetson nano開発者キットの在庫がないときに試しに一番安いJ1010を買ってみました。(Bazaarで買ったのでついでに何個か小物買いました)
販売再開されたJetson Nano開発者キットの価格よりは割高ですが、蓋付きのアルミケースがあることを考えると値段としては妥当じゃないかなと思います。
でこのreComputerがJetson Nano開発者キットと大きく違う点がデフォルトのブートデバイスがeMMCであることです。
電源入れればすぐ起動することができるのはメリットですが、16GBしかないのでガッツリ色々ソフトを入れるとストレージが圧倒的に足りません。
というわけでガッツリ遊びたければディスク拡張をしていきたいわけです。
それで調べてみたらSSDでディスクを拡張する方法がありますが、残念ながら今回買ったJ1010はSSD接続用の端子がないのでこの方法が使えません…
というわけでUSBブートさせる方法をさがしてドキュメントが見つかりましたが、説明がよくわからなくてうまくいきませんでした…
なので今回はうまくいった拡張方法を書いておきます。
用意するもの
用意するのは16GBより大きいサイズのUSBメモリーだけです。今回は64GBのUSBを用意しました。
クリーンインストール
まずは以下の記事を参考にOSをクリーンインストールします。USBケーブルの選定で地味に苦戦しましたがM5 Stackで使うType-Cケーブルだと接続できました。
USBをフォーマットする
今度はUSBをフォーマットします。USBのボリュームを選択して Format Volume
をクリックしてext4形式にフォーマットします。
ボリューム名は自分が分かればいいので何でもOKです。
フォーマット後、ディスクがマウントされてないときは画像の赤丸の箇所が再生ボタンのマークになっているのでクリックして四角なっていることを確認します。
また、あとで使用するのでデバイスのパスも確認しておきます。
USBから起動できるようにする
以下のコマンドでセットアップに必要なスクリプト一式をクローンします。
git clone https://github.com/limengdu/rootOnUSB.git
クローンしたら起動時の早い段階でUSBが認識されるようにする設定をするスクリプトを実行します。
cd rootOnUSB ./addUSBToInitramfs.sh
以下のスクリプトを実行して起動ファイル一式をUSBにコピーします。引数に指定しているデバイスのパスはフォーマット時に確認したものに書き換えます
./copyRootToUSB.sh /dev/sda1
最後にUSBのrootfsから起動されるようにするために /boot/extlinux/extlinux.conf
の APPEND
の行を以下に書き換えます。
この他にもデバイスのUUIDを指定する方法やディスクのボリューム名を指定する方法があります。
APPEND ${cbootargs} root=/dev/sda1 rootwait rootfstype=ext4
再起動後、以下のようにルートのパス( /
)がUSBでマウントされてたらUSBブートは正常に成功しています。
以下はJetPack(Jetson向けのSDK一式)をインストールしたあとのディスク容量ですがそれでもディスク容量に問題ないことが確認できました。
これでディスク容量に悩まされることなく開発を進めることができますね!
$ df -h . Filesystem Size Used Avail Use% Mounted on /dev/sda1 57G 12G 43G 21% /
参考
【検証】WiMAXのモバイルルーターでSORACOMのSIMはつかえるのか?
この記事はSORACOM Advent Calendar 2022 5日目の記事です。遅刻してゴメンナサイ
今年は転職して週4リモート生活からほぼ毎日出社な生活に変わり外出する機会が増えました。
そして行き帰りの電車やら出先でPC触る機会も増えてきました。
そうなると携帯でテザリングする機会が増えますが、それだったらWifiルーターが欲しくなるわけです。
というわけで学生以来久々にジャンクなWiMAXのモバイルルーターを格安で入手しました。動作未チェックで500円でした。
取扱説明書や変換コネクタなどの付属品はだいたい入っていたので動いたら結構な当たりです(もともとついてなかったType-Cケーブルも入ってたのでだいぶお得w)。
とりあえず充電して通電確認をすると普通に起動できました。
ここまでできたらあとはこのルーターに使うSIMの選定です。プリペイドのSIMでもいいですがいつの間にか使えなくなるのは辛いですし、格安SIMを契約するにしても使用頻度にばらつきがあるので定額よりも従量課金がいいなーと思いました。
ん、従量課金のSIM…?
SORACOMがあるじゃないかーーー!!
というわけでここまで前置きが長くなりましたが今回はこのモバイルルーターでSORACOMのSIMが使えるのか検証していきます。
今回用意するSIM
なので今回用意するSIMはau回線を使うプランでPCに接続して使えるぐらいの程よいバンドルのplan-K2を選択しました。
注文後、翌日には宅配ボックスに届きました。あいかわらすのスピード出荷!
SIMの注文自体久々で新デザインのやつも初めて手にしました。
ちょっと試したいことがあってSORACOMのSIM買ってみた
— KMiura (@k_miura_io) 2022年12月8日
検証したらアドベントカレンダー投稿します!#SORACOM pic.twitter.com/IwWlmAH6A0
受け取ったら忘れずにSORACOMのユーザーコンソールから受け取り確認、登録をしておきましょう。これでSIMが使える状態になります。
ルーターに挿入する
このルーターにはナノサイズのSIMが入るので一番小さいサイズにカードを切り抜きます。
カードを切り抜いたらルーターの電源を落としている状態で端子部が画面側に向くように差し込みます。
カードを奥まで差し込んで電源を入れます。電源を入れて左上の通信ステータスが圏外になっていればSIMは問題なく認識しています。
この時点ではまだネットワーク設定をしてないので、外部のネットワークに接続できない状態です。
ネットワーク設定をする
今度はネットワーク設定をしていきます。
アクセスポイントの設定は以下のドキュメントを参考にセットアップしていきます。
接続したらブラウザで http://192.168.100.1 に接続します。
デフォルトではユーザー名は admin
、パスワードは手持ちのルーターのIMEIの下5桁です。(ちなみに今回のルーターは初期化されてたっぽく問題なくデフォルトのログイン情報でログインできました)
本体をロックしないとログインできないので、ロックしておきましょう。
ログイン後、設定タブをクリックして左のメニューから プロファイル設定
を開きます。
画面下部の 新規
をクリックして以下の情報を記載します。
入力したら 保存
をクリックします。
あとはターミナルで ping pong.soracom.io
を実行して疎通確認が取れたらネットワーク設定は正常に完了しています。
おまけ
せっかくなのでスピードテストをやってみました。
IoT向けのSIMなのでそこまで早くはないですが、出先で軽く使う分には問題ないと思います。
おまけ その2
実際に地下鉄でPCにWifi繋いでこのブログの修正してますが、携帯でテザリングしてた時よりも遅延が少ないのでかなり快適に作業できています!
これでWifi問題は解決です!
まとめ
今回はWiMAXのモバイルルーターでSORACOMのSIMを使ってみました。
お手頃に外でネットワーク接続できるようになったので出先の作業もやりやすくなったと思います。
パトライト(NHL-3FB1)をHTTP通信で操作してみた
前回は大須で買ったパトライトをCLI操作できるようにしてみました
このパトライトではHTTP通信ができると思って買いましたが、中のファームウェアが古くてHTTP通信に対応してませんでした。
というわけで今回はファームウェアを更新してHTTP通信ができるようにしてみます。
ファームウェアをアップデートする
まずは最新のファームウェアを入手していきます。
ちなみにHTTP通信に対応したファームウェアは1.45から対応していますが、2022年11月時点では最新のファームウェアは1.46です。
なので最新のファームウェアをダウンロードすれば良さそうです。
ファームウェアをダウンロードするにはお客様登録する必要があります。無料で登録できます。
以下のリンクのフォームから名前やメールアドレスなど、必要な情報を記入して送信すると担当者からメールでファームウェアのダウンロード先とダウンロードに必要なログイン情報が送信されます。(ちなみに個人でもちゃんと受け付けてくれました)
あとはメールに書いてあるファームウェアをダウンロードして中に入っているreadmeに沿ってファームウェアをアップデートするだけです(流石に詳細な手順を書くとメーカーの禁則事項に触れそうなのでやめておきます)
最終的にファームウェアの更新時に再起動された後に管理ツールの システム設定
を開いてファームウェアバージョンが1.46になったらファームウェアのアップデートは成功です。
さらに一番下のHTTPコマンド制御機能が有効になっていればHTTP通信で表示灯を操作する準備は完了です。
HTTP通信をしてみる
準備整ったところで、HTTP通信やってみます。
APIのリクエスト構文はすべて共通でhttp://<IP address>/api/control?<パラメータ名>=<値>
になっていてメソッドは GETです。
なのでcurlコマンドだと以下のような超シンプルなコマンドを叩けば操作できます。
curl "http://<IP address>/api/control?<パラメータ名>=<値>"
パラメータ名は control
と clear
の2パターンで回転灯の光らせ方やブザーの鳴らし方を制御するのは control
で回転灯やブザーを完全に止めるのは clear
になります。
前回のブログでやってた制御コマンドよりもライトの点灯、点滅パターンを10進数の形式で細かく制御できるのでかなり直感的です。
例えば赤をパターン3で点滅させてブザーのパターン3を鳴らしたいときには以下のコマンドを叩きます。パラメータ値の9は現状維持なので、OFFにしたいときは0に設定します。
curl "http://192.168.10.1/api/control?alert=399993"
全部消灯したいときはalertの値をすべて0にしてもいいですが、パラメータをclearにして以下のコマンドで消灯するのが簡単です。
curl "http://192.168.10.1/api/control?clear=1"
ここで紹介したコマンドをreTerminal上で叩いたら無事に動きました!
ファームウェアをアップデートさせて無事にHTTP通信でパトライト動いた!
— KMiura (@k_miura_io) 2022年11月23日
これでいろいろ遊べるぜ‼︎ pic.twitter.com/ZbV8XdgxX2
リクエストのパラメータ設定方法は結構簡単にドキュメントがわかりやすいので以下リンクの取扱説明書の 3.20 HTTPコマンド制御機能
をみてもらうと分かりやすいです。
https://www.patlite.jp/download/NH-SPL-ManualT95100138_01.pdf
まとめ
今回はHTTP通信を使ってパトライトを制御できるようにしました。
やっぱりWebエンジニアの自分からするとcurlコマンドでHTTP叩いて制御できるのは気持ちいいですね。
これでいろいろ遊ぶ準備ができたのでまた何個かネタを仕込んでみますよー!
reTerminal(Raspberry Pi)でパトライト(NHL-3FB1)を動かしてみた
前回のブログからだいぶ間が空いてしまいました…
あれから仕事がクソ忙しくなりなかなかブログの更新もできずでしたが、肩慣らしにネタを用意しました。
先日これまた久々に大須のパソコンショップパウさんに行ってきて、パトライトが売られてたのでつい買ってしまいました。型番はNHL-3FB1で値段はジャンク価格で3000円でした。
久々にパウきたら意外なもん売っててつい買ってしまった
— KMiura (@k_miura_io) 2022年11月20日
HTTP通信で制御出来るようなので遊び甲斐ありそう pic.twitter.com/UZzFjHyWT3
このパトライトは有線で接続することでそこからネットワーク監視をするために使われる機材らしくコマンドを送信することでライトだけではなくブザーを鳴らすこともできるすごいやつです。
これをジャンクで販売するパウさん、やばいですw。本体のみで販売してたのでおそらく詳細に動作確認する素手がないのでジャンクにしたのでしょう。Tweetに写り込んでるACアダプタは完全に社外品ですが、かごに絡まってるACアダプタから奇跡的に端子と出力電圧が合っているやつを引き当てました。(ライト側には電流の指定がなかったので多分問題なく動くでしょうw)
というわけで今回はこのパトライトをreTerminalで動かしてみました。
とりあえず動作テスト
まずはテストボタンがあったので適当に長押しして動作確認してみました。
ここで通電しないと何も始まりませんが、ここは問題なく通電してテストボタンもちゃんと機能しました。どうでもいいですがCLEARボタンの押し心地いいですw。
とりあえず通電チェック
— KMiura (@k_miura_io) 2022年11月20日
音も出るしハック楽しみだなー#パウもりあげ隊 pic.twitter.com/oarlbkKMc6
初期化する
問題なく動作することがわかったところで接続をしていきますが、その前にジャンクなので前に使っていた人の設定が残っていると原因の切り分けが面倒なのでここは工場出荷状態に初期化します。
NHL-3FB1の初期化はとても簡単で電源を落としている状態でVOL.スイッチをOFFにした状態でTESTボタンとCLEARボタンを同時押しして電源をいれます。
するとブザーを鳴らして初期化が始まります。ブザーが鳴り止んだら押してたボタンを離して初期化は完了です。
reTerminalで接続する
IPを割り当てる
それではreTerminalで接続していきます。
NHL-3FB1のIPアドレスは 192.168.10.1
です。これをブラウザで入力すれば接続できるのですが、機能上の制限でDHCPが機能しなくてIPを自動で割り当ててくれません。
というわけで接続前に同一のセグメントで固定IPを設定する必要があります。
Raspberry Piであれば /etc/dhcpcd.conf
に以下の設定を書き込めばNHL-3FB1に最低限接続できるようになります。( ip_address
は複数使う場合は変更する必要があります)
interface eth0 fallback static_eth0 static ip_address=192.168.10.2/24 static routers=192.168.10.1 static domain_name_servers=192.168.10.1
あとは再起動すれば接続するための準備は完了です。
管理画面を開く
再起動したら、ブラウザで 192.168.10.1
と入力すると管理画面を開けます。
初期状態ではパスワードは patlite
を入力すると管理画面を開けます。
管理画面から 表示灯操作
を開くとブラウザで手軽にライトとブザーを動作できます。
なんとかreTerminalでネットワーク設定終えて治安の悪いパトライト爆誕w pic.twitter.com/O6gpssi5NR
— KMiura (@k_miura_io) 2022年11月20日
コマンドで動かす
買ったときにその場でググったときにはHTTP通信ができる的な書き方してましたが、ファームウェアが古いせいでHTTP通信に対応してないようでした…
代わりにNCコマンドを使ってソケット通信で16進数を送信する方法を見つけたので、試していきます。
この方法を試すには bc
コマンドが必要ですがインストールされてないので、以下のコマンドでインストールしていきます。
sudo apt install bc
あとは参考記事にあるPHNコマンドを試しにやってみました
以下のコマンドは緑を点滅させてそれ以外をOFFにしてます。
echo -ne '\x57\x'$(echo "obase=16;ibase=2;10000000" | bc) | nc -q1 192.168.10.1 10000
さらに以下のコマンドで赤の点滅とブザーを鳴らすのを同時に実行できます。
echo -ne '\x57\x'$(echo "obase=16;ibase=2;00101000" | bc) | nc -q1 192.168.10.1 10000
もっと細かく操作するならPSNコマンドを使いますが、PSNコマンドを動かすだけでもアプリケーションに組み込んでいろいろできそうです。
まとめ
今回はジャンクのパトライトを買ったので、reTerminalでハックしてみました。
ネットワークの知識が乏しくて設定とか操作で苦戦しましたが、なんとか自由自在に操作できるぐらいまではできるようになったので十分かなと思います。
せっかくなので今度Ogaki Mini Maker Fairの見世物に持っていくためにいろいろ仕掛けてみようと思います!
Real VNC ServerをUbuntuにセットアップして別のネットワークからでも接続できるようにしてみた
転職して3ヶ月経ちましたが抱えている悩みがあります。
それはオフィスのデスクトップPCに家から接続したい。
出社がメインでオフィスではデスクトップPCを使って作業していますが、リモートワークもすることがありオフィスで作業した内容をコミットし忘れて作業が出来ないという課題がありました。
というわけでこの課題を解消するためにReal VNCを導入して別ネットワークから接続できるようにしてみました。
今回はUbuntuのデスクトップPCでのセットアップ方法を紹介します。
インストール
以下のサイトからReal VNC Serverをインストールファイルをダウンロードします。
以下のコマンドでインストールします。
sudo dpkg -i ./VNC-Server-6.9.1-Linux-x64
依存パッケージをインストールします
sudo apt install libcanberra-gtk*
セットアップ
UbuntuでVNC ServerをセットアップするにはReal VNCアカウントが必要です。
アカウントが無いときは以下のサイトから無料で作成できます。
https://manage.realvnc.com/en/
アカウント作成したらRealVNCを起動して画面の流れに沿ってセットアップしていきます。
基本的にはデフォルトの設定で進めればOKです。
これであとは接続するPCにVNC Viewerをインストールして右上からログインを行います。
ログインが完了し、先程のセットアップしたPCと接続できたら完了です。
ログアウト状態からでも接続できるようにする
このまま接続するのはいいのですが、PCを使わないときはログアウト状態が続きます。
Ubuntu 20.04だとデフォルトの設定ではログアウト状態が長続きするとスリープになってしまい、ネットワークも切断されます。
そこで↑を参考に以下のコマンドで自動スリープを無効にします。
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
これでログアウト状態のPCにいつでも接続できるようになります。
Raspberry Pi zero 2 w開封レビュー
先日奇跡的にRaspberry Pi zero 2 wをスイッチサイエンスで買えました。(ちなみに右側の赤いボードは送料ケチるために買ったシリアル変換アダプタです)
やっとRaspberry Pi zero 2w届いた!
— KMiura (@k_miura_io) 2022年6月26日
というわけで今日はこれで遊ぶ pic.twitter.com/YblDDzQoR7
今回は外観やちょっとした比較をしてみたいと思います。
外観
インターフェースが初代のzero Wと変わらないこともあってパッと見は何も変わりませんが、CPUにRaspberry PiのロゴがあったりGPUにヒートシンクが付いてるところは大きく違います。
開封の儀
— KMiura (@k_miura_io) 2022年6月26日
インターフェースは初代のやつと変わらないけどCPUにロゴがあるのがいいね pic.twitter.com/JdLEv5Hdw9
手元にあったzero Wと比較するとこんな感じです。ある程度スペースに余裕があるケースであれば互換性がありそうなぐらいよく似てます。
初代zero W(バルク品との比較
— KMiura (@k_miura_io) 2022年6月26日
実装部品はだいぶ違うけどパッと見はよく似てる pic.twitter.com/QvO8EDrETQ
今のところはピンヘッダが実装されてないので、GPIO使いたいときにはピンヘッダを何処かで買う必要があります。
火入れ
64ビットのCPUになったので、試しに64ビットのRaspberry Pi OSにインストールして動かしてみました。
初回の起動は多少遅いですが、なんとか動かせました。
あまりに長いのでマジで焦りましたw。
火入れ
— KMiura (@k_miura_io) 2022年6月26日
起動に時間がかかって64bitのOS使えないのかと思ったw pic.twitter.com/Aky8RHpPpB
ベンチマーク
今度は性能がどんなもんなのか調べるためにベンチマークを採ってみます。
当然、zero 2 wだけで測定しても意味がないので比較のために今現在市場に出回ってなくもない以下の4台を比較してみます。
- Raspberry Pi zero 2 w
- Raspberry Pi zero w
- Raspberry Pi 3 Model B+
- Raspberry Pi 4 2GB
そしてベンチマークの測定には比較的簡単に使えるUnix Benchで軽く確認してみます。
以下のコマンドでインストール・実行します。
sudo apt install git git clone https://github.com/kdlucas/byte-unixbench cd byte-unixbench/UnixBench ./Run
上記コマンドをそれぞれのボードに対して行いました。その中から恣意的に選んだ5つの項目のIndex値についてグラフで出力しました。
各項目の内容はこんな感じです。(参考:https://blog.idcf.jp/entry/cloud/unixbench/)
- Dhrystone 2 using register variables:整数演算処理の伝統的なベンチマークツール
- File Copy:ファイルのコピー(ライト→リード)を繰り返すテスト
- Pipe Throughput:データをパイプ処理しこれを繰り返し実行することでスループットをテストしている
- Shell Scripts:sort、od、grep、tee、wcコマンドやパイプやリダイレクトを使ったテキスト処理を繰り返すテスト
- System Call Overhead:プロセスIDを返す単純なシステムコールを繰り返し実行するテスト
そしてベンチマーク全体を通してのインデックススコアのグラフがこちらです。
やはりzero 2 Wは zero Wよりも圧倒的に性能が向上しているのはすごいですね!
まとめ
今回はRaspberry Pi zero 2 Wの動作確認も兼ねた開封レビューをしました。
Wifiは2.4GHzしか対応してなかったりしますがzero Wよりも多少性能が上がったので高度な処理を必要とするロボットに組み込むにはぴったりなんじゃないかなと思いました。
今のところ1個しかないのでもう1個入手したら今作っているロボットに組み込んでみてもいいのかなと思いました。