Robokit

ロボキットへようこそ!このドキュメントは東京工業大学 ロボット技術研究会 アクア研の2024年新歓活動で配布したロボキットに関する説明をまとめたものです。ロボキット購入費の支払い方法、アクア研の連絡先、ロボット技術研究会への入部方法もこのドキュメントを参照してください。

ロボキット購入費の支払い方法

金額は3,000円です。支払いの方法は次の2通りあります。

  1. 対面での受け渡し時に直接支払う
  2. 銀行口座への振り込みで支払う

それぞれの具体的な方法は次の通りです。

1: 対面での受け渡し時に直接支払う

対面での集金は希望する場合は 5/24,5/27 日のプールで行います。 もし都合がつかない場合はそれ以前の講習会での集金も可能です。 部員に声を掛けてください。

2: 銀行口座への振り込みで支払う

口座の情報は以下の通りです。

みずほ銀行 自由が丘支店 店番533 口座番号3064768 東工大ロボット技術研究会アクア研究

依頼人名は{新歓Discordの表示名} {ミョウジ} {ナマエ}のようにしてください。例えば、新歓Discordの表示名が24-Aquaで本名がアクア 太郎の場合は24-Aqua アクア タロウとなります。五月末までに振り込んでください。

連絡先等

ロボット技術研究会への連絡先は以下の通りです。

  • Twitterアカウント: @titech_ssr
  • メールアドレス: info[ at ]rogiken.org([ at ]@に置き換えてください)

アクア研への連絡先は以下の通りです。

  • Twitterアカウント: @rogy_aqua
  • メールアドレス: rogy.aqua[ at ]gmail.com([ at ]@に置き換えてください)

また、東京工業大学ロボット技術研究会2024年度新歓ページも参照してください。

ドキュメントの見方

以下のスクリーンショットはパソコンでこのドキュメントを開いた概観です。

mdbook-page-overview

画面を各部分に分解すると次のようになります。

mdbook-page-overview-descr

それぞれの説明は以下の通りです。

  1. このドキュメントのページ一覧。現在見ているページは青色、それ以外は白色で表されています。
  2. ドキュメントのナビゲーションです。左のアイコンから順に、以下のことができます。
    1. ページ一覧とナビゲーションの表示/非表示を切り替える。
    2. テーマを変える。
    3. ドキュメント内で検索を行う。
    4. ドキュメント全体を印刷する。
    5. ドキュメントのソースコードが置かれているGitHubリポジトリを表示する。
  3. 左矢印で1つ前のページ、右矢印で1つ後のページに移動します。
  4. ページの本文です。

ドキュメントの見方に関するより詳細な解説はReading Books - mdBook Documentationを参照してください。

困ったら

まずはトラブルシューティングを参照してください。質問のやり方は質問・バグ報告についてを参照してください。

キットの内容物

分からないことがあったら遠慮なく聞いてください!!

パーツが破損するなど、予備が必要な場合も遠慮せずに申し出てください!!

機械部品

3Dプリンターパーツ

本キットは、3Dプリンターで制作したパーツが大部分を占めています。

3Dプリンターは、他の造形方法よりも自由な造形ができます。したがって、ロボットの中でも特に形状の制限が多い水中ロボットでは、大変重宝します。

内容物

パーツ名個数写真
board12個
board22個
pillar12個
pillar24個
motorCover2個
pulley12個
pulley22個
link2個
propeller1~52×5個
motorshaftStopper2個
servoConnector2個

ネジ類

基本、長さの単位はすべてmm(ミリメートル)です。

内容物

ネジ

種類1サイズ2本数
なべネジM2*1015本
なべネジM2*1522本
なべネジM2*2010本
皿ネジM2*304本
皿ネジM2*4012本

ナット/ワッシャー

種類サイズ3個数
ナットM238個
ワッシャーM282個
ワッシャーM36個
スプリングワッシャーM235個
1

アタマが丸い方がなべネジ、アタマが平らな方が皿ネジです。

2

ネジは、基本的に直径と長さによって区別され、

  • M{直径}×{長さ}
  • M{直径}x{長さ}
  • M{直径}*{長さ}

などと表記します。
例: M2*10 ... 直径 2mm, 長さ 10mm

3

ナットやワッシャーは対応するネジの直径によって区別され、M{直径}と表記します。

その他

内容物

種類サイズ4個数写真
シャフトφ22本
シャフトφ32本
フランジブッシュ内径 2mm
高さ 2mm
2個
フランジブッシュ内径 3mm
高さ 2mm
2個
フランジブッシュ内径 3mm
高さ 6mm
2個
シリコンチューブ2本
スズメッキ線長さ 約600mm1本
紙やすり(100番台)1枚
紙やすり(150番台)1枚
紙やすり(240番台)1枚
4

シャフトなどの丸い棒は、その直径をφという記号を使ってφ{直径}と表記します。

回路部品

抵抗器

抵抗値カラーコード本数写真
10kΩ茶黒橙金5本
1kΩ茶黒赤金6本
470Ω⻩紫茶金2本
220Ω赤赤茶金2本

コネクタ/ピン

部品名ピン本数個数写真
XHコネクタ ポスト2ピン1個
XHコネクタ ポスト3ピン6個
XHコネクタ ポスト7ピン2個
VHコネクタ ポスト2ピン4個
ピンソケット最低38ピン
ピンヘッダ

その他

回路の組み立て方

ロボキット 基板回路の作製

また下図バツ印のパーツは本キットでは使用しないため、はんだ付けは不要です。送付したパーツのみではんだ付けする場合、下記の不要箇所にはんだ付けすると他の必要箇所のパーツが足りなくなる恐れがあります。 必ず不要箇所意外を優先してはんだ付けをしてください。

作業の流れ

  1. 本体基板のはんだ付け
    1. はんだ付けについて
    2. 抵抗のはんだ付け
    3. コンデンサとLEDのはんだ付け
    4. コネクタとFETのはんだ付け
    5. ソケットのはんだ付け
  2. コントローラ基板のはんだ付け
    1. 抵抗のはんだ付け
    2. コネクタのはんだ付け
  3. 電池・ケーブルの接続
    1. DCモータとケーブルのはんだ付け
    2. 電源・ケーブルの接続
    3. F303K8マイコンの0Ω抵抗について

1. 本体基板のはんだ付け

1-1. はんだ付けについて

はんだ付けのコツ等については↓のサイトや動画を参照してください。

1-2. 抵抗のはんだ付け

まずは最も背が低い抵抗からはんだ付けをします。基板上の「R」から始まる13個のパーツが抵抗です。各番号で指定された抵抗値を持つ抵抗を、向きを気にせずはんだ付けします。

抵抗は流したい電流の大きさを調整するために使用します。例えば、3.3V電源で1kΩ抵抗を用いれば高校物理で習ったように、 $$ \begin{aligned} 電流 I &= \frac{3.3\mathrm{V}}{1\mathrm{k}Ω} \ &=3.3\mathrm{m(ミリ)A} \end{aligned} $$ の電流が流れます。キットに使うようなLEDを光らせるなら5mA未満で構いません。逆に抵抗値を小さくすると大きな電流が流れます。しかし電流が大きすぎるとパーツに大きな負荷や熱がかかり破損する可能性があります。抵抗はいたずらに電流を妨げるのではなく、適切な電流の大きさに制限する調整弁と言えます。

抵抗は100Ωや510k(510キロ=510000)Ω、2M(2メガ=2000000)Ωなどそれぞれ固有の抵抗値を持っていますが、この値を判断するのに使うのがカラーコードです。抵抗に彩色された4本(ないし5本)の赤や黄色、青の線はそれぞれある数を表しており、例えば茶は1、黒は0、橙は3です。また片方の端の色は金色か銀色です。この端の金銀は抵抗の品質誤差を表しており金色なら表示抵抗値の+-5%以内の誤差、銀色なら+-10%以内の誤差があることを示しています。

