robocup-zunda’s blog

高崎高校物理部の部活です。

ガラケーからiPhoneへ連絡先を移行したときのトラブル(VCF、Vcard、Variant call format) 連絡先が足りない、数が合わない

久しぶりです。参禅町です。今回は、2026年3月31日にFOMAが終了するのに備えて私の母の携帯の連絡先をiPhoneへ移動したときのざっくりとした手順とその際発生したトラブルについて書いていきます。

手順

ここの手順はざっくりと書きますので、他のブログ等を読んでやってみることをお勧めします。
ガラケーからMicroSDに連絡先をコピーする。
②パソコンにMicroSDをさし、MicroSDの中から、~.VCF(例:PIM00020.VCF)というファイルを探す。更新日時が今日であるかも確認。
③パソコンからVCFファイルをiPhoneへ送る
※私の場合はMacで読み込んだので、AirDropで.VCFファイルをiPhoneへ送信しました。 具体的な方法として他には、クラウドストレージにファイルを置いてPhone側から読み込む、メールでファイルをiPhoneへ送るなどがあります。他の手順でやっているブログのリンクをいくつかおいておきます。
[参考記事]

iphone.f-tools.net

87diary.com

トラブル発生

ガラケーでは111件と表示された連絡先がiPhoneで読み込むと58件としか表示されていません。

解決策

VCFファイルは拡張子を.txtから.VCFに変えた ただのテキストファイルなので、テキストエディタ(メモ帳やVScodeなど)で開いてみると上から順番に読み込まれており、ちょうど59番目から下の連絡先が全て読み込まれていませんでした。「BEGIN:VCARD」と「END:VCARD」で挟まれた部分で1つの連絡先です。他の連絡先と比較してみるとその59番目と続いた60番目の連絡先だけ「X-DCM-NOTE」という項目に文字が書かれていました。試しにそこの部分を消して読み込んでみると無事に全ての連絡先が読み込まれました。あと、日本語に限って文字化けが起こっている場合は十中八九文字コードが原因なので、Shift-JISで開きなおして保存するといいと思います。
[参考記事]

qiita.com

win10labo.info

正常に読み込まれた連絡先の例。名前や番号は適当に置き換えてあります。

BEGIN:VCARD
VERSION:2.1
N;CHARSET=SHIFT_JIS:山田 太郎;;;;
SOUND;X-IRMC-N;CHARSET=SHIFT_JIS:ヤマダ タロウ;;;;
TEL;VOICE:090xxxxyyyy
TEL:
TEL:
TEL:
EMAIL;INTERNET:taro-hogehoge@hoge.com
EMAIL:
EMAIL:
ADR:
NOTE:
BDAY:
PHOTO:
X-NO:1
X-CLASS:PUBLIC
X-GNO:1
X-GN:
X-REDUCTION:
X-DCM-HMN-MODE:
X-DCM-DATALINKID:
X-DCM-ADR:
X-DCM-URL:
X-DCM-NOTE:
END:VCARD

トラブルの原因となった連絡先の例。この場合は、X-DCM-NOTE;CHARSET=SHIFT_JIS;ENCODING=QUOTED-PRINTABLE:=E7=B8=BA=E8=96=99=EF=BD=93=E7=B8=BA=EF=BD=AA=E8=AB=A2=E6=BA=98=C2=A7= =E7=B8=BA=EF=BD=A7=E9=A8=BE=EF=BD=A3=E9=82=A8=EF=BD=A1=E8=9C=88=E5=8C=BB?= =E8=AB=A0??=EF=BD=B1=E7=B8=BA=EF=BD=AE=E7=B9=9D=EF=BD=A1=E7=B9=9D=EF=BD= =A2=E8=AD=96=EF=BD=B8=E7=B8=BA=E9=98=AA=E2=86=91=E7=B8=BA=EF=BD=A9=E7=B8= =BA=E6=A2=A7=E5=B6=8C=E7=B8=BA=E4=B9=9D=EF=BD=8C=E7=B8=BA=EF=BD=A6=E7=B8= =BA?=E2=88=AA=E7=B8=BA=E5=8A=B1=E2=97=86=E7=B8=B2 =E8=AC=A0=E8=9D=89=EF=BD=BE=E5=B8=9B?:i???=EF=BD=B3?=E6=99=A2=EF=BD=BE= =E6=90=BE=EF=BD=BE=E6=BB=82=EF=BD=BD=EF=BD=B0?=EF=BD=BC? http://itp.ne.jp/の部分を削除します。

BEGIN:VCARD
VERSION:2.1
N;CHARSET=SHIFT_JIS:山田 太郎;;;;
SOUND;X-IRMC-N;CHARSET=SHIFT_JIS:ヤマダ タロウ;;;;
TEL;VOICE:090xxxxxxxx
TEL:
TEL:
TEL:
EMAIL;INTERNET:taro-hogehoge@hoge.com
EMAIL:
EMAIL:
ADR:
NOTE:
BDAY:
PHOTO:
X-NO:1
X-CLASS:PUBLIC
X-GNO:1
X-GN:
X-REDUCTION:
X-DCM-HMN-MODE:
X-DCM-DATALINKID:
X-DCM-ADR;CHARSET=SHIFT_JIS:xxx-xxxx;ほげ県ほげ市ほげほげ町xxx-x
X-DCM-URL:http://nttbj.itp.ne.jp/xxxxxxxxxx/
X-DCM-NOTE;CHARSET=SHIFT_JIS;ENCODING=QUOTED-PRINTABLE:=E7=B8=BA=E8=96=99=EF=BD=93=E7=B8=BA=EF=BD=AA=E8=AB=A2=E6=BA=98=C2=A7=
=E7=B8=BA=EF=BD=A7=E9=A8=BE=EF=BD=A3=E9=82=A8=EF=BD=A1=E8=9C=88=E5=8C=BB?=
=E8=AB=A0??=EF=BD=B1=E7=B8=BA=EF=BD=AE=E7=B9=9D=EF=BD=A1=E7=B9=9D=EF=BD=
=A2=E8=AD=96=EF=BD=B8=E7=B8=BA=E9=98=AA=E2=86=91=E7=B8=BA=EF=BD=A9=E7=B8=
=BA=E6=A2=A7=E5=B6=8C=E7=B8=BA=E4=B9=9D=EF=BD=8C=E7=B8=BA=EF=BD=A6=E7=B8=
=BA?=E2=88=AA=E7=B8=BA=E5=8A=B1=E2=97=86=E7=B8=B2
=E8=AC=A0=E8=9D=89=EF=BD=BE=E5=B8=9B?:i???=EF=BD=B3?=E6=99=A2=EF=BD=BE=
=E6=90=BE=EF=BD=BE=E6=BB=82=EF=BD=BD=EF=BD=B0?=EF=BD=BC?
http://itp.ne.jp/
END:VCARD

