えいあーるれいの技術日記

ROS2やM5 Stack、Ubuntuについて書いています

M1 Macはシングルボードコンピュータです🍎①

もう2ヶ月前になってしまいますが、Apple製品を中古で2つ購入しちゃいました🍎📱

1つは Mac mini (M1 8GB RAM)、もう一つはiPhone 15 Proです。

iPhoneの方はスキャン試したいなーというノリでMacのついでに買いましたが、よく考えたらスマホの方が中古のMac3台分の価格するんですね🙃


初任給手取りが吹っ飛ぶレベルのスマホと聞いていたのですが、中古でもめっちゃ高かったです💸💸💸

この2台をクレカ一括で支払ってしまったので、明後日くらいにものすごい額が吹っ飛ぶ予定です。

もやし生活再開の機運…?


以前のPCでお小遣いを吹っ飛ばしたAr-Rayの記事↓

ar-ray.hatenablog.com

ar-ray.hatenablog.com


M1 Mac miniとは?

M1 Mac miniAppleが販売するミニPCシリーズであるMac miniの2020年モデルです。

この時期に出たMacシリーズは全てARM64ベースのAppleカスタムのSoC(通称Appleシリコン)を搭載しており、従来とは比べ物にならない性能と省電力を兼ね備えています。

私は2年前くらいにおもちゃとしてM1 Macbook Airを購入したのですが、この性能の高さには驚きました。

今でこそ15万くらいするMacシリーズですが、当時は10万くらいで購入できたシリーズだったので、安定動作する環境さえそろえばAppleらしからぬ「価格破壊」PCです。


リリースからすでに3年経ち、かなり環境も整ってきている気がします。最近はメモリ帯域の太さを生かした生成AI・LLMのローカルランタイムとしての活躍もちらほら見られるようです。

個人的には最新のM3チップを搭載したMac miniMac studioに期待しています。

性能や価格によってはこれを機にamd64環境を捨ててもいいかなーとすら思っていたり。


セットアップ。そして分解

最安値と思われるMac miniを現地調達してその日のうちにセットアップしました。

ユーザ名は「m1_mac_de_hajimeru_ros2」にしました。最近はM1 MacでROS 2を動かすことが流行しているようです。

ar-ray.hatenablog.com

リモートログイン設定などを行ったので、分解します。


分解しようとしたら、早速困難にぶつかりました。

ネジの形が全く合いませんでした。

教えてもらった工具キットをAmazonで調達して翌日分解しました。

たくさん種類がありましたが、Mac miniの分解には5種類くらいのネジ頭があるのでこれだけで十分でした。ただ、届かないところもいくつかあったので注意です。


次に電源です。

Mac miniは100VのAC入力ですが、ボードは12V入力なので、電源線を改造してバッテリー駆動させることにします。

YouTubeで動画を漁るとAC入力をDC入力に改造する動画が見つかったので、これをもとに改造しました。

www.youtube.com

色が全部同じなので、ややこしかったりします。あとはコンデンサに溜まっている電荷には注意です⚡️


電源ボタン(床に落ちていたバスの降車ボタン)を追加して、改造完了。

ar-ray.hatenablog.com

バッテリー駆動したらそれはもう実質MacBook🙃💻


軽いスペック詳細

CPU性能とかは他のサイトにいくらでも転がっていると思うので、個人的にSBCとして使えるのかどうか軽く調べました。

サイズ

ラズパイと並べて比べてみました。

Mac miniの筐体は結構大きめでしたが、本体自体はN100向けマザボやJetson Nanoボードとあまり変わらないくらいでした。

USB4やEthernetが使えるので便利です。


電力

グラフとかは用意できませんが、アイドル時(デスクトップ画面出すだけ)場合は、3.5Wを中心に揺らいでいました。

簡易的な電力測定の様子

ラズパイ5が2.8W、N100が7.2WなのでARMらしい省電力ですね。


CPU 8コアをstressコマンドで負荷をかけた時は11.5Wくらい消費します。10Wちょっとで済むのはすごい。