R2の場合、左から茶黒橙金と4本線を持っています。このうち3番目の橙は10の乗数を表しており、橙なら10の3乗を掛けることを意味します。この乗数を用いることで何十万といった大きな数もカラーコードで表記できます。そのためR2の茶黒橙金は、 $$ \begin{aligned} 茶黒橙金 &= 1 \quad 0 \quad 3 \quad \pm5 \ &=10 \times 10^3 \pm5 %\ &=10\mathrm{k} (Ω) \pm5 % \ \end{aligned} $$ を意味します。このようにして次の表の通りに他の抵抗もはんだづけします。なお、基板上で値が「led」となっている抵抗はLEDライトに流れる電流を決定します。今回は明るすぎず見やすい1kΩとします。

下記表の番号にて不要と記載されている箇所へのはんだ付けは必要ありません。発送したパーツによってはこの箇所へはんだ付けすると他の必要な箇所で使うパーツが足りなくなるため、必ずR1~R10を優先してください。

番号カラーコード抵抗値(Ω)
R1黄紫茶金$$47\times10^1=470$$
R2茶黒橙金$$10\times10^3=10\mathrm{k}$$
R3黄紫茶金$$47\times10^1=470$$
R4茶黒橙金$$10\times10^3=10\mathrm{k}$$
R5茶黒赤金$$10\times10^2=1\mathrm{k}$$
R6茶黒赤金$$10\times10^2=1\mathrm{k}$$
R7茶黒赤金$$10\times10^2=1\mathrm{k}$$
R8茶黒赤金$$10\times10^2=1\mathrm{k}$$
R10茶黒赤金$$10\times10^2=1\mathrm{k}$$
R11赤赤茶金$$22\times10^1=220$$
R12茶黒橙金$$10\times10^3=10\mathrm{k}$$
R13赤赤茶金$$22\times10^1=220$$
R14茶黒橙金$$10\times10^3=10\mathrm{k}$$

この時上の写真だとR2とR8では抵抗の大きさが異なります(注: 実際に送付した抵抗とは大きさが異なる場合があります)。R2は大きく、R8は小さいです。これは流してもいい最大の電流量である「定格」が異なるからです。 大きいR2は1/2W抵抗といい、抵抗値 \(\mathrm{R}\) \(\times\) 電流 \(\mathrm{I}\) \(^2\) = 電力 が0.5W(ワット)まで耐えられます。一方小さいR8は1/6W抵抗といい、0.167Wまでしか耐えられません。この定格を超えると抵抗に流れる電流によるジュール熱が限界を超え、抵抗が焼損してしまいます。発熱により文字通り焼けてしまい回路が壊れ発火の危険もあります。高校物理などでの電気回路の問題では無限に電流が流せたりと仮定しますが、実際にはその発熱などを考慮する必要があります。モータなど大電流が流れる回路を作る際は、最大どの程度電圧がかかり電流が流れるのかを事前に確認し、定格の範囲内で安全に使用する必要があります。

1-3. コンデンサとLEDのはんだ付け

続いてコンデンサとLEDをはんだ付けします。ここで注意しなくてはならないのは抵抗と違い「向き」があることです。 LEDは発光「ダイオード」と言うように、ダイオードとして電流が流れる向きがあります。この向きに注意しないと電流が流れずライトが光りません。LEDの場合2つの金属線(リード)が生えていますが、長いリードの方を電圧が高いプラス側に接続し、短いリードの方を電圧が低いマイナス側に接続します

この基板では5つのLEDは全て基板上側(穴に+の印がある方)がプラスです。こちら上側にLEDの長い線の方を挿し込み、下側に短い方を挿し込みます。LED1,LED2,LED3はプログラムから自由に点滅させることができます。対してLED4,LED6は電源が接続されている時は点きっぱなしの電源接続確認用のLEDです。LED4はモータ側の電源(単三乾電池)を、LED6はマイコン側の電源(9V電池)の有無を反映します。

番号色(任意で可)
LED1
LED2
LED3
LED4
LED6

同じく接続する向きが存在するコンデンサをはんだづけします。今回は青い米粒状のものと黒い筒状のものの2種類のコンデンサを使用します。 青い米粒は積層セラミックコンデンサと言い、こちらは向きの区別なく使用できます。小さく向きの区別が無いため使いやすいですが、大きな容量のものは少ないです。他方の黒い筒は電解コンデンサと言い、リード線が長い方をプラス側に挿す必要があります。大型で向きに注意する必要がありますが、大容量のものが多いです。 表面に104と書かれた青い積層セラミックコンデンサをC1にはんだ付けします。黒い筒の電解コンデンサも向きに注意してC2にはんだ付けしますが、この時「横倒しにする」ことに注意してください。 横倒しにしないとコンデンサとマイコン(F303K8)が干渉してしまいます。一度はんだ付けすると動かしにくいです。はんだ付け前に横倒しになっていることを確認しながら接続します。

番号パーツ名向き
C1積層セラミックコンデンサ 0.1u(マイクロ)F無し
C2電解コンデンサ 100uF有り

このコンデンサの使用理由としては「ノイズの低減」のためです。IMUやマイコンなどのデジタルICが動作すると0(0V)と1(3.3V)が高速で入れ替わります。これにより逆起電力が発生しGNDやつながった配線に予期せぬ電流、ノイズが発生します。このノイズがそのまま周囲の機器に伝搬されてしまうと、機器の誤作動につながってしまいます。

ノイズが発生しうる機器(上図だとIMU)のノイズが別の機器(F303マイコン)に流入しないようにするためには、その間にセラミックコンデンサを挟むことでノイズの衝撃を緩和され、ノイズを抑えることができます。一般にこのようなノイズは正電源と負電源(GND)に乗っかるため、このノイズ低減の役割でICの電源-GNDをつなぐように配置されたコンデンサをパスコンと言います。今回のキットのセラミックコンデンサもそのパスコンです。多くの場合0.1uF程度が使われます(高周波ノイズには比較的低容量のコンデンサの方が反応しやすいため)。 またF303マイコンの9V正電源、GND間にも大容量の100uF電解コンデンサがつながれています。こちらはノイズ対策に加え予備電源のような役割もします。9V電源はDCモータにも使われており、モータが瞬間的に大電流を持ち去ってしまう場合があります。これではマイコン側まで電流が届かず不安定なため、100uFコンデンサを置いて電気を蓄えておくことで安定して電源を供給し続けられるように配慮します。

1-4. コネクタとFETのはんだ付け

サーボモータやコントローラのケーブルを接続するコネクタをはんだ付けします。写真の白い7つの長方形がそれぞれ基板とケーブルの信号を伝達するコネクタです。今回は「XH」という規格のコネクタを使います。このXHコネクタも向きに決まりがあるので注意が必要です。

上の図の様にXHコネクタには切れ込みがあります。これが基板の左か下を向くように配置してはんだ付けします。 向きが反対だと接続するケーブルが逆向きになり、本来とは別の線同士がつながってしまうので注意してください。

番号ピン数
X1(不要)3
X53
X7(不要)3
X83
X97
PHOTO1 (不要)3
PHOTO2 (不要)3

基板左中央の2つの黒いFETも接続します。FETはICがモータを操作するのに使用し、信号に応じてモータを動かしたり止めたりします。FETには3本のピンがありますが、そのうち左の1本に門(ゲート)の開閉信号を送ることで残り2ピンで大電流を通す/止めることができます。FETを使うことで小さなICの微小な開閉信号でモータに流す大電流を操作することが可能になります。

このFETには上記のようにピンごとの役割が別れているため、正しい向きがあります。型番が記載された黒い面を下側に、金属板が貼られた銀色の面を上側に向けてはんだ付けします。この時FETのピン同士の幅が狭いため、誤ってはんだでつながってしまわないよう注意してください。

番号パーツ名
FET_DC12SK4017(Q)
FET_DC22SK4017(Q)

1-5. ソケットのはんだ付け

メイン基板の最後はソケットのはんだ付けです。カラーコード読みや向きはありませんが、今度は「綺麗さ」が重要です。