原因

調べてみると、「X-DCM-hoge」みたいな項目はVCFの公式のものではなく、docomo側が独自に追加した項目(拡張機能)のようでした。ガラケー側で連絡先を見てみると、その59番目と60番目だけ画像のようにメモ(Note)が記入されていました。つまり、拡張機能である「X-DCM-NOTE」に内容が書き込まれていると、iPhone側がその拡張機能に対応していないので読み込めずに、その後ろから全部を読み飛ばしてしまい、連絡先が正常に読み込まれなかったのでした。

確認してみると、エラーの原因となっていた連絡先だけ、メモのマークがある

.VCFファイルとは?

ja.wikipedia.org

研究発表の世界大会(ISEF2023)にロボ部門で出場した感想

こんにちは。ふわKです。

先日、高校生の研究発表の世界大会である、「国際学生科学技術フェア(ISEF2023)」にRobotics and Intelligent Machines部門で出場してみて、世界のロボット研究のレベルの高さに驚かされました。

今回は、その感想を書かせていただきます。

ISEFとは?

ISEFの知名度は結構低いと思うので、先にその説明だけ簡単にさせていただきます。

世界約70の国と地域から1500人以上の学生が参加する世界最大の科学コンテストであり、「科学のオリンピック」とも呼ばれる。

国際学生科学技術フェア - Wikipedia

ということで、世界で一番大きい高校生用の研究発表会です。数学オリンピックとかロボコンとかそういうものの研究発表版です。

部門が大量にあり、ロボットやアプリ、数学や物理や生物学、社会科学までほぼ全分野を網羅しています。賞に関しても7.5万ドル(日本円で1000万円)の賞金がでるものもあったりと、かなり豪華です。合計賞金は6億円近いとか...

いろんな企業や団体・大学がスポンサーになったりブース出展したりしていて、MicrosoftやCIA、MITなどの名前もありました。

出場者はその国や州で予選を勝ち抜いた人たちで、日本では「JSEC(高校生・高校生科学技術チャレンジ)」と「日本学生科学賞」で上位入賞した人が代表として選ばれます。

 

自分の発表した研究

僕が発表したのは、「AIを搭載した白杖を作る」という研究です。(個人研究)

自分で撮った白杖視点のデータ約9000枚を学習しており、駅ホーム内の線路や、目の前の横断歩道といった危険状況を検知、音声通知することができるというものです。従来研究では白杖視点という条件において、これらのモノの検知を達成できていませんでした。(AIのデータセットは基本車目線or人目線で集められたもので、白杖視点ではないため)

また、YOLOを使った歩行者や自転車やクルマの検知機能や、9軸センサーと組み合わせた横断歩道横断中のナビゲート機能(右に外れそうになったら左に戻るよう通知したり、横断が終了すれば渡り切ると通知したりなど)も実装しています。

ハードウエアは3DCADで設計して3Dプリンターで印刷しており、市販の白杖にドッキングできるようなデバイスとしています。

jr.mitou.org

ISEF出場の流れ

先述の通り、ISEFに出場するには「JSEC(高校生・高専生科学技術チャレンジ)」か「日本学生科学賞」で上位入賞する必要があります。僕は、読売新聞さん主催の「日本学生科学賞」で内閣総理大臣賞(最高賞)を取って、ISEFの日本代表に選んでいただきました。

そのあとISEF本番まで放置というわけではなく、読売新聞さんが研究や発表のブラッシュアップにご協力くださるメンターの先生を付けてくれますし、研修も何度か開いてくれます。

そのメンターが本当にすごい人で、その分野の第一人者という人を付けてくれます。僕の場合はロボット工学の有名な教授で、「ロボカップ」というロボットの世界大会(ジュニアの方にうちの部活も出ています)を創設した方がメンターになってくださりました。

サポートはかなり手厚く、かなり頻繁にオンラインミーティングなどを開いて、資料や質疑応答まで細かく見ていただけました。本当に高名な教授の方が一人の高校生にここまでやってくださるのはめちゃくちゃ有難かったです。

 

ISEF本番と感想

今回のISEFはアメリカのテキサス州ダラスで開催されました。70か国近くから1000人以上のファイナリストが出場していて、日程が5日ほどありましたがかなり盛り上がっていたと思います。

やはり、イベントの盛り上がり方がかなり印象的でした。日本だとけっこう、研究発表会というと固いイメージですが、向こうは本当にイベントって感じでした。DJがいたり、偉い人(ノーベル賞受賞者など)の話に普通に掛け声的なものを言ったり...。陽気で楽し気なイメージが常にあったと思います。

 

審査日はISEFのオープニングセレモニーから3日目で、8:30~16:15までみっちりでした。何人かのジャッジ(審査員)が来て、ポスターの前で説明したり、質疑応答をしたりといった感じです。審査時間がジャッジ1人当たり15分間しかないので、すらすらと説明できない英語弱者としてはかなり大変でした。そこらへんはどれだけ事前に質問を想定して応答を作っているかというのが問われると思います。

ロボット部門で問われることはやはり、「この研究・開発物の新しいところは何処か」「どこが自分で独自開発したもので、どこはソースコードを参考にしたものなのか」といったところです。僕はポスターや資料でハードウエアをどこまで自作したのかを上手く伝えられていなかったので、かなり突っ込まれました。(筐体は自作、マイコンやコンピュータは自作じゃない、など)

 