普段使いやROS 2程度のコンパイルでも性能不足は感じなかったので、かなり驚きでした。


まとめ

性能・省電力・サイズ・コストともに合格ラインは大幅に超えてそうでした。

ロボット向けに使えるかどうかはこれから(ゆっくり)検証していこうと思います。

perception_pclにpointcloud_to_pcdのROS 2実装を追加しました

最近、OSSLinux界隈を騒がせているxz-utilsの問題(CVE-2024-3094)がありました。手口の地道さ・巧妙さなども相まって信頼性等に大きな疑念を生じさせている事態になっています。

OSSは含まれていないものを探す方が大変なくらいにはソフトウェア構築で必要不可欠な存在となっています。

使用する側も「よくわからんけど動いた」ではダメですね。


…ということで(?)、私もOSSのどこにどんなことをしたのかというのは逐次報告していきます!🫡

(別に高度なことをしているわけではないですが…)


pointcoud_to_pcdのros2ブランチにpcd保存プログラムを作成

ROS 2の点群処理用ライブラリ "ros-perception/perception_pcl" にはROS 1の時代から使用されてきた点群処理ツールが揃っていますが、ROS 2に移植されていないものも多いです。

pointcloud_to_pcd(pointcloudトピックをpcdに保存するやつ)もその一つで、個人的にRealSenseのデータをもうちょっと扱いやすいフォーマットで保存したいなぁと探していたところ、このツールを見つけたのですが、ROS 1のみだったので移植しました。

1週間前にプルリクを投げ、今日マージしてもらいました。

github.com

基本的な使いかた

pointcloudを.pcdに保存するプログラムなので、もちろんpointcloudトピックが出ていることが前提です。

RealSenseとかは比較的入手性がよく精度の良い点群を出してくれるのでおすすめです。


点群(sensor_msgs/msg/PointCloud2)をsubscribeできるようになったら、pointcloud_to_pclの出番です。

ros2 run pcl_ros pointcloud_to_pcd --ros-args -r input:=/cloud_in \
    -p prefix:=abc_ \
    -p rgb:=false

オプションは次のとおりです。

オプション名 役割 デフォルト
prefix ファイルの先頭に付く名称(パスにしてもよい) '' abc_
fixed_frame 別視点で点群を保存したい場合に使用される基準フレーム '' base_link
rgb RGBの点群を保存できるオプション false
binary ASCIIの代わりにバイナリを使用します false
compressed 圧縮します。binary=trueを前提とします。 false

点群の入力は 'input' なので、remapしてください。

実行すると、中断されるまでタイムスタンプを末尾につけてずっとpcdファイルを生成し続けるので、生成し終わったらCtrl + Cで中断します。


生成されたファイルを見たい場合はPCD Viewerで確認します。

pcl_viewer <path to pcd file>

素晴らしい👏👺🐢


Velodyne (32 line) だと1秒に10枚くらい出してくれました。

RealSenseだと結構遅めだったり、よく分からない角度を正面とするので、static_transform_publisherでフレームを追加したり前処理で閾値を決めてフィルタしちゃうと良いでしょう。

楽しい点群ライフを👋


ブログ5年目。

このブログは開設から4年経過しました。これまでで228本の記事、累計閲覧数 15.1万(1年で6.7万増加)のブログ記事となりました。いつもご覧頂きありがとうございます。

4年前の記事→初投稿 - えいあーるれいの技術日記

3年前の記事→ブログ開設1年。これまでとこれからについて - えいあーるれいの技術日記

2年前の記事→ブログ3年目。 - えいあーるれいの技術日記

1年前の記事→ブログ4年目。 - えいあーるれいの技術日記


素晴らしく順調

昨年は

今年度から社会人(?)で普通に業務に取り組まなければいけませんが、数年間文章を書きつづけられているのでこれからも変わらず書き続けられると思います。

と意気込んでいましたが、質を落とすことなく(なんならインフレ気味)継続できました。

仕事の順調さについても、私の活動範囲とそのスピードが証明していることでしょう。