写真のピンクのソケットをはんだ付けします(色はキットと異なります)。右2列が15ピンずつ、左の短いのが8ピンです。これをピンソケットを分割して作ります。最終的には分割したソケットを1ピンずつはんだ付けしますが、まずはそのうち1ピンだけはんだ付けします。1箇所だけ固定することでソケットを基板に仮留めして、ソケットが基板に垂直になるよう調整します。

両側ともソケットを垂直に立てることでマイコンを正しく差し込むことができます。一方ソケットが傾いてはんだ付けされているとマイコンが上手く挿し込めません。 またIMUの方のソケットもはんだ付けしますが、ここも垂直にしないとIMUが傾いてしまいます。傾くと重力加速度や回転角の検出時に誤差が生じてしまうため、必ず仮留めして水平に搭載できるよう角度を確かめてから他のピンもはんだ付けします。

番号パーツ名ピン数
A1ピンソケット15ピン x 2
ITG/MPUピンソケット8ピン

基板左側のXHコネクタもはんだ付けします。こちらも1ピンだけ仮留めを行い、金属端子が基板に平行になるように調整してから他方のピンもはんだ付けします。 金属端子が下を向いてしまうとコネクタが上手く挿せないため注意してください。 これにて本体基板のはんだ付けは終了です! 次はコントローラ基板のはんだ付けに移ります。

2. コントローラ基板のはんだ付け

コントローラでも背の低いパーツからはんだ付けするという原則は変わりません。まずは抵抗から始めます。

2-1. 抵抗のはんだ付け

基板中央部の抵抗、コンデンサ、LEDをはんだ付けします。コンデンサは青い米粒型の積層セラミックコンデンサを使うので向きはありません。一方LEDは向きが有り基板上側がプラス、下(ロゴ絵)側がマイナスです。上側に長い方のリード線を挿し込みます。

番号パーツ名
R1抵抗 10kΩ
R7抵抗 1kΩ
C1積層セラミックコンデンサ 0.1uF
LED13mm LED青色(色任意)

2-2. コネクタのはんだ付け

続いてXHコネクタとジョイスティックを接続するピンヘッダをはんだ付けします。 まず2つのXHコネクタを取り付けます。7ピン、2ピンのものがありますが、どちらも基板上側に切れ込みがある方が来るようにします。

番号パーツ名切れ込み
X1XHコネクタ 2ピン上側
X2XHコネクタ 7ピン上側

そして左側のピンヘッダです。これは写真ではジョイスティックを取り付けた後なので分かりにくいですが(適当な写真が無くてすみません)、まずは5ピンのピンヘッダをはんだ付けします。 このピンヘッダに直交するようにジョイスティックをはんだ付けします。写真ではジョイスティックのピンにソケットを被せ、ソケットをはんだ付けすることでジョイスティックが取り外せるようにしています。今回のキットではジョイスティックを外すことはないので、ジョイスティックを直接ピンヘッダにはんだ付けして固定してしまっても構いません。 最後に基板右側に空いた穴にあたる回転ボリュームを取り付けます。このツマミを調整することで機体を回転させます。

回転ボリュームはまず穴の上側に空いた3つの穴にボリュームの3つのピンを挿し込みます。その後台座を穴に押し込みます。この時少し力が要ります。 これで回路製作は全て終了です!あとはケーブルと電池をつなげば完成です。

3. 電池・ケーブルの接続

3-1 DCモータとケーブルのはんだ付け

DCモータに電流を流すケーブルをはんだ付けします。2つのDCモータの一方に赤いリード線を、他方に黒いリード線をはんだ付けします。2つとも同じ端子には同じ色のリード線を使ってください。 キットでは既にリード線の端にXHコネクタのソケットが付いていますが、上記のようにモータ端子のリード線の色を2つともそろえると基板のコネクタに対し赤黒の線が逆向きに差さります。この状態だと、写真左のDC1には黒から赤へ、右のDC2には赤から黒へ電流が流れます。これによりモータは逆向きに回転するようになります。キットの構造・制御上、FETから来る電流に対し逆向きに回転する必要があります。

3-2. 電源・ケーブルの接続

最後に電池とケーブルを接続します。

まず本体基板左下の2つのXHコネクタにはそれぞれDCモータを接続します。続いて写真右上の本体基板中央の縦置きされた下2つの3ピンXHコネクタにサーボモータを接続します。その後ピンクのソケットの8ピンの方にIMUを、15ピンx2の方にF303K8マイコンを挿します。この時マイコンのUSB端子を基板上側にします。

XH7ピン1.5mケーブルで本体基板とコントローラ基板を接続します。コントローラ基板のXH2ピンには9V電池用のリード線を接続します。

全て接続されたら電源となる電池を接続します。本体基板左上の2つのXHコネクタにはそれぞれ単三電池3本の4.5V電池ボックスを接続します。ここで注意が必要なのは、この時使用する計6本の電池は必ず新品のものを使用してください。回路の構成上、モータ用の電流をまかなうため2つの4.5V電源が並列接続されています。このため2つの電源に電位差があると(例えば3.0Vと4.5Vが並列接続になると)電源が不安定になります。新品の電池を使用して同じように使用することで、どちらの電池ボックスも同じ電圧で使用されていくようにしてください。

最後にコントローラ基板のリード線を9V電池に接続して完成です!ここからはプログラムを作製し、実際にLEDやモータをうごかします。

3-3. F303K8マイコンの0Ω抵抗について

個々からは製作に関係ないコラム的な話ですが、今回予めF303K8にはんだ付けされていた0Ωのチップ抵抗を外しました。この理由についてお話します。

僕らが試作している時、ジョイスティックとIMUを併用するとジョイスティックの傾きの読み取り値がおかしくなるという問題がありました。しかし一方だけの使用の時は問題ありませんでした。

この問題を調べてみたところ、ジョイスティックに使っているピンのA4・A5と、IMUとの通信に使うD4・D5が何故か回路的に元からつながっているせいであることが分かりました。 このためIMUの信号がそのままジョイスティックの値読み取りピンまで上乗せされてしまい、ジョイスティックの値がおかしくなっていました。

この問題を解決するためにはもちろん使うピンを変えればよいのですが、そのために基板を再度発注する時間がありませんでした(なんで自分はもっと早くに気づかなかったんだっ)。そのため今ある基板を使い、この事態を回避する最後の手段として抵抗をはがしてマイコンを改造する荒療治となりました。これによりピンのつながりを物理的に切断しました。 今のところこの改造で新たな問題は発生していないですが、もしかしたら何か不測の事態が起こるかもしれません(その時はごめんなさい...orz)

別の有名どころのマイコンであるArduinoに合わせるためとの説もありますが、なぜピン同士がつながっているのか、全くの謎です...

付属資料

回路図

本体基板(1)

本体基板(2)

コントローラ基板

オムニボートの機体組み立て方法

分からないことがあったら遠慮なく聞いてください!!

パーツが破損するなど、予備が必要な場合も遠慮せずに申し出てください!!

注意点

パーツは優しく扱おう

3Dプリンターで出力したパーツは一般にプロトタイピング用のパーツとして扱われており、その分他の造形方法に比べて脆いです。やさしく扱ってください。

パーツ紛失に注意

小さいパーツが多いのでとても無くしやすいです(体験談)。片付いた部屋や机の上で作業することを勧めます。

水没厳禁

今回のキットの機械(モーター周りや端子)、回路は防水性能を持ちません。水上で想定されるちょっとした水しぶきを防ぐ程度の防御性能はありますが、DCモーターやサーボモーターが水没すると壊れます。そのため水上実験の際はboard2より上は水に付けないようにしましょう。

安全対策

モーターが高速で回転するため、回転中にパーツが外れると非常に危険です。空中で回転実験する際はプロペラ部分をのぞきこまないようにしてください。もしのぞき込む場合は防護眼鏡などを着用してください。

用意するもの