他国の代表の発表を見ていて思ったのは、「英語ペラペラの人多いなぁ~」ということです。もちろん発音の癖とかが独特でネイティブではないなとなる人も多いですが、でもしっかりと英語を聞き取ってすらすら話す能力は総じてめちゃくちゃ高いです。特に専門用語も飛び交う中での聞き取りはかなり難しいので、それができる人たちは英語での発表を何度も経験済みなんだと思います。

また、ロボット部門としての研究の多さにも驚きました。ロボ・知能機械分野だけで100近い研究がありました。「マテリアル工学」「環境工学」「埋め込みシステム」「ソフトウエア」といった工学系の別分野も存在し、そちらと分化しているにもかかわらず、です。

日本ではロボットの研究(サッカーロボとかではなく研究としてのデバイス開発)をしている高校生はたいへん少ないので、かなりの衝撃を受けました。

レベルとしても非常に高く、日本ではユーザーテストまで行っているだけでも学生としてはかなり上澄みの研究ですが、世界ではそこまで行ってアタリマエ、という感じ。

わかってはいたことですが、世界の高校生の工学研究のレベルはめちゃくちゃ高い、というのが今回出場した正直な感想です。(その国の最上位の研究しか参加できないのでレベルが高いのは当たり前ですが)

 

結果と振り返り

結果としては、今回のISEFで受賞することはできませんでした。世界のロボット研究・発表のレベルの高さを思い知らされる結果となりました。

もちろん僕は、研究のレベルや面白さでほかの研究に劣っていたと考えているわけではないのですが、それを上手く伝えることができなかった、またその面白さに強い説得力を持たせるためにはまだ研究の進みが足りていなかったと感じています。

発表と質疑応答に関しては、ハードウエアやシステムにおいて自分で作ったところと、ソースコードなどを参考にしたところをちゃんと明記するような追加の資料を作っておくべきだったかもしれません。質問されたとき「これは自分で作った、これらはここに書いてあるものを参考にした」とササっと言えれば、この研究の本当に新しいところやこれからの発展といった話をもっと踏み込んでできたような気がします。

研究自体については、もっと研究を進めないとISEFの最上位の賞の受賞は難しいなと思いました。「視覚障害者の方のモビリティ向上」の為にデバイスを作りました、という所で研究が終わってしまうと、世界で勝つのは難しいのかもしれません。僕としてはこの研究はそれで終わるモノとは思っておらず、「地域全体の危険の早期発見・迅速なインフラ整備」であったり「ユーザーの歩行によるフィードバックからその地域の危険に関するデータセットを作成、白杖バイス以外にも活かしていく」というようなビジョンを描いています。

(実際にそういうビジネスプランを発表して、大学教授や起業家の参加するビジコンで最優秀賞を取ったこともあります。)

時間的な制約が厳しいですが、その中でこれらのビジョンを英語で伝えきることができたら、もしくはこれが将来のビジョンではなく、本当に実装する手前になるほどにまで研究をすすめられたなら、賞も狙えたと考えています。

もちろん全然簡単なことではないので、正直、日本の高校生でそれができたら凄すぎると思います。それまでに世界のロボット研究のレベルは高く、そこまでしないと勝てないほどの高い舞台なんだなと痛感しました。

日本では高校生のロボット研究に対する支援は、機材や資金, 技術といったあらゆる面で世界と比べればまだ足りていないと感じていますが、その中でも色んな方からの支援をいただいて、ここまで研究を進めさせていただいたのはとても感謝していますし、良い経験になりました。

もしロボットや工学の研究をしてみたいと思っている中高生がいたら、絶対にやってみた方が良いとオススメ出来ます。(開発の援助が必要なら、自分も参加した「未踏ジュニア」というものに応募するのがおすすめです。)

 

まとめ

今回のISEFでは受賞はなりませんでしたが、世界にはロボット研究をしている高校生がこんなにもいると知れて嬉しかったですし、レベルの高さを知れたことは良い励みになり、これからも研究を続けていこうというモチベーションに繋がりました。

これからも研究を続けていくので、何らかの形で皆さんに進捗を伝えられることを願っています!!

RCJJ2023の反省とロボット紹介

結果

 先日、名古屋にてロボカップジュニアジャパンオープン2023名古屋大会が開催され無事終了しました。我々は、ワールドリーグサッカーライトウェイト部門に出場し、全68チーム中10位という結果となりました。目指していた1位に届かず悔いの残る結果となりました。以下に簡単な対戦結果を載せておきます。

対戦結果

第一試合:勝利 3 - 2 vs 三田学園物理部チーム「Nova」

第二試合:勝利 3 - 1 vs 近高ブルーストライカーズ

第三試合:敗北 3 - 5 vs Reckless

第四試合:勝利 5 - 3 vs HINOWE.KSEC

第五試合:勝利 9 - 2 vs 極無

第六試合:勝利 8 - 1 vs I WAS TOIN

第七試合:敗北 2 - 3 vs Kollagen

※第八試合、第九試合は中止

 

個人的には、最後の試合に負けてしまったのが非常に残念でした。Kollagenさんはキッカー、ドリブラーを搭載して非常に魅力的なロボットでした。キーパーが強くなかなか得点までもっていけなかったことが非常に印象に残っています。実力負けです。

 また、第三試合では、キーパーが突然動かなくなる事態に遭い、負けてしまいました。これがなければ、5位ぐらいまでは行けた気がします。壊れた原因はどんなに調べてもわかりませんでした。マイコンを取り替えたら動いたのでマイコン周りが怪しいです。第三試合と序盤だったこともあり、ここでの敗退はかなり結果に響いたと思います。

嬉しかったこと

 大会中に1つ嬉しかったことがあります。それは、車検の全項目で一発合格をいただくことができたことです。去年のけいはんな大会では、車検でけちょんけちょんにされたので、今年は絶対に車検に引っかからない機体を作ってやると思っていたので、目標を達成できて非常に嬉しかったです。

 車検をスムーズに通過できたおかげで、大会1日目はたっぷりと調整時間をとることができました。群馬ブロックまでのコートは最新ルールに対応しておらず、初めてのコートだったので調整をしっかりできたのは大きかったです。

 