しかしながらまだまだ足りません。

年間の1/3は体調がよくなかったのですから。昨年の反省を生かしつつ今年は昨年の倍頑張ります。

未知を走る自称若者に甘えなんて許されません(戒め)


軽く振り返り

振り返ってみると、今年は前半節約志向、後半になってようやくまともな技術記事になっていました。

割と本当に財布の余裕がダイレクトに影響するのかもしれない。つらー😇

クレカの上限が20万くらいしかなかった頃に20万くらい月で使って詰みかけていたので大変だった(気がする


ar-ray.hatenablog.com

1年前は通信費もケチっていました。半年前に訪問系セールスに敗北してからは光通信を使っています。快適。

ちなみにルータについては、スマホがないとログインできなかったりとゴミ仕様だったので捨てました。


ar-ray.hatenablog.com

すごく高品質な画像も8GBくらいのRAMで生成できるようになって驚いたのでその画像で壁紙を作っていました。

背景切り抜きについてはiPhonephotoshopで十分対応できてしまうので、この回でLinyax最終回です。


ar-ray.hatenablog.com

1.5万で2560x1600の格安モバイルディスプレイも購入しましたね。

今も大活躍中です。タブレット用スタンドと組み合わせて使っています。


ar-ray.hatenablog.com

みなさんは「からあげ帝国」というのを知っていますか?

ブログ・AIで有名な闇のエンジニアの「からあげ先生」のファンコミュニティです。

私もこの第一回オフ会に昨年参加しました。

このオフ会により、からあげ先生が闇のエンジニアから引退されたお話は後世に語り継がれることでしょう。


ar-ray.hatenablog.com

「ハードウェア方面も力入れたい」と一昨年から思っていたことの第一弾となる記事です。

こういう作業はドライバ作成から始まるので、なかなか作るものがないとモチベにならないのが辛いところだったので、2軸とディスプレイで構成されるスタックチャンは非常にありがたい存在です。

イカーフェアだけでなく深圳にも持っていってもらい、スタックチャンの生みの親であるししかわ様に感謝です🙏

今後とも私が作成される資料にちまちま登場することでしょう。


ar-ray.hatenablog.com

10月末に唐突にロボコンする!と言い出してからもう半年です。時間が経つのは早いですね。

「CoRE-1」(The Championship of Robotics Engineers)というロボット競技が今年から正式に始まりました。

CoREは走行するロボットがフライングディスクを互いのロボットの的に当て合う競技ですが、異なるチームが「同盟」として協力して対戦するルールやエンジニアの活動にスポットライトを当てる評価制度があり、他のロボコン競技とは少し性質が異なります。

core.scramble-robot.org

参加対象が広いことやハードウェアの改造がない自動機ルールなど、ロボット競技の裾野を広げるようなルールメイクに感銘を受けて、エントリー締め切り直前に宣言だけしてメンバーを集めました。


実は、この数日前にはオセロAIを観にクマ財団の展示に行っており、「やっぱ芸術物いいな!芸術家目指しても良さそう!」と意気込んでいました。

もしCoRE-1に参加していなかったら「美術館に行こう」みたいなタイトルと共に自由なものづくりをしたいみたいなことを書いていた説があります🎨🙃

一方で、ロボット競技に登場するロボットもものすごい試行錯誤を経て作成されたものであり、他チームが作ったロボットの理解にはものすごい技術的バックグラウンドと自分自身との対話が必要不可欠です。

つまり、ロボコンのロボットは芸術そのものというわけです(?)素晴らしい。🎨🙃


たまたま答えが近くに落ちていたのでしょうか?それともただの勘違い?

少なくともこのようなきっかけになったCoRE運営の方々とクマ財団の展示に行くきっかけを与えたにゃにゃん様には感謝です。


ar-ray.hatenablog.com

元々お金ない学生だったこともあり、価値観がコスパに歪められまくっている悲しい運命ですが、バッテリーがついているならとちょっと奮発しました。

時代はやっぱりコードレスですね。

これをきっかけに品質も重視するようになり、最終的にはiPhone15Proを勢いで購入するまでになります😇


ar-ray.hatenablog.com

この記事を書いている途中、作っておいてほとんど動かしていないことに気づきました😇

急ぎでDynamixelに交換しなければ(コスパisどこ)…


ar-ray.hatenablog.com

2024年1月はRealSense芸3連発をしていました。

実は最新のカーネルだとRealSense 2台接続しても動くというものです。

RaspberryPi5だともっと快適に動くのかもしれませんね😉


ar-ray.hatenablog.com

2月もRock5しばきしていましたが、ほのぼの回もありました🚎

秋葉には本物の鉄道・バス部品が売っているようなので、ぜひ覗いてみてはいかがでしょうか?


ar-ray.hatenablog.com

実は2023年末にティア某のロボットタクシーのチケットが当たり、乗車体験をしてきました。

人が手を触れない自動運転が日本で見られて満足でした。

さまざまな課題を解決して社会実装される日が来てほしいですね。


ar-ray.hatenablog.com

CoRE-1(自動)に出ます。助けてください!🙏 - えいあーるれいの技術日記 の本番です。

私の力不足もあり、なかなかいいパフォーマンスを発揮できず直前まで調整をしていましたが、久々の限界開発ができて楽しかったです🙃

来年までにソフトウェアやデモ・広報などに力を入れて、注目されるようなチームにしたい!と強く思いました。

今年は集めたパーツでつくチャレ…を考えていましたが、しばらくはCoRE-1の方優先したい!フルコミッターが複数人求められる🙏

部品は全部自分が出せます。


今年度の方針

今年度は昨年からさらに踏み込んでマイコンLinuxの低レイヤ部分に注力したい!と考えています。

必ず強くなって見せます🙇


さいごに

そもそも私のこれからに興味がある人っているのでしょうか?

いてもいなくても一切理解できない、ひねくれ系よわよわエンジニア🐣ですがこれからもご期待ください。


CoRE-1 2024(2日目)

1日目:CoRE-1 2024(1日目) - えいあーるれいの技術日記 の続きです。

2日目は、CoRE-1 2024の準決勝・決勝でした。


我が自動機チーム「StrayedCats」は、自動機チームとして敵味方問わずボールを射出するチームです。

準決勝は10時からでしたが、まだ万全とはいえない状態であったので、会場着から準決勝開始までの1時間を使って最終調整を続けていました。

午前中の調整

いざ出陣…😇

これで何とかなるだろう!と思っていたのですが、そんなことはありませんでした😇


まずはボール詰まりです。

事前に装填された5発以上飛ばないという事象が多発し、これの対策を毎試合ごとに行っていました。

これについては給弾機構がうまく動かせていなかったことに原因があったのですが、大会前にしっかりと確認しなければならなかった項目だったので、大会当日の対策ができていないことが早速出てきました…

自動機調整の様子

色々ボール数や位置を調整して決勝では一応20発くらいは撃てるようになりました。

ただ、ロボットの動きに反応しているとはいえ、全く見当違いな場所に撃つこともしばしばありました。

つまり「何か考えているようで何も考えていないロボット」です。

ある意味チーム名通りのロボットかもしれませんが、思い描いたロボットの動きとは程遠い結果となってしまいました。

チームメンバーおよび出場者に非常に申し訳ないことをしたなと思います。すみません…🙇


一方大会では昨年からパワーアップした手動機が活躍していたそうです。

先に3勝した方が優勝となる決勝戦では、青陣営が2勝してこのまま優勝…と思われたところ赤陣営がその後2勝するという熱い展開になったそうです。

私はずっと自動機の挙動を見ていたのでその現場を満足に見れませんでしたが、この試合を見て参加したい!と思ってくれる人が増えると嬉しいですね。


来年こそは

自動機チームは、チーム結成から制作・大会本番まで多くの異例・トラブルに巻き込まれ(巻き込み)ながらも一応全試合をこなすことができました。

大会運営の関係者や頼もしいチームメンバーのおかげだと思います。

ありがとうございました。


個人的には、期待される動きを全くできずに大会を終えてしまったことに悔いが残っているので、来年再チャレンジします。

大会中は頭を抱える機会が非常に多い情けないリーダーでしたが、5年前のロボコンのような限界開発を行えた喜びでモチベーションが爆上がり中です。

頭を抱えるチームリーダー

しかしながら、メンバーがいなければチームを存続させることは難しいのも現実です。

来年の今頃は受験・就職活動で忙しい人もいるので、メンバーが減ってしまいます。

選手としてのメンバーをまた募集したいと思っているので、お声がけいただけるととても喜びます。

ちなみに、来年の大会ではもっとアクセスの良い場所で行われるそうなので、続報に期待ですね。

core.scramble-robot.org


未来に繋げた…かな?

以前の記事でも説明した通り、この大会ではハードウェアに関して一切開発を行わない自動機チームがあります。

ロボコンなのにハードウェア開発禁止!?とロボコン経験者は思われるかもしれませんが、これはむしろ参加のハードルを下げてロボコンの裾野を広げられる重要な役割を果たすと考えています。

実際、今回の大会で自動機に興味を持ってくださった方もいたので、(1チームだけの参加でしたが)私が飛び込み参加した意義は大きいのかなと感じています。

…これが評価されるのは早くて1年後、もっとかかるかもしれませんが

来年に向けて、シミュレータや開発環境の改造に取り掛かりたいなと考えています。


また、大会期間中rosbagをかなり収集しました。2台合わせて600GB程度あり、RealSenseの点群を生かした画像処理には十分な量だと思います。

そもそも使えるデータなのかや取扱いは決まっていませんが、開発を支えるツールやデータが揃ってくると参加しやすいのかなと思います。


しばらくはまた別の書類タスクが発生するので、進捗は鈍くなりますがこれからも頑張ります。

ご期待ください!


交流会

大会翌日は交流会でした。

大会後すぐ撤収するチームが多かったので、ロボットは少なかったですが、機構の解説などがあり興味深いものばかりでした🤤

高専生チームのロボット。連射がすごい

CoRE-1用に作成されたロボットアーム

以上、CoRE-1 2024の報告でした。また来年、京都で会いましょう👋

CoRE-1 2024(1日目)

(前回の記事:CoRE-1の近況報告 - えいあーるれいの技術日記

みなさん、おはようございます😀

昨日はCoRE-1 2024の1日目でした。雨天&春とは思えないほどの寒さでしたが、会場内では、非常に熱い戦いが繰り広げられていました。

core.scramble-robot.org

CoRE-1では、集まった20チームの中から総大将を決める「総大将決定戦」と、その総大将を中心として結成された計4チームで優勝を目指す「準決勝・決勝」があります。

1日目は、総大将決定戦が行われ、優秀な成績を残した4チームが出揃った状態になります。

そして2日目は、ついに我々自動機チームが出場します。お楽しみに!

大会の様子は #CoREjp(X)YouTubeライブ配信でチェックしてください。


前日から超トラブル続き…

…と調子の良いことを言っていますが、実際はかなりヤバかったり。初日からトラブル&調整続きでした。

運送時の揺れから、PCのクーラーが外れていたり、ディスプレイ出力がうまくいっていなかったり、提供されたハードウェアの個体差で同じプログラムで全く異なる動きをしていたり…

デバック作業が難航しまくっており、これが𝙏𝙝𝙚 𝘾𝙝𝙖𝙢𝙥𝙞𝙤𝙣𝙨𝙝𝙞𝙥 𝙤𝙛 𝙍𝙤𝙗𝙤𝙩𝙞𝙘𝙨 𝙀𝙣𝙜𝙞𝙣𝙚𝙚𝙧𝙨かーと頭を抱えながら作業していました😇

会場でお待ちしています!

とはいえ、ギリギリの調整を経て、なんとか動く状態には持っていけています。

同盟チームの優勝の行方も見守りつつ、ぜひ自動機の動きにもご注目ください!

ステッカー(会場で配布しています)