組み立てには次の道具が必要です。工具は一般のご家庭にあるもので問題ありません。そこまで高品質なものでなくとも十分なので100均やホームセンターで売っているものでも大丈夫です。

  • プラスドライバー
    • キットに含まれるM2ネジをなめずに回せる様な小さいもの。ドライバーのサイズ規格の目安は#0 or #1
  • ニッパー
  • ラジオペンチ×2
  • ハンマー、かなづち、木づちなど
  • 雑巾やタオルのような厚手の布
  • ハンマーを使う際の捨て板とする適度に硬い板
    • 木の板などで十分。ただしハンマーでへこんでしまっても良いもの。
  • セロハンテープ
  • 輪ゴム×4
    • 16号(一般的なサイズ)

組み立て手順

パーツのバリ取り

3Dプリンターの仕組み上、パーツにサポート材と呼ばれる印刷の際の支えが残ってしまう。パーツの滑らかでない面は付属のやすりで丁寧に削る。この精度が後の組み立ての正確性に影響する。

DCモーターの回転方向の確認

回路説明書に基づいてはんだ付けされたDCモーターは、回路につないだ時互いに反対に回転するようになっているため、回転方向を特定する必要がある。

それぞれのモーターに旗のようにテープを巻き付け、回路につないでモーターを回転させて回転方向を見る。図の方向(軸からモーターを見る方向)から見て時計回りに軸が回転していればCW(clockwise)、反時計回りに回転していればCCW(counter clockwise)とテープなどで目印をつけておく。この後の組み立ては回転方向によって手順が異なる部分があるため、区別しておく必要がある。

サーボホーンの取り付け(2つ作る)

可動域-90°~+90°を持つSG90にPWM Period 20ms, Palse Width 1.45msのPWMを出力しするとサーボモーターが0°を向く。この状態で、下図のようにサーボホーンが本体と垂直になるようにサーボホーンを取り付け、サーボホーン同梱のネジ(一番小さなものが好ましい)でねじ止めする。次に右図のようにサーボホーン両端の外側から2番目の穴にスズメッキ線を通し、servoConnectorの両端の穴にも通してぐるぐる巻きにすることでこれらを固定する。上からのぞいた時に中心の穴を通してサーボホーン取り付けネジが見えていることを確認する。

この部分を間違えるとプロペラの推進方向の可動域が変わるので要注意。取り付け後にもう一度PWM Period 20ms, Palse Width 1.45msのPWM信号を流して、サーボホーンが下図のようにサーボモーターと直角の向きになればうまくできている。

※ PWM信号を流す具体的な方法はサーボの原点合わせについてを参照してください。

サーボモーターとDCモーターの取り付け(2つ作る)

サーボモーターの軸がDCモーター側に来るようにboard2に取り付ける。図のようにサーボホーンをM2×10ネジとナットで固定し、DCモーターをはめ込む。DCモーターは特にネジなどで固定しない。モーターに張っておいたCW,CCWを区別するテープは見やすい位置に張り替えておくとよい。

motorCoverをかぶせる(2つ作る)

motorCoverの横穴にモーター、サーボモーターの配線を内から通し、motorCoverをかぶせる。motorCoverの大きな配線用横穴がDCモーター側に来るように組み立てる。

pillar1、pillar2を取り付ける(2つ作る)

board2とmotorCoverのDCモーター側のはじに空いている2mm穴にワッシャーを先に通したM2×15ネジを入れる。左図のようにpillar2(又はM2ナット)を先に通し、あとからpillar1を取り付ける。pillar2は方向が正しければboard2やpillar1の溝にぴったりはまるようになっている。pillar1の穴にはネジ切り加工がされているため、ネジを締めることで固定できる。なお、このpillar2は船体取り付け用の取っ手であるが、M2ナットに置き換えて組み立てることが可能になっている。そのため作る船体の形状にから見てpillar2が邪魔になる場合はこれをM2ナットに置き換えてもよい。

board1を取り付ける(2つ作る)

同じ要領でboard2、motorCoverのサーボモーター側の2mm穴にワッシャーを通したM2×15ネジを通し、board1の柱の部分の穴にねじ止めする。この穴もpillar1同様にネジ切り加工がされている。

board1とpillar1,2をねじ止めする(2つ作る)

pillar1,2をつけた時と同じ要領でboard1とpillar1の間にもう一つのpillar2(又はM2ナット)を挟んで、先にワッシャーを通したM2×15ネジでねじ止めする。なお、このpillar2は船体取り付け用の取っ手であるが、M2ナットに置き換えて組み立てることが可能になっている。そのため作る船体の形状にから見てpillar2が邪魔になる場合はこれをM2ナットに置き換えてもよい。

board1にフランジブッシュを取り付ける(2つ作る)

フランジブッシュは3種類同梱されている。そのうち内径が小さいもの(内径2mm)をboard1の小さい穴にはめる。内径が大きいもの(内径3mm,袋に入っている)は2種類あるが、長さが短いもの(長さ3mm)の物をboard1の大きいほうの穴にはめる。はめた後は図のようになる。 はめる向きを間違えるとプロペラが上手く回らない恐れがあるので注意する。

シリコンチューブカップリングを作る(2つ作る)

同梱されている2種類のシリコンチューブ(細く長いもの×2と太く短いもの×4)を用意する。太いチューブを細いチューブの両端にはめ込み、図のようなカップリングを作る。

Φ2真鍮シャフトをpulley1に圧入する(2つつくる)

図のように下のテーブルなどが傷つかないように捨て板を用意して、そのうえで作業することを勧める。ハンマーを短く持ってΦ2の真鍮製シャフトがゆがまないように気を付けながらpulley1の穴に奥まで打ち込んで圧入する。木づちやゴム製のハンマーの場合は雑巾などを挟むとハンマーが傷つきにくい。

motorshaftStopperにネジをつける(2つ作る)

M2×10ネジを図のようにmotorshaftStopperに2つ通し、ナットで締める。ここでは切り込みが入ったほうのナットは緩めておく。切り込みがないほうのネジとナットは、このパーツの重心が中心からずれることによって生じる振動の対策なので、回転対称になるようにねじをつけるとよい。

pulley1のシャフトをDCモーターにつなげる(2つつくる)

左図のようにboard1のDCモーターと同軸上のフランジブッシュに真鍮シャフトのついたpulley1を通し、そこにM2ワッシャー2つとmotorshaftStopperを通す。つぎに右図のように先に作ったカップリングでDCモーターのシャフトと真鍮シャフトをつなぎ、motorshaftStopperをboard1の近くに動かして切り込みのほうのネジを締めることで軸に固定する。固定できたらpulley1を回してみて特に引っ掛かりがなく回ることを確認する。 ここまでの段階で同じものが二つできているはずである。

pulley2の下準備(2つ作る)

pulley2の各2mm穴に皿ねじ用の面取りがされている方からM2×40の皿ねじを通し、反対からM2ワッシャー、M2スプリングワッシャー、M2ナットの順で通し、ナットを締める。これを5つの穴すべてに行う。続いてネジが出ている方と同じ方向に面が出るように内径3mm、長さ6mmのフランジブッシュを中心の穴に取り付ける。

linkの圧入とネジ固定(2つ作る)

linkの面取りがされていない、内径3mmの非貫通穴にpulley1と同じ要領でΦ3メカニカルシャフト(銀色のシャフト)を奥まで圧入する。次に、Φ3シャフトとは反対方向にネジが出るようにM2×35(又はM2×30)の皿ねじをもう一方のネジ切りされた穴にねじを回して通す。ネジが入り切ったらM2ワッシャー、M2スプリングワッシャー、M2ナットとネジに通していき、ナットをラジオペンチで回してしっかり固定する。それができたらΦ3シャフトを右図のようにpulley2に通す。

左図のようにリンクのΦ3シャフトとネジが平行になっていることを確認する。少し曲がっている場合は予備のlinkに入れ替えて試してみる。平行でないと後の引っかかりの原因となる。

[重要]プロペラを通す(CW,CCWで違うので注意)

プロペラを仕上げる(10個すべてのプロペラに行う)

プロペラは2つの袋に梱包されており、それぞれにpropeller1~5が入っている。混同しないように袋ごとに作業することを勧める。