反省点

 反省点なんて書こうと思えばいくらでもかけるのですが、それではブログが書き終わらないので抜粋して書きます。

1つ目:ハードウェアをいじれる人数を増やす

 私たちのチームでは、ロボットがハードウェア的に故障した際に直せる人員が僕一人でした。そのため、キーパーが故障した際に僕が直す作業に付きっ切りになってしまい、なかなかフォワードのメンテナンスなどができませんでした。

2つ目:安定した機体を作る

 今回の機体の目標は、先ほども述べた「絶対に車検に引っかからない機体」と、「壊れない安定した機体」の2つでした。前者はクリアしましたが、後者は大会中にキーパーが故障したのでクリアならずです。ただ、フォーワードに関しては大会前からずっと安定して動いてくれていたので感謝です。メインマイコンにはRasoberry Pi Picoを採用しました。これは安いわりに性能もいいのでおすすめなのですが、僕が使っていて気が付いたことがあって、長時間使っていると3.3Vの出力がおかしくなる個体や一部のI/OピンとGNDとの間が数Ωにまでなってしまう個体が多発しました。安いので壊れても経済的なダメージは少ないですが、時間の限られている大会で起こってしまうと非常に困ります。なので、そういったことが起こらないよう様々な検討を重ねる必要があると感じました。

 

ロボット紹介

 今年度、製作したロボットを紹介したいと思います。3Dデータやプログラムも公開しているので是非、ご活用ください。

構成

 主なスペックは以下の通りです。

 

機能・役割 型番 個数
メインマイコン RP2040 1
モーター制御マイコン RP2040 1
モーター Maxon RE16 9V 4
ギアボックス GP16 19:1 4
モータードライバー Pololu G2 18v17 4
ラインセンサ NJL7502L 32(円形)
LED WS2812B 32(円形)
ジャイロセンサ MPU-6050 1
モニター SSD1306 1
ボールセンサーマイコン ATSAMD21 1
赤外線センサー TSSP58038 16(円形)
バッテリー Kypom 11.1V 1000mAh 1
カメラ(1台目) OpenMV H7 R2 1
カメラ(2台目) M5Stack UnitV 1

 今回は無難な構成にしました。Maxonモーターで金がかかりすぎたのでマイコンなどは安いものを使いました。

ラインセンサ & マイコン

  

 これが、ラインセンサーおよびメイン基板です。表面にラインセンサー32個が円形に配置されています。光源にはNeopixelを採用しています。信号線1本でプログラムから自在に色や輝度を変えることができるので非常に便利です。(上の写真の基板では、部品不足のためNeopixelが16個に削減されています。)2つのアナログマルチプレクサ(CD74HC4067)(写真下 左上・右下)を通してラインセンサーの値をアナログピンで監視しています。

 エンジェルリングは、十字のラインセンサーに比べて簡単にラインの向きを360°把握することができるので使い勝手がいいです。しかし、ラインの角の直角に曲がったところなどでは十字に比べて処理が面倒というデメリットがあります。

 裏面にはメインマイコン等が実装されています。メインマイコンとモーター制御マイコンには、それぞれ、Raspberry Pi PicoとXiao RP2040 が採用されています。どちらとも安価で、デュアルコアなので非常にお勧めです。メインマイコンでは、各マイコンとの通信やライン・ジャイロの処理、戦略の決定、モーターマイコンへの指示を担っています。モーターマイコンでは、メインマイコンで受けた指令をもとに各モータードライバーを制御します。

 マイコンやセンサー用の電源(3.3V 5V)は当初、両方とも三端子レギュレータで生成していましたが、5Vを生成するレギュレータが動作途中に熱でダウンしてしまう不具合に見舞われてしまったので後付けで、村田製作所のDCDCコンバーターを使用しました。

 ジャイロセンサーには、Amazonで買った安物のMPU-6050を使用しています。地磁気を使用していないので、モーターの磁気に作用されません。MPU-6050に搭載されているDMPを使うことで、高度な計算を自分でせずに済みます。キャリブレーションすれば試合中もほとんどドリフトすることがないので、最高です。

 

足回り

 モーターには、Maxon RE16 9V を採用しました。当初、ルールが9Vに制限されるらしかったので9V版を買いました。12V版を買えばよかったと思っています。Maxonモーターを初めて使いましたが、軽くて、高回転、高トルクが両立で来ていて非常に良かったです。コアレスモーターなので適切な制御をしてあげると非常に応答性がよく機敏な動きが可能になりました。ただし、価格の面がネックですね。私たちはSSH(スーパーサイエンススクール)の予算で購入できたのでありがたい限りです。

 ギアボックスには、GP16 19:1を使いました。これには特になんとも思っていません。

 モータードライバーには、Pololu G2 18v17 を採用しました。LAP駆動に対応しているので、Maxonモーターとの相性はいいと思います。ただし、これも価格が高いので微妙です。

 これがオムニホイールです。3Dプリンターで自作しました。サイドホイールにはシリコンチューブとスペーサー、針金で製作しました。ロボ同士の衝突の際にオムニが破損しないかどうか心配だったのですが、壊れることもなかったのでよかったです。でも、3Dプリンター製のオムニは壊れるリスクがあるのでお勧めできません。

 

電源回路

 これが電源回路です。Li-Poの電源の最も近いところにヒューズ(15A)をかませてます。その後、Pch Mosfetでロードスイッチを構成しています。その後、各基板へと電源を分配しています。また、XL6009を使ったキッカー用のDCDCコンバーターも搭載しています。40Vまで昇圧可能ですが、すぐに壊れてしまったので使うことはありませんでした。この回路を作るにあたって以下のサイトを参考にしました。

robotry.hatenablog.com