プロペラはこのキットの中で最も繊細な部分であり、ここに引っかかりがあるとモーターが上手く回らない。郵送されたそのままの状態ではバリがあるので、まずニッパーで大まかなバリを落とした後、付属の紙やすりの目の粗いものから細かいものへとバリの部分にやすりがけをしていく。続いて、リンク溝や羽に空いた2mm穴の部分にM2×35皿ねじの余りを通してみて、スムーズに通るか確かめる。もし引っ掛かりがあるようなら、そのままねじをギコギコとこすって削る。この作業をすべてのpropellerに行う。

CW版

まずは最上図のように羽の丸いほうを左に向けた状態で左上から左下に階段状にリンク溝部分が出るように並べる。この状態で左から順にpropeller1,2,3,4,5である。

CW版では、propeller1から順に先のように並べた状態の上側からpulley2のねじとlinkのねじに通していく。 propeller1を通す前にpulley2のねじにM2ワッシャーを通し、linkのねじ(以降リンク軸と呼ぶ)にもM2ワッシャーを通す。その上からpropeller1を羽の短い方向から通す。propeller1を通した後は下図のようになる。

propellerを一つ通すごとに、pulley2を抑えてΦ3シャフトを引きながらまわして引っ掛かりがないか確かめる。propellerがしっぽを振るような動きをするはずである。これが手で十分回るなら問題ない。もし引っ掛かりがあるようなら新たにはめたpropellerが原因の可能性が高いので、疑わしいpropellerに対して再びpropellerのやすり掛けの工程を行う。

続いて、propeller2を通す。以後、propellerはpropeller1を通したところから星を描くように順番に入れていく。これは羽の不均一をなるべくなくすためである。

propeller2を通す前にそれを通すpulley2のねじとリンク軸にM2ワッシャーを通す。以降propeller3~5も同様である。五つ通した状態が次の図である。

最後にリンク軸にM2ナット、M2スプリングワッシャー、M2ナットの順に通す。このようにナットを2つ使って閉めることをダブルナットという。

このダブルナットはpropellerに近すぎると摩擦が生じて引っ掛かり、逆に遠すぎるとがたつきが生じて引っかかりやすくなることがある。そのため、下図のように少し遊びを持たせて締める。この際、linkとpulley2のフランジブッシュのつばが密着した状態で締める。締め方は、1つのラジオペンチで奥側のナットを持ち、手前のナットをもう一つのラジオペンチで回すことでしっかり締めることができる。間に挟んだスプリングワッシャーがしっかりと圧縮されていることを確認しよう。(下図は説明と異なりダブルナットに普通のワッシャーを挟んでいるが、スプリングワッシャーを挟むのが正しい。)

下記ののURLの動画くらいに滑らかに回転していれば十分である。

なめらかさ目安動画

CCW版

基本的にはCW版と同じであるが、羽を入れる順番が異なる。CW版ではpropeller1から順に上側から通したが、CCW版ではpropeller5から降順に、下側からpulley2のねじとリンク軸に通していく。

その他の手順は同様で、propellerを通す前にワッシャーを通しておくことを忘れないように気を付ける。すべてとおしたらCWと同様にダブルナットを締め、滑らかに回転することを確かめる。下記のURLの動画くらいに滑らかに回転していれば十分である。(動画はCW版のものと同じで、回っているのはCW版)

なめらかさ目安動画

正しくできていればCW版とプロペラの向きが異なるものになる。

プロペラの軸をサーボモーターにつなげる

続いてサーボモーターの回転軸と同軸上のフランジブッシュにプロペラのΦ3シャフトを通し、先端にセロハンテープを2-3周巻く。この軸をservoConnectorに下図のように通す。

ワッシャーを先に通したM2×15ねじをservoConnectorの横穴に上図のように通し、反対からM2ワッシャー、スプリングワッシャー、ナットの順に通して緩く締める。この段階ではきつく締めない。

次に、サーボモーターが0°(-90°~+90°の可動域としたとき)になるようにPWM信号を入力する。サーボホーン取り付け時の過程で間違いがなければサーボホーンは真横を向くはずである。

サーボが0°の状態で下図の方向から見て真右側にリンク軸が出ている状態にしておく。下記の図は左がCW版、右がCCW版である。どちらも図の見方でリンク軸が右に偏心している状態が正しい。こうすることで、CW版は図の下側に水をふき、CCW版は図の上側に水をふくようになる。そのためCW版が船体の前方、CCW版が後方となる(サンプルプログラムを使用した場合)。

Φ3シャフトをラジオペンチなどで持ってサーボホーン側になるべく入れ込んでおく。この際あまり奥に入れ込みすぎると摩擦が大きくなるので、下図のようにboard1のフランジブッシュのつばとpulley2の間に0.5mm~1mm程度の遊びがあると滑らかにまわってくれる。この状態でサーボを0°にするようにPWMを流し、上図のようにリンク軸の方向が真右になっていることを再び確認してからナットを占めてΦ3シャフトを固定する。

Φ3シャフトを固定したらpulley2を回してみて滑らかに回ることを確かめる。下記の動画くらいの滑らかさが目標となる。

なめらかさ目安動画

輪ゴムをかけて完成!!

pulley1とpulley2の間に輪ゴムを2つかけて完成!(下図はCW版) 回路につないで動作チェックしよう! この機械のプロペラ部分は壊れやすいので、保管する際はプロペラ部に力がかかりすぎないように注意する。

船体作成のヒント

オムニボートの動力となる部分は完成しましたが、このままでは沈んでしまうため浮力を備えた船体部分を作る必要があります。次のヒントを元に、自分で作ってみましょう。

注意:このキットの電子部品、回路は防水ではありません。水の飛沫が少し飛ぶ程度なら問題ありませんが、水にモーターを付けると死にます。回路が壊れる可能性もありますので、DCモーターやサーボモーター、回路、ケーブルの金属がむき出しになっているところは絶対に水に付けないでください

プロペラどうしをつなぐ「骨」を作るのがおすすめ

プロペラモジュールだけでは当然沈んでしまうため、発泡スチロールなどの浮力材をつけなくてはいけません。しかし発泡スチロールは脆いので、直接発泡スチロールにプロペラモジュールをつけると壊れやすいです。そのため、先にプロペラモジュールどうしをつなぐ”骨”を作っていおいて、その骨に浮力材で肉付けしていくのがおすすめです。

回路を保護する

回路と電池ボックスが入るような市販のタッパーのような容器(100均で十分)でこれらを水しぶきから保護しましょう。

(作例)

100均のタッパーを用いて回路を保護しています。完全な防水性能はないですが、水しぶきを防ぐには十分です。万が一の回路の短絡を防ぐために、基板の背面には絶縁体(養生テープ)を貼っています。

船体のバランスを考える

基本的に水上(水中)ロボットは重心が下で浮心が上になるように設計します。ですが、今回のモーターモジュールの設計では水に付けてはいけないモーターが上の方に来ており、回路も水につけてはいけないため上の方に置くことが想定されます。つまり、今回のキットで船を作ると重心のほうが浮心より上に来てしまう可能性が高いです。特に工夫なくモーターモジュールに発泡スチロールなどの浮力を付けただけでは転覆し、回路が水没してしまう恐れがあります。もし、一度作った船を手で支えたまま水につけてみて、横転するようなトルクを感じる場合は船体の両サイドにペットボトルや発泡スチロールで作った浮きをつけてみてください。こうすることで、機体を転覆させるようなトルクがかかったとしても両端の浮力が外側でそれを打ち消すように働き、船体の姿勢を安定化してくれます。

(作例)

アクリル板で骨組みを作りシュナイダープロペラユニットを固定しています。100均の発泡スチロールを浮力材とし、その上に電池や回路が入った100均のタッパーを配置しています。

(作例の設計の問題点)

浮力材である発泡スチロールはただ四角く切り出しただけであり、水の抵抗が大きい形状です。この形を工夫することで、目的の方向への直進性を高めることができると考えられます。形を工夫してみましょう!

プログラミング環境構築