ボールセンサー & カメラ

 これがボールセンサーです。円形に赤外線センサーが16個並べてあり、ローパスフィルターとアナログマルチプレクサを通して、ATSAMD21でアナログで読んでいます。隻眼線センサーを3Dプリンターで囲ってあげることで、高い精度でボールの角度を算出できます。ただし、ボールとの距離は正確に算出することはできません。

 また、この写真の中央に見えるのがM5StackのUnitVです。1台目のロボットでは、ここがOpenMVに代わっています。予算がなかったのでOpenMVを2つ買うことはできませんでした。アロンアルファのせいでアクリルパイプの一部が曇ってしまったのが痛恨のミスでした。

フレーム

 これが、フレームです。このフレームが我々のロボットの中で最も特徴的なところです。多くのチームがアルミニウムの板やCFRPを使っていますが、我々は、カーボン繊維が配合された樹脂を3Dプリンターで印刷して土台を使っています。かたいだけでなく、どんなに曲げても折れることもないので安心感MAXです。Flashforgeなどの一部機種で印刷できるカーボン樹脂ではなく、Markforgedという業務用のガチプリンターで専用樹脂を使っているのでめちゃくちゃ頑丈に印刷できます。私たちのチームでは、地元にこの3Dプリンターを所有している企業にお願いをして印刷をさせてもらっています。質感も良く印刷精度も高いので可能であればぜひ使ってみてください。

データ公開

 最後に、このロボットの設計データやプログラムを公開しておきます。ぜひ参考に指定ください。

github.com

JLCPCBについて

 最後に、JLCPCBの紹介をしたいと思います。私たちのチームで使用した基板はすべてJLCPCBで製作をお願いしています。JLCPCBでは様々なサイズ、厚み、色の基板を格安で製造することができます。出来上がったものの仕上がりも精度が高く非常にお勧めできるサービスです。ほかにも、3Dプリントサービスや部品実装サービスも行ってくれています。JLCPCBでは新規登録で$54のクーポンを配布しているので、使ったことがない人はぜひ一度使ってみてください!いかに、部品実装の例も載せておきます。

jlcpcb.com

 

 

OpenCVのインストール中に遭遇したエラー(CMake Error: Problem with archive_write_finish_entry()、CMake Error: Problem extracting tar)

こんにちは、参禅町です。今日は、wslでC++のためのOpenCVのインストール中にエラーに遭遇したのでそれについて書いていきます。

環境

Windows 11 Pro 22H2
WSL2
Ubuntu 22.04.2 LTS

エラー内容

qiita.com

こちらの記事を参考にWSLでcmakeコマンド(cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local -DWITH_TBB=ON -DWITH_OPENGL=ON -DOPENCV_EXTRA_MODULES_PATH=/mnt/l/git/opencv_contrib/modules -DOPENCV_GENERATE_PKGCONFIG=ON ..)を実行したところ、以下のようなエラーが発生しました。

CMake Error: Problem with archive_write_finish_entry(): Can't restore time
CMake Error: Problem extracting tar: /mnt/l/git/opencv/.cache/ade/fa4b3e25167319cb0fa9432ef8281945-v0.1.2a.zip
CMake Error at cmake/OpenCVDownload.cmake:286 (message):
  ADE: Unpack failed: 1
Call Stack (most recent call first):
  modules/gapi/cmake/DownloadADE.cmake:5 (ocv_download)
  modules/gapi/cmake/init.cmake:20 (include)
  cmake/OpenCVModule.cmake:298 (include)
  cmake/OpenCVModule.cmake:361 (_add_modules_1)
  cmake/OpenCVModule.cmake:408 (ocv_glob_modules)
  CMakeLists.txt:956 (ocv_register_modules)

実際の画面

原因

いろいろ検索した結果、以下のIssueが出てきました。この方の場合は、OpenCVリポジトリがあるストレージがフォーマットがexFATであることが原因だったそうです。

github.com

私は今回の場合、外付けssdリポジトリをクローンしてインストールを行っていました。そこで、ssdのフォーマットを確認したところ、

ストレージのプロパティ
と、フォーマットがexFATになっていました。

解決策

原因がストレージのフォーマットなので、exFAT以外でフォーマットされているストレージにOpenCVのファイルを移動してインストールを行えばよいです。フォルダが移動されるので、フォルダ ごとコピーした場合は、cmakeコマンドを実行する前にCMakeCache.txtを実行するのを忘れないように気を付けてください。

Raspberry PiにTensorflowが入らない時の入れ方

こんにちは、参禅町です。今回は、Raspberry Piにpipコマンドでtensorflowが入らなかった時に行った入れ方について話したいと思います。

原因と解決法

PyPIにラズパイ用のtensorflowが登録されていないことが原因であるため、対応するensorflowをビルドするか、既にビルドされたものを使用すればインストールできます。今回の場合は、以下のリンクにある既にビルドされたもの(whlファイル)をダウンロードしてインストールします。

github.com

環境

機種: Raspberry Pi 3 model B+

OS: Debian GNU/Linux 11 (bullseye)

Python: 3.9.2

pip: 20.3.4 from /usr/lib/python3/dist-packages/pip (python 3.9)

手順

Raspberry Piコマンドライン上で完結する手順を紹介します。

まず今回の環境の場合は、download_tensorflow-2.9.0-cp39-none-linux_aarch64.shに書かれている

curl -L https://github.com/PINTO0309/Tensorflow-bin/releases/download/v2.9.0/tensorflow-2.9.0-cp39-none-linux_aarch64.whl -o tensorflow-2.9.0-cp39-none-linux_aarch64.whl

を実行します。ファイル名のcp**の部分がPythonのバージョンを表しているので使用している環境のバージョンにあったものを使用してください。(バージョンは python -V もしくは python3 -V で確認可能)今回の場合は3.9.2だったので、cp39となっているものを使用しました。
そして、ダウンロードされたwhlファイルを使用して以下のようにインストールを行なってください。

sudo pip install tensorflow-2.9.0-cp39-none-linux_aarch64.whl

最終的に、

Successfully installed astunparse-1.6.3 flatbuffers-1.12 gast-0.4.0 google-pasta-0.2.0 h5py-3.7.0 keras-2.9.0 keras-preprocessing-1.1.2 libclang-14.0.1 opt-einsum-3.3.0 tensorflow-2.9.0 tensorflow-estimator-2.9.0 tensorflow-io-gcs-filesystem-0.26.0 termcolor-1.1.0 wrapt-1.14.1