ここではロボキットのプログラムを書き、そのプログラムでロボキットを動かすための環境構築を紹介します。概要は次の通りです。

  1. VSCodeをインストールする
  2. VSCodeを開く
  3. プログラムを開く
  4. 必要な拡張機能をインストールする

ここではMac, Windowsでの環境構築について紹介します。環境構築でわからないところがある場合は質問・バグ報告についてを参照してください。

1: VSCodeをインストールする

VSCode(Visual Studio Code)とは、microsoftが無料で公開しているコードエディタです。プログラミングを行う際はこのエディタを使うことが多いです。

まずはインストールに必要なファイルをダウンロードします。次のURLを開いてください。

https://code.visualstudio.com/

VSCodeをインストールに適切なファイルをダウンロードするボタンがページの真ん中あたりに表示されています。Macの場合は以下のようなものです。

このようなボタンを押すとダウンロードが始まります。ダウンロード後の作業はOSごとに手順が違うので注意してください。

Windows

ダウンロードされたものはVSCodeのインストーラです。ファイルを開いて実行すると、VSCodeをインストールするためのウィンドウが開きます。 以降はウィンドウの指示に従って進めてください。

ダウンロード後のスクリーンショット付きの説明はVSCode | Visual Studio Codeのダウンロードとインストール #Visual Studio Codeをインストールするを参照してください。

オプションが何個かありますが、迷った場合/わからなかった場合はとりあえずチェックを入れておくのが吉です。

Mac

ダウンロードされたものはVSCodeアプリのzipファイルです。展開するとVisual Studio Code.appという名前のファイルができます。このファイルを「アプリケーション」フォルダに移動させてから開いてください。

開く際に警告が出る可能性がありますが、構わず進めてください。

ダウンロード後のスクリーンショット付きの説明はMacOSでVisual Studio Codeをインストールする手順 - Qiita #3. ダウンロードしたファイルを開く(解凍する)を参照してください。

2: VSCodeを開く

インストールが完了したらVSCodeを起動します。最初に表示されるウィンドウは↓のようになっているはずです。

画面右下にある「インストールして再起動」のボタンを押してください。VSCodeが再起動後、日本語化されます。

3: プログラムを開く

まずはロボキットを動かすプログラムをダウンロードします。

↑のバッジを押すとzipファイルのダウンロードが始まります。展開して得られるフォルダの中にプログラムが入っています。(zipファイルは削除しても構いません。)

zipファイル展開の流れ(わかる人はとばして大丈夫です。)

Windows

  1. zipファイルをダウンロードすると右上に表示されるのでダウンロードが終わってからomniboat_robokit_main.zipのzipファイルににポインタを当ててファイルマークをクリックしてください。 (またはエクスプローラーのダウンロードフォルダからzipファイルを探してください。)

  2. ファイルを選択して右クリックし、「すべて展開」を選択してください。

  3. 「参照」を選択して展開先をドキュメントに変更し、右下の「展開」をクリックしてください。(別の場所にしたい人は別のフォルダを選んでください。)

Mac

  1. Finderを開き、zipファイルをダウンロードフォルダからドキュメントフォルダに移動させてください。
  2. zipファイルをダブルクリックしてください。展開が完了します。

続いて、展開したフォルダをVSCodeで開きます。Windowsの方はウィンドウ左上のメニュー、Macの方は画面左上のメニューから ファイル>フォルダーを開く を選択してください。フォルダを選ぶためのウィンドウが出てくるので、先程zipファイルを展開して得たフォルダを選択して開いてください。

4: 必要な拡張機能をインストールする

フォルダをVSCodeで開くと、以下のようなウィンドウが表示されるはずです。

画面右下の「インストール」ボタンを押して、プログラムを実行するのに必要なVSCodeの拡張機能をインストールします。

VSCodeでは拡張機能と呼ばれるものをインストールしてVSCodeをより多機能にすることができます。ここでインストールしているのはPlatformIO IDEという拡張機能です。

インストール後、必要に応じてVSCodeの再起動などを行なってください。VSCodeのウィンドウ左側にのアイコンが表示されていれば環境構築は完了です。

参考

コンパイル

このページでは、「コンパイル」とは何か、またその方法について説明します。

コンパイルとは何か

私たちがコンピュータ上で計算を実行したいとき、まずはプログラミング言語と呼ばれる言語を用いてプログラムを記述します。プログラミング言語は日本語、英語といった自然言語とは違い、コンピュータが行う計算内容を記述するための言語です。ちなみに、ロボキットを動かすために使われているプログラミング言語はC++というものです。プログラミング言語の文法はとても厳密に定義されているため、1文字でもミスがあればコンピュータは思い通りに動いてくれません。(書いた通りに動く、とも言えます)

また、私たちが書いたプログラムはコンピュータにそのまま解釈されるわけではなく、一度機械語という別の言語に翻訳されます。この機械語は1000110111011001...といった01の列で表され、これを人間が記述するのは困難です。そのため、プログラミング言語で記述されたものを機械語に翻訳します。この翻訳をコンパイルといいます。

コンパイルによって生成された01の列(これをバイナリと呼ぶことがあります)は最終的に一つのファイルにまとめられます。

このようにしてできたファイルは、その内容をテキストとして認識することができません。このようなファイルをバイナリファイルといいます。それに対して、テキストとして認識することができるファイルをテキストファイルといいます。例えば、プログラムが記述されているファイルはテキストファイルの一種です。

コンパイルを行うには、コンパイラというソフトウェアを使用します。私たちは前ページの環境構築で必要なコンパイラをすでに入手しています。

より詳しい説明はコンパイラは翻訳ソフト - 苦しんで覚えるC言語を参照してください。

コンパイルのやり方

ここで紹介するのはコンパイル方法のあくまで1種です。動かしたいコンピューターの種類、扱っているプログラミング言語の種類などによってコンパイル方法は変わってきます。

まずはsrcフォルダ内にあるmain.cppを開いてみてください。このようなウィンドウ表示になるはずです。

右上、または下のバー(ステータスバーといいます)にあるチェックマークを押すとコンパイルが始まります。SUCCESSと緑色の文字で表示されたらコンパイル成功です。

アップロード

アップロードとは何か

コンパイルで生成されたバイナリファイルをコンピュータに与えることで、記述したプログラム(をコンパイルしたもの)を実行することができます。与える方法は環境によって異なりますが、ロボキットに載せられているコンピュータにプログラムを与えるためには成果物のアップロード(書き込み)を行う必要があります。

ロボキットに載っているのはNucleo-F303K8という種類のコンピュータで、これはマイコンと呼ばれるコンピュータの一種です。マイコンには他にArduinoなどがあります。マイコンでコンパイル済みのプログラムを実行するには書き込みを行う必要があります。

書き込みでは、マイコンのメモリにバイナリファイルがそのまま配置されます。そのため、書き込みが完了した後にマイコンに電源を入れると即座にプログラムの実行が始まります。

アップロードの方法

コンパイルの方法で載せた、プログラムをVSCodeで開いた場合の画面を再掲します。

右上のチェックマークの横にあるvのようなボタンを押してUpload選択する、またはステータスバーにあるを押すとアップロードが始まります。こちらもコンパイルと同様、SUCCESSと緑色の文字で表示されたら成功です。

参考文献

サーボの原点合わせについて

ここでは機体組み立て方法 #サーボホーンの取り付けで言及したサーボの調整について説明します。

PWM信号とサーボモーターの関係

オムニボートの頭脳となるマイコンは、繋がっている導線に電圧を与えることで各部品を動かしています。この電圧は0Vか3.3Vの2値(オン/オフ)しか選択できないため、例えば1Vの電圧などは出力できません。そこで扱われるのがPWM(Pulse Width Modulation)という技術です。

PWMでは、特定の周期でオンとオフを切り替えることによって擬似的に電圧を制御します。例えば、オンで3.3Vが出力される状況で、3.3s中1.0sだけオンにすると平均で1.0Vが得られます。このような、オンオフを切り替える1サイクルの間隔をピリオド(Period)、オンとなっている時間をパルス幅(Pulse Width)と呼ぶことがあります。先ほどの例ではピリオドが3.3s, パルス幅が1.0sです。

サーボモーターは今紹介したPWM信号を用いて向きを制御するモーターです。今回用いるSG90というサーボモーターでは、ピリオドは20msで固定、パルス幅を変化させることでモーターの向きを変更します。パルス幅は1450usでモーターの向きが0°になります。

参考:

サーボリセット用のプログラム

ここからはプログラミング環境構築を既に済ませていることが前提となります。3: プログラムを開くで展開したzipファイルの中に、examplesという名前のフォルダがあります。そのフォルダの中にあるreset-servoという名前のフォルダをVSCodeで開いてください。

コンパイルおよびアップロードの手順に従ってプログラムのコンパイル、アップロードをすると適切なプログラムがマイコンに書き込まれます。このプログラムではPB_4のピンにサーボモーターの向きを0°にするPWM信号を送ります。

配線

ここでは簡単のため、ブレッドボードを使用してマイコンとサーボを繋げる方法を紹介します。ブレッドボードとは、以下の引用に示されるようなものです。

ブレッドボードの使い方-電子工作とメモ


bread board


bread board 2

ブレッドボードとはソケット(穴)に部品を差し込むだけで電子回路の試作・実験ができるたいへん便利なものです。 写真を見ただけでは使い方が解りづらいかもしれませんが、各ソケットは図の薄いオレンジ色の帯びで記してあるように内部でつながっています。 これを頭に入れて回路を組みます。

このブレッドボードを用いて、以下のように配線を行います。

servo-wire

この状態でプログラムをアップロードしたマイコンに電源を入れるとサーボの角度がリセットされます。

質問・バグ報告について

ここではロボキット等に関する質問の仕方、プログラムにバグが見つかった際のバグ報告について説明します。どんな些細な内容でも積極的に聞いていきましょう!

Discord

ロ技研の新歓用Discordサーバーの招待リンクは↓です。(※スパム防止のため、参加した際には自己紹介をお願いします)

https://discord.gg/hvqphKWR

このサーバー内の、水上ロボット体験会2024というチャンネルで質問等お願いします。ロボキットに直接関係がないようなものであれば雑談など他のチャンネルを使用してください。このチャンネルでの会話は他の新入生にも見えているため、こちらが何度も同じ質問等に答える必要がなくなります。まずはDiscordでの会話を検討してください。

Twitter/メール

他の新入生等に知られたくない場合はTwitterのDMやメールでお願いします。TwitterのIDやメールアドレスは連絡先等を参照してください。

GitHub

注意 この節ではGitHubアカウントをすでに持っていることを前提としています。

このドキュメントおよびプログラムはrogy-AquaLab/omniboat_robokitで開発しています。issueを作成してバグ報告等お願いします。

入部方法について

4/26(水)前なら

1. 新歓用discord(招待リンク)に参加しましょう

discordに参加したら、スパム防止のために最初に自己紹介をしましょう。 権限が渡されたら、さまざまなチャンネルにのぞけるようになるので、いろんな研究室の定例会とかのぞいてみましょう。 気になる研究室が見つかって、仮入部的に活動したかったら、各研究室の先輩にDMしてみましょう!

2. disocrdで通知される情報を確認しましょう(4月末に一斉登録予定)

部費の入金方法や部費の入金後のシステム登録方法などの情報が流れます。

3. 入部できたら活動しましょう

初めてロボット作るって人はSSR杯に参加するのもおすすめです!また、どこかの研究室に所属しておくのもおすすめです! もし、工作機械等を使いたいときは先輩に講習をお願いしましょう。

困ったら

Discordの@21-constまたは連絡先にあるアクア研まで

トラブルシューティング

主にプログラミング関連のトラブルシューティングです。

ld returned 1 exit status でコンパイルができない

考えられる原因

(Windowsを前提としています)

パス(ファイルの場所を示す文字列)に日本語が含まれている可能性があります。例えばOneDriveのドキュメントフォルダーの中にPlatformIOのプロジェクトを置いた場合、パスはC:\\Users\[username]\OneDrive\ドキュメント\omniboat_robokit\...のようになります。

解決方法

C:\\Users\[username]\Documents\omniboat_robokitなど、パスに日本語が含まれない場所に置いてください。

ロボットが上手く動かない

まずはこういった、機械・回路の原因を検討してみてください。それでも解決しない場合は、以下の方法をお試しください。

コンパイル済みのバイナリを書き込みます。こちらのリンクから書き込むバイナリをダウンロードしてください。マイコンをパソコンに差し直すとマイコンがUSBデバイスとして認識されるので、ダウンロードしたファイルをその中にコピーしてください。コピーが完了したら自動的にプログラムが起動します。

OpenOCDのエラーが出る

Windowsでマイコンへのアップロードを行っている時に発生するエラーです。ST-Linkのドライバがインストールされていない可能性があります。以下の手順を試してみてください。

  1. ドライバのダウンロードページ を開く
  2. Get Softwareを押して、ドライバのインストーラをダウンロードする
    • アカウント登録を求められます、新規登録をお願いします🙏
  3. zipファイルがダウンロードされるので展開する
  4. 展開されたものの中にdpinst_amd64というファイルがあるのでこれを開く
    • これは64ビットのWindowsでの手順です
    • 32ビットの場合はdpinst_x86というファイルを開いてください
  5. インストーラが起動してドライバがインストールされる

パソコンを再起動した後に再度アップロードを試してみてください。それでもアップロードができない場合は、接続したデバイスに対してドライバが正しく割り当てられているかを確かめる必要があります。確認手順は以下の通りです。

  1. デバイスマネージャーを開く
    1. キーボードのWinボタンを押す
    2. device managerで検索
  2. マイコンに対応するデバイスを探す
    • 下のスクリーンショットを参考にしてください(ドライバが正しく割り当てられている場合のものです) device-manager
  3. ドライバーを更新する
    1. デバイスを選択
    2. ドライバーを自動的に検索を実行

回路

内容物リスト (1キットあたり)

抵抗

部品個数販売会社rogy備品URL
220 Ω2秋月Ohttps://akizukidenshi.com/catalog/g/g107808/
470 Ω2秋月Ohttps://akizukidenshi.com/catalog/g/g107814/
1 kΩ6秋月Ohttps://akizukidenshi.com/catalog/g/g107820/
10 kΩ6秋月Ohttps://akizukidenshi.com/catalog/g/g107838/

コンデンサ

部品個数販売会社rogy備品URL
電解 0.1 μF2秋月Ohttps://akizukidenshi.com/catalog/g/g117877
セラミック 100 μF1秋月Ohttps://akizukidenshi.com/catalog/g/g113582/

LED

部品個数販売会社rogy備品URL
3mm 赤2秋月Ohttps://akizukidenshi.com/catalog/g/g111577/
3mm 緑2秋月Ohttps://akizukidenshi.com/catalog/g/g111635/
3mm 青2秋月Ohttps://akizukidenshi.com/catalog/g/g111578/
3mm 黄2秋月Ohttps://akizukidenshi.com/catalog/g/g111639/

汎用コネクタ

部品個数販売会社rogy備品URL
XH 2p ベース1秋月Ohttps://akizukidenshi.com/catalog/g/g112247/
XH 3p ベース6秋月Ohttps://akizukidenshi.com/catalog/g/g112248/
XH 7p ベース2秋月Ohttps://akizukidenshi.com/catalog/g/g112252/
XH 2p ハウジング1秋月Ohttps://akizukidenshi.com/catalog/g/g112255/
XH 3p ハウジング2秋月Ohttps://akizukidenshi.com/catalog/g/g112248/
XH 7p ハウジング2秋月Ohttps://akizukidenshi.com/catalog/g/g112260/
XH コンタクト30秋月Ohttps://akizukidenshi.com/catalog/g/g112265/
VH 2p ベース4共立エレショップOhttps://eleshop.jp/shop/g/g61J14M/
VH 2p ハウジング4秋月Ohttps://akizukidenshi.com/catalog/g/g112811/
VH コンタクト10秋月Ohttps://akizukidenshi.com/catalog/g/g112838/
ピンヘッダ 1x401秋月Ohttps://akizukidenshi.com/catalog/g/g100167/
ピンソケット 1x421秋月Ohttps://akizukidenshi.com/catalog/g/g105779/