といった表示が出ればインストール完了です。

動作確認

Pythonで次のように実行し、2.9.0のようにバージョンが出力されれば正常にインストールできています。

#TensorFlow と tf.keras のインボート
import tensorflow as tf from tensorflow import keras
print(tf.__version__)

実際のログ

pi@raspi:~ $ python -V
Python 3.9.2
pi@raspi:~ $ curl -L https://github.com/PINTO0309/Tensorflow-bin/releases/download/v2.9.0/tensorflow-2.9.0-cp39-none-linux_aarch64.whl -o tensorflow-2.9.0-cp39-none-linux_aarch64.whl
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100  287M  100  287M    0     0  2618k      0  0:01:52  0:01:52 --:--:-- 2996k
pi@raspi:~ $ ls
cap_folder   main.py           momo-2022.2.0_raspberry-pi-os_armv8         runs                 tensorflow-2.9.0-cp39-none-linux_aarch64.whl  yolov5s.pt
cap_test.py  main.py.old       momo-2022.2.0_raspberry-pi-os_armv8.tar.gz  raspi-request.txt  yolov5                                        yolov7
git_folder   main__test.ipynb  now.jpg                                     target.jpg           yolov5s6.pt
pi@raspi:~ $ sudo pip install tensorflow-2.9.0-cp39-none-linux_aarch64.whl
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Processing ./tensorflow-2.9.0-cp39-none-linux_aarch64.whl
Collecting opt-einsum>=2.3.2
  Downloading https://www.piwheels.org/simple/opt-einsum/opt_einsum-3.3.0-py3-none-any.whl (65 kB)
     |████████████████████████████████| 65 kB 62 kB/s 

Collecting gast<=0.4.0,>=0.2.1
  Downloading https://www.piwheels.org/simple/gast/gast-0.4.0-py3-none-any.whl (9.9 kB)
Collecting flatbuffers<2,>=1.12
  Downloading https://www.piwheels.org/simple/flatbuffers/flatbuffers-1.12-py2.py3-none-any.whl (15 kB)
Requirement already satisfied: six>=1.12.0 in /usr/lib/python3/dist-packages (from tensorflow==2.9.0) (1.16.0)
Collecting keras<2.10.0,>=2.9.0rc0
  Downloading keras-2.9.0-py2.py3-none-any.whl (1.6 MB)
     |████████████████████████████████| 1.6 MB 14 kB/s 
Requirement already satisfied: packaging in /usr/local/lib/python3.9/dist-packages (from tensorflow==2.9.0) (21.3)
Collecting google-pasta>=0.1.1
  Downloading https://www.piwheels.org/simple/google-pasta/google_pasta-0.2.0-py3-none-any.whl (57 kB)
     |████████████████████████████████| 57 kB 78 kB/s 
Requirement already satisfied: numpy>=1.20 in /usr/local/lib/python3.9/dist-packages (from tensorflow==2.9.0) (1.23.0)
Requirement already satisfied: protobuf>=3.9.2 in /usr/local/lib/python3.9/dist-packages (from tensorflow==2.9.0) (3.19.4)
Collecting tensorflow-estimator<2.10.0,>=2.9.0rc0
  Downloading tensorflow_estimator-2.9.0-py2.py3-none-any.whl (438 kB)
     |████████████████████████████████| 438 kB 1.6 MB/s 
Collecting tensorflow-io-gcs-filesystem>=0.23.1
  Downloading tensorflow_io_gcs_filesystem-0.26.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.8 MB)
     |████████████████████████████████| 2.8 MB 55 kB/s 
Collecting wrapt>=1.11.0
  Downloading wrapt-1.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (77 kB)
     |████████████████████████████████| 77 kB 379 kB/s 
Collecting termcolor>=1.1.0
  Downloading https://www.piwheels.org/simple/termcolor/termcolor-1.1.0-py3-none-any.whl (4.8 kB)
Requirement already satisfied: typing-extensions>=3.6.6 in /usr/local/lib/python3.9/dist-packages (from tensorflow==2.9.0) (4.3.0)
Requirement already satisfied: tensorboard<2.10,>=2.9 in /usr/local/lib/python3.9/dist-packages (from tensorflow==2.9.0) (2.9.1)
Requirement already satisfied: absl-py>=1.0.0 in /usr/local/lib/python3.9/dist-packages (from tensorflow==2.9.0) (1.1.0)
Collecting keras-preprocessing>=1.1.1
  Downloading https://www.piwheels.org/simple/keras-preprocessing/Keras_Preprocessing-1.1.2-py2.py3-none-any.whl (42 kB)
     |████████████████████████████████| 42 kB 7.3 kB/s 
Collecting astunparse>=1.6.0
  Downloading https://www.piwheels.org/simple/astunparse/astunparse-1.6.3-py2.py3-none-any.whl (12 kB)
Requirement already satisfied: grpcio<2.0,>=1.24.3 in /usr/local/lib/python3.9/dist-packages (from tensorflow==2.9.0) (1.47.0)
Collecting h5py>=2.9.0
  Downloading h5py-3.7.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (8.5 MB)
     |████████████████████████████████| 8.5 MB 137 kB/s 
Collecting libclang>=13.0.0
  Downloading libclang-14.0.1-py2.py3-none-manylinux2014_aarch64.whl (12.6 MB)
     |████████████████████████████████| 12.6 MB 120 kB/s 