備考

  • XH 3p ベースのうち4つは使われないピンに繋がっているので、ハウジングは2つで良い。
  • VH 2p ベースはL字のものを買おうとすると秋月にない。秋月の直立タイプを使う場合は以下のURLから。
    • https://akizukidenshi.com/catalog/g/g112815

ケーブル

太さ芯数長さ販売会社rogy備品URL
AWG2480.8m千石https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=85VJ-A4JW
AWG201 (赤)適当千石https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-5G84
AWG201 (黒)適当千石https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-5G84

その他

部品個数販売会社rogy備品URL
電池ボックス (単三3本直列)2秋月Xhttps://akizukidenshi.com/catalog/g/g102666/
電池スナップ2秋月Ohttps://akizukidenshi.com/catalog/g/g100207/
ジョイスティック (5p)1AmazonXhttps://amzn.asia/d/djAPbrx
可変抵抗器1AmazonXhttps://amzn.asia/d/1BCF9bV
ジャイロ・加速度センサ MPU-60501AmazonXhttps://amzn.asia/d/e9eGHTj
マイコンボード NUCLEO F303K81秋月Xhttps://akizukidenshi.com/catalog/g/g110172/
MOSFET 2SK4017(Q)2秋月Ohttps://akizukidenshi.com/catalog/g/g107597/
DCモータ FA-130RA-22702秋月Xhttps://akizukidenshi.com/catalog/g/g106437/
サーボモータ SG-902秋月Xhttps://akizukidenshi.com/catalog/g/g108761/
メイン回路基板1X
コントローラ回路基板1X

圧着時のハウジングの向き 一覧

部品ハウジングのツメを上向きにして、付け根側から見た向きで、左から順に見た線の色の順番
サーボモータ黄 > 赤 > 茶
DCモータ赤 > 黒 と 黒 > 赤 を1つずつ
電池ボックス赤 > 黒
電池電池スナップ赤 > 黒

ハウジングのツメ ≠ コンタクトのツメ

はんだ付け

  • DCモータ
    • 向きがそろっていればなんでもよい。

NUCLEO F303K8の0Ω抵抗を外す

一部のピンが0Ω抵抗で短絡されているので、これを外す必要がある。

その他

対面制作会で使うもの

  • はんだごて
  • こて台
  • スポンジ
  • はんだ
  • はんだ吸い取り線
  • ニッパ
  • ラジオペンチ
  • マスキングテープ
  • 適当な紙 (下敷き)

トラブルシューティング

制御

基本的な開発フロー

GiHubフローを前提とします。

プログラム開発

配布するプログラムはPlatformIOを利用して開発されています。特にmbedフレームワークを利用し、フォーマッターにclang-format, リンターにclang-tidyを使用しています。

リンターは将来変わる可能性があります。(#122)

使用するエディターはVSCodeを想定していますが、CLionなどPlatformIOが適切に動作する環境であれば特に問いません。

ドキュメント開発

このドキュメントはmdBookを利用してGitHub Pagesの内容が生成されています。mdBookの詳細な使用方法に関しては、mdBook Documentationを参照してください。

画像の使用に関して

ドキュメント内では画像を使用することができます。docs/assetsフォルダー内に使用したい画像ファイルを置き、ドキュメントのMarkdownファイルからその画像ファイルへの相対パスを用いて参照することができます。コミットb66c64aなどを記述例として参照してください。

SNS等に画像をアップロードする場合とは異なり、gitリポジトリでは Exif情報がそのままになっています。 exiftoolやImageMagickなどを用いて適切な処理を施したものを使用してください。

参照: exif情報をコマンド一発で削除する #exif - Qiita, ImageMagickでメタデータから不要な情報を削除する|e

Google Driveの画像を使用する場合

Google Driveに保存されている画像ファイルはGoogle Driveの画像をMarkdownで直接表示したい時に読む記事などで示される方法に従って参照することができます。しかしこの方法ではGitHub Pages上で画像が表示されない(#99)ため、一工夫加える必要があります。具体的には、以下の手順に従ってください。

1: 使用したい画像のリンクと名前を控える

ここでは画像のリンクをhttps://drive.google.com/uc?export=view&id=xxx, Google Driveに保存してある画像の名前をxxx.jpegとします。

2: 控えた情報をスクリプトに追記する

docs/scripts/fetch-gdrive-assets.bashimage_table='とある行の次などに以下の内容を追記します。

image_magic='
...
https://drive.google.com/uc?export=view&id=xxx xxx.jpeg
...
'

適当な場所に追記してください。

3: Markdownで画像を参照する

先ほどbashファイルに追記したことで、mdBookのビルド時に目的の画像がdocs/gdrive/xxx.jpegに配置されるようになります。Markdownファイルでは相対パスで、以下のように記述することで画像を参照可能です。

![](./gdrive/xxx.jpeg)

こちらもSNS等とは異なり、Google DriveはExif情報を編集しません。

GitHub Actions

GitHub Actionsを用いて自動的にプログラムのチェックなどが入るようになっています。GitHub ActionsについてはGitHub Docsを参照してください。

プライベートリポジトリではGitHub Actionsを使いすぎると課金が発生します。詳しくはGitHub Actions の支払いを管理する - GitHub Docs

GitHub Actionsの設定は.github/workflows以下に保存されています。

main.yml

このワークフローファイル内のジョブは以下のタイミングで実行されます。

  • mainブランチへのPull Request作成・更新時
  • mainブランチの更新時

どちらの場合も、以下の内容が確認されます。

  • PlatformIOのビルドが成功すること
  • clang-formatによるプログラムのフォーマット確認 (format)
  • clang-tidyによるプログラムの簡易なバグチェック (lint)
  • mdBookのビルドが成功すること

特にPull Requestの場合は、変更内容に応じてそれぞれチェックが省略されます。詳しくはmain.ymlのchangesジョブ、およびdorny/paths-filterを確認してください。逆に、変更に対して入ってほしいチェックが行われない場合はここを見てください。

release.yml

TODO (#76)

リリース

TODO (#76)

依存関係管理

プログラムを開発する上で様々なツール、ライブラリが必要になります。一般的にそれらは「依存関係」と呼ばれます。ここではこのリポジトリを管理する上で使用されている依存関係について説明し、それらの更新方法について説明します。

GitHub Actions

GitHub Actionsの依存関係はDependabotで管理されています。依存関係何か更新があればDependabotが自動でPRを作成してくれます。Dependabotの設定は.github/dependabot.ymlに書いてあります。

Dependabotについてより詳しくは、Dependabot を使う - GitHub Docsを参照してください。

mdBook

GitHub Actions内で使用されるmdBookのバージョンは自動で更新されません。main.ymlおよびrelease.ymlにMDBOOK_VERSION: vX.Y.Zのような記述があります。mdBookのバージョン一覧はReleases · rust-lang/mdBookにリストされているので、そこを見つつバージョンを更新してください。バージョンの更新は1年に1度ほどで問題ないです。

PlatformIO

PlatformIOに関連する依存関係は2種類あります: PlatformIOそれ自身と、PlatformIO内で使用するツール群です。

PlatformIO自身

特に明記せず、最新版のPlatformIOを前提とします。GitHub Actions内でも最新版のPlatformIOを使用するように設定されています。PlatformIO関連で何か不具合があればバージョンの問題を考慮してみてください。

PlatformIO内の依存関係

これらはPlatformIOの設定ファイルplatformio.iniに記述されています。具体的な記述については以下を参照してください。

特にGCCコンパイラのバージョンはplatformio/toolchain-gccarmnoneeabiで明記されているため、定期的(こちらも1年おきが目安)に更新する必要があります。

Nix, direnv