Requirement already satisfied: setuptools in /usr/lib/python3/dist-packages (from tensorflow==2.9.0) (52.0.0)
Requirement already satisfied: wheel<1.0,>=0.23.0 in /usr/lib/python3/dist-packages (from astunparse>=1.6.0->tensorflow==2.9.0) (0.34.2)
Requirement already satisfied: tensorboard-plugin-wit>=1.6.0 in /usr/local/lib/python3.9/dist-packages (from tensorboard<2.10,>=2.9->tensorflow==2.9.0) (1.8.1)
Requirement already satisfied: google-auth-oauthlib<0.5,>=0.4.1 in /usr/local/lib/python3.9/dist-packages (from tensorboard<2.10,>=2.9->tensorflow==2.9.0) (0.4.6)
Requirement already satisfied: markdown>=2.6.8 in /usr/local/lib/python3.9/dist-packages (from tensorboard<2.10,>=2.9->tensorflow==2.9.0) (3.3.7)
Requirement already satisfied: google-auth<3,>=1.6.3 in /usr/local/lib/python3.9/dist-packages (from tensorboard<2.10,>=2.9->tensorflow==2.9.0) (2.9.0)
Requirement already satisfied: werkzeug>=1.0.1 in /usr/local/lib/python3.9/dist-packages (from tensorboard<2.10,>=2.9->tensorflow==2.9.0) (2.1.2)
Requirement already satisfied: requests<3,>=2.21.0 in /usr/lib/python3/dist-packages (from tensorboard<2.10,>=2.9->tensorflow==2.9.0) (2.25.1)
Requirement already satisfied: tensorboard-data-server<0.7.0,>=0.6.0 in /usr/local/lib/python3.9/dist-packages (from tensorboard<2.10,>=2.9->tensorflow==2.9.0) (0.6.1)
Requirement already satisfied: cachetools<6.0,>=2.0.0 in /usr/local/lib/python3.9/dist-packages (from google-auth<3,>=1.6.3->tensorboard<2.10,>=2.9->tensorflow==2.9.0) (5.2.0)
Requirement already satisfied: pyasn1-modules>=0.2.1 in /usr/local/lib/python3.9/dist-packages (from google-auth<3,>=1.6.3->tensorboard<2.10,>=2.9->tensorflow==2.9.0) (0.2.8)
Requirement already satisfied: rsa<5,>=3.1.4 in /usr/local/lib/python3.9/dist-packages (from google-auth<3,>=1.6.3->tensorboard<2.10,>=2.9->tensorflow==2.9.0) (4.8)
Requirement already satisfied: requests-oauthlib>=0.7.0 in /usr/local/lib/python3.9/dist-packages (from google-auth-oauthlib<0.5,>=0.4.1->tensorboard<2.10,>=2.9->tensorflow==2.9.0) (1.3.1)
Requirement already satisfied: importlib-metadata>=4.4 in /usr/local/lib/python3.9/dist-packages (from markdown>=2.6.8->tensorboard<2.10,>=2.9->tensorflow==2.9.0) (4.12.0)
Requirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.9/dist-packages (from importlib-metadata>=4.4->markdown>=2.6.8->tensorboard<2.10,>=2.9->tensorflow==2.9.0) (3.8.0)
Requirement already satisfied: pyasn1<0.5.0,>=0.4.6 in /usr/local/lib/python3.9/dist-packages (from pyasn1-modules>=0.2.1->google-auth<3,>=1.6.3->tensorboard<2.10,>=2.9->tensorflow==2.9.0) (0.4.8)
Requirement already satisfied: oauthlib>=3.0.0 in /usr/local/lib/python3.9/dist-packages (from requests-oauthlib>=0.7.0->google-auth-oauthlib<0.5,>=0.4.1->tensorboard<2.10,>=2.9->tensorflow==2.9.0) (3.2.0)
Requirement already satisfied: pyparsing!=3.0.5,>=2.0.2 in /usr/local/lib/python3.9/dist-packages (from packaging->tensorflow==2.9.0) (3.0.9)
Installing collected packages: wrapt, termcolor, tensorflow-io-gcs-filesystem, tensorflow-estimator, opt-einsum, libclang, keras-preprocessing, keras, h5py, google-pasta, gast, flatbuffers, astunparse, tensorflow
  Attempting uninstall: flatbuffers
    Found existing installation: flatbuffers 20181003210633
    Uninstalling flatbuffers-20181003210633:
      Successfully uninstalled flatbuffers-20181003210633
Successfully installed astunparse-1.6.3 flatbuffers-1.12 gast-0.4.0 google-pasta-0.2.0 h5py-3.7.0 keras-2.9.0 keras-preprocessing-1.1.2 libclang-14.0.1 opt-einsum-3.3.0 tensorflow-2.9.0 tensorflow-estimator-2.9.0 tensorflow-io-gcs-filesystem-0.26.0 termcolor-1.1.0 wrapt-1.14.1

JLCPCBさんにスポンサーになってもらいました!

 新年あけましておめでとうございます。年が開けてしまったので、ブロック大会ももうすぐですね。(もう終わったところもあるのかな?)昨年のクリスマスに、JLCPCBさんで基板を無料で作っていただいたのでそのことについて話したいと思います。

 ※クリスマスに何をやっているのかというご意見はお受けできません。🙇‍♂️

 

JLCPCBのスポンサー

 JLCPCBさんでは、学生のチームの支援として基板製作の無料オファーを行っています。ロボカップジュニアに出場しているチームでもいくつかスポンサーになってもらっているチームもあります。今回、我々のチームでもスポンサーになっていただけました!

 基板製作といっても、フツーの基板だけでなく、部品実装や3Dプリントサービスも支援してくれるらしいです。

 

何を注文したか

 前回の記事でもJLCPCBで基板を作ってもらったという話を書きましたが、あの基板に致命的なミスがあったのでそれの作り直しとして今回基板を発注しました。僕たちのチームではほぼすべての回路をユニバーサル基板ではなくPCBで作っているので、今回は6種類の基板を注文しました。送料も全部タダでした。ありがとうございます!

 12月の24日の夜10時にJLCPCBにデータを入稿して注文しました。大会まであまり時間がなかったので一番早く仕上がる緑色の基板にしました。いつも黒色の基板で注文しましたが、年末年始の影響もあってかほとんど到着日に差はありませんでした。その後、なんやかんや(データの不備を指摘されたりしました)あった後、1月4日に届きました。速い!小型の基板であれば数ドルほどで作ってもらえることを考えるとJLCPCB最強です。品質にも特に不満はありません。

 

注文の仕方

 簡単に注文の仕方も紹介しておきます。新規登録でお得なクーポンももらえるので興味がある人は是非!!

jlcpcb.com

 まずは、ホームページに飛んで、「Instant Quote」を押します。

 見積もり画面に行けたらガーバーファイルをアップロードします。自分はFusion360で基板設計をしていますが、出力したzipファイルをそのままぶち込んでいます。アップロードできたら、基板の詳細を設定していきます。基本的にいじるところはありませんが、大事な点は、「製造枚数」、「基板の色」、「基板の厚み」などだと思います。基板の色は、黒がオススメです。他社と違ってJLCPCBの黒基板はつや消しになっているのでとてもかっこいいです。他社でつや消しの黒を使いたいときは別途料金が必要になることもあります。基板の厚みは僕のチームでは1.2mmで注文しています。ロボットの重量削減です。実際は、そこまで重量ギリギリじゃないのであまり影響はありませんが気休めです。詳細設定がデキたら右側に出てくる「Save Cart」を押しましょう。

 

カートに保存できたらいざ注文です。注文時にやることは、配送方法の指定と決済です。配送は、「DHL」か「OSC NEP」がおすすめです。急いでいるときやお金に余裕がある方は「DHL」を使いましょう。速く届いて安心です。「OCS NEP」は何と言っても安いです。お金に余裕が無い方はこれ一択です。

 みなさんもぜひJLCPCBを使って自作ライフを楽しんでください!

次回

 次回はJLCPCBの3Dプリントサービスを使ってみたいと考えています。お楽しみに!

ブログ始動!

みなさんこんにちは。私たちは、高崎高校物理部のロボット班です。この度、ブログを始めようという事になり、始めました。

 

チーム紹介

 群馬ブロック所属。群馬ブロックは弱いですが、僕たちは強い予定なので頭の片隅に入れておいてもらえると嬉しいです。今までの先輩のロボットでは全国に通用しないので、全部捨てて新体制でやってます。学校のSSH予算で少しずつものが潤いつつあるこの頃です。後日、今年の機体の公開などをしようと考えています。

ロボット 3Dモデル

 

メンバー自己紹介

⚪ネギ(リーダー)(HW)

 チームリーダーの「ネギ」です。よろしくです。基本的に、設計を担当しています。ソフトウェアも結構書きます。普段は、コンピュータ関連の情報を読み漁っているちょっとヤバめな人です。ちなみに、Ryzen信者です。青色陣営のひとごめんなさい。

 

⚪20世紀初頭のロシア(SW)

 20世紀初頭のロシアです。

 小さな頃から数学や物理学が好きでした。本でインスタントに得た知識を周囲の人々に我が物顔でひけらかす度に,自分は周りよりも世界の真理に近い存在なのだという優越感を得たり,自分は世界を数式で記述する権利を得た特別な人間なのだという全能感に浸ったりすることができるのが好きでした。過剰な希望に満ちた目でくぐり抜けた中学,高校の門の先にいたのは知らない人種でした。かつて人を傷つける程にまでぎらめいていた私の自尊心は,もはや形を保つことすら叶いませんでした。当然,受け入れることなどできません。ありえません。それでも,小さな頃から嫌というほど親に繰り返されてきた「井の中の蛙」は,このとき初めて現実味を帯びた姿で,確かに私の前に現れました。私の天井はこんなにもすぐそばにあったのです。それから長い間,私はいたずらに自問自答を繰り返すようになりました。自分は果たして本当に優秀な人間だったのか――当然そうだ,今――今の自分は少し卑屈になりすぎているだけで,実は結構優秀なんじゃないだろうか――いや,そんなまさか,まさかそんなはずがない,ありえない!ひとりでに行われる自尊心と劣等感の目まぐるしい競り合いに,私はただ耐えるしかありませんでした。それでも,湧き上がる疑問たちはゆっくりと,一つの点に集束していきます。私は,本当に数学が好きだったのだろうか。

 答えは簡単でした。簡単でありながら,当時の私にはこの上なく難しい答えでした。小さな頃から思い描いてきた理想の私像。捨てる勇気は持ち合わせていませんでした。知的に論理的に,冷静に世界を見渡し,然とした態度でひたすら真理を追究する。私は,それになりたかったのです。したいのではなく,なりたかったのです。

 もう一つ,気づいたことがありました。私はとうに科学を愛することを諦めようと決意していましたが,自己肯定感や自己顕示欲のほとんどを先の動乱に置いてきた私は,今の自分がこれまでに感じたことも望んだこともないほど澄んだ気分で数式の美しさを眺めることができているのに気づきました。美しければそれで良かったのです。色々な言葉で自分を誤魔化し続けて来ましたが,私が科学に惹かれた理由は,その合理性でも実用性でもなく,ただ,なんとなくきれいだから。私は,仮に科学が論理的でない学問だったとしても,今と全く変わりなく好きになっていたと思います。自分は真理を追求する資格を持っているだとか,技術の最前線に立って新たな社会を切り開いていく人材になるだとか,そんな夢想とも邪念ともつかないようなモノから解き放たれた私は,ようやく私自身と腹を割って話し合うことができました。色々絵画や音楽を楽しむのと全く同じように,数学や物理学を楽しめばいい。美術館で名画に見惚れる人々に順位など存在しない。仮にそれをつけられて,例えばお前の頭脳は人並み以下だと告げられたとしても,綺麗だというただそれだけの動機で何時間も物理学の本に没頭することのできるのなら,もう折れることはないでしょう。結局,物心ついた頃から大切に育ててきた向上心は,私にとって足枷でしかなかったのです。

 好きな作業はオムニホイール制作です。ゴムチューブを等間隔で垂直に切る技を習得しました。なんとしても後世に受け継いでいかなければならないと思います。

 

⚪参禅町(元SW)

 去年、このチームでSWを担当していた「参禅町」です。主な使用言語はC/C++で、昨今のとりあえず最初にPythonをやらせる風潮を嫌悪しています。あと、00年代のセカイ系とかが好きです。Switch/PS4版「さくら、もゆ。」が2023年2月22日(水) に、同作者のライトノベル作品の「もしも明日、この世界が終わるとしたら」が2022年12月28日(水)に発売です。名作なので皆買おう!

www.entergram.co.jp

sneakerbunko.jp