札幌日大中高一貫ロボット部 「非公式」ブログ

札幌日大中高一貫ロボット部の「非公式」ブログです!

活動報告12/10,12/13

こんにちは。広報担当です。
12/10と12/13の活動の報告をします。

活動内容

この二日間の活動内容も、いつも通りロボットの製作をしていました。
中学生は土曜日に学校の合唱コンみたいなのがあるらしく、その練習のためかそこそこ人数が少なかったです。
まあいつもサボってるやつはサボってるんですけどね()

中間報告会に向けて

12/17には中間報告会が控えています。全チームのロボットのコンセプトや進捗の発表や、技術や意見交換など、有意義に使えればいいなと思っています。
以上で報告を終わります。

活動報告12/6(金)

お久しぶりです。広報担当の者です。
半年以上ブログの更新をサボってすみませんでした…
今回は、12/6(金)の活動内容を報告します。

活動内容
ロボカップジュニア北海道大会は2月上旬、スカベンジャーの大会は1月中旬と、全チームとも大会が近づいてきました。
なので、全チーム大会に向けてロボット制作も最終段階に入ってきました。
まあサボってるチームもあるんですけどね…
また、12/17日には部活内での中間報告会というものを実施しようと考えています。
部活内での技術や意見交換ができたらいいなぁと思っています。
以上で報告を終わります。

今後の活動について

こんにちは!

新年度がはじまり、はや一ヶ月が経ちました

皆さんは、もう新生活にも慣れてきたでしょうか?このロボット部にも今年は20人近い新入生が入部してくれました。これからどのような活躍をしてくれるか、楽しみです。

 これからのロボット部

 さて、今回の記事ではロボット部の活動をもう少し掘り下げてお話したいと思います。先日は活動内容、出場している大会の概要などをお話しましたが、それとは別に本部活ではオープンキャンパスでのロボット授業の企画、運営も行っています。内容はこれから考えますが、例年この授業ではダイセン電子工業の「e-Gadget」というロボットキットを使用しています。このロボットには、タッチセンサー、ラインセンサー、赤外線センサーがついていて、基本的なプログラムを経て、最終的にロボット同士のサッカーをさせることを目標としています。まだ日程は決まっていませんが、小学生の方で興味のある方がいれば是非来て下さい!お待ちしています!

興味のある方はこちら

f:id:snjrc:20190512225315p:plain

 ロボットプログラミングキット 「e-Gadget」





 

 

 

 

 

 

 

 

ちょっとしたPythonコード

こんにちは。ONCです。
この前の、全方位ミラーの3Dモデルを作った記事で、gnuplotで出した座標をOpenSCADに入力するのにとても手間取った、ということを書いたかと思います。
そこで今回は、ちょっとしたPythonコードを書くことで面倒くさい作業を自動化しました。私は、Pythonを書くのは初めてだったのでちょうど良い練習になりました。

取り敢えず、コードを乗っけます。

import math

r = float(input("set Hyperbola parameter : radius(mm) >"))
theta = float(input("set Hyperbola parameter : angle of view(degrees) >"))

a = (r/(2*math.tan(math.radians(theta/2))))*(r/(2*math.tan(math.radians(theta/2))))/(1+((math.tan(math.radians(45-(theta/4))))/(2*math.tan(math.radians(theta/2)))))
b = (r/(2*math.tan(math.radians(theta/2))))*(r/(2*math.tan(math.radians(theta/2)))) - a

for step in range(101):
	
	x = step * r * 0.01
	y = math.sqrt((b/a)*(x*x)+b)
	print('[%f,%f],' %(x,y))

Pythonなので、環境さえあればおそらくどのOSでも動くかと思います。
実行すると最初に、作りたいミラーの半径の設定が出てきます。アクリルパイプなどの直径を打ち込むことにあるでしょう。その次に、対象となるカメラの画角を入力するように求められます。これはPixyの場合は、47°になります。
両方とも入力してエンターを押すと、下の画像のように、座標がズラズラと出てきます。
f:id:snjrc:20190727090842p:plain
前はgnuplotで双曲線の関数を入力し、座標をテキストファイルに出力してそれをいちいち打ち込んでいましたが、この座標の出力のされ方であれば、
OpenSCADにx座標とy座標を打ち込まなくても済みます。これで、双曲線関数を求める面倒くさい計算からも開放されますし、座標を入力することも省略できます。
ただ注意しないといけないのは、最後の座標にもコンマがついているため、そこだけ消さないといけません。

3Dモデルの作り方自体は、前回の記事でOpenSCADの使い方を紹介しているので、それを参考にしてくれると良いです。

活動報告 5月14日(火)

こんにちは!

広報担当の者です。

5月14日(火)に行われたGW開け初、そして新入部員を交えて初となる活動が行われました。

今回は、その活動報告をさせていただきます。

 

活動内容

 全体としての動き

 午後四時から、新入部員24名を交えて改めて部全体の"最初で最後"の顔合わせをしました。最初に、部長から部としての目標などを説明し、次に高2の先輩から、部活というコミュニティを大事にしてほしいという旨のお話をしてもらいました。

その後、新入部員には自分の出場希望競技ごとにわかれてもらい、それぞれの競技の担当の先輩などからの話を聞きました。

 話した内容

 僕はサッカー担当なので、サッカーを希望してきた後輩と話した内容を少し書かせていただきます。

 まず最初に、緊張を解こうと思い軽く自己紹介をしました。サッカーを希望してきた新入部員は5名と、多くも少なくもない人数だったので、自分的には結構話しやすかったです。 

 その後はサッカーの具体的なルールやロボットを作る時に意識してもらいたい点、次回の部活から始めるプログラム練習に向けて軽いガイダンスや雑談などをしました。

皆やる気に満ちあふれていて今後に期待です(笑)

 

最後に

 次回からの活動では各競技ごとに教育を施していくつもりです(夏休み前まで)

その後は、本格的にロボット製作を開始してもらうので、新入部員の皆には計画的に頑張ってもらいたいです。

 

全方位ミラーの3Dモデルを作る 後編

こんにちは。ONCです。今回の記事は、前回の続きとなります。

この記事では、前回までの手順で求めた双曲線の式から、3Dモデルを作る手順について書いていきます。

3Dモデルの作成

前回までの手順で、y=\sqrt{\dfrac{b^2}{a^2}*x^2 + b^2} (a,bは実際には実数)のような式が求まっているという前提で話を進めていきます。

 

3Dモデルを制作する大体の手順は、以下の通りです。

  1. 求めた式から、50個程度、曲線上の座標を求めます。
  2. 求めた座標を、CADソフトにプロットします。
  3. プロットした点を直線で繋ぎ、双曲線を近似します。
  4. CADソフトで、出来上がった図形を回転押出しします。

 

ちなみに、私はLinux(Mint)ユーザーなので、使うソフトはすべてオープンソースのソフトです。

曲線上の座標を出力するソフトとして、今回使うソフトは、「gnuplot」というソフトです。

LinuxWindows,Mac OSに対応しています。

また、2〜4の手順で使うCADソフトは、「OpenSCAD」という、少し変わったソフトです。

このソフトは、コードを書くことで3Dモデルを作っていくという、プログラマブルなものです。

 

ここからは、もうすでにPCなどにこれらのソフトが入っているという前提で話していきます。 

では、さっきの手順の通り進めて行きましょう。

 

gnulotを用いて曲線をプロットする

まず、gnuplotを立ち上げます。

f:id:snjrc:20190505013346p:plain  

ほんの少し使い方について説明すると、

plot 〜 これで、二次元のグラフをプロットできます。

splot 〜 これで、三次元のグラフをプロットできます。

set xrange[min:Max] これで、x軸の範囲を設定できます。

set yrange[min:Max] これで、y軸の範囲を設定できます。

replot これで、直前にプロットしたグラフを再度プロットすることができます。

 

では実際に、前回までで作った式をプロットします。

注意する点は、x^2などの累乗は、"x**2"という風になります。また、\sqrt{x}などは、"sqrt(x)"という風に表します。今回は、a,bは適当に設定してプロットしてみます。

f:id:snjrc:20190505014621p:plain

f:id:snjrc:20190505014936p:plain

 

次に、ミラーの半径から、x軸の範囲を設定します。今回は適当に半径=20と設定します、つまりx軸の範囲は[−20、20]となります。gnuplotにて、範囲を設定するコマンドを打ちます。

f:id:snjrc:20190505122358p:plain

"replot"コマンドで、再び同じ曲線をプロットします。

f:id:snjrc:20190505123252p:plain

ちゃんと、x軸の範囲が-20から20になっていることが分かると思います。

 

次にこの曲線状の座標を、gnuplotを用いてテキストファイルに出力します。

まず、"set table hoge.table"というコマンドで、出力するファイルを設定します。

f:id:snjrc:20190505123627p:plain

今回は、"mirror.table"という名前をつけました。

この状態で"replot"コマンドを実行すると、曲線の座標の情報が、設定したファイルに書き込まれます。

f:id:snjrc:20190505124028p:plain

では、どのような感じで出力されたのか見てみましょう。

f:id:snjrc:20190505124200p:plain

このような形で、x座標とy座標が100個出力されていることがわかります。

試しに、この座標の点をプロットしてみると、(plot "mirror.table")

f:id:snjrc:20190505163541p:plain

このように点がプロットされていますね。


OpenSCADに座標のデータを取り込む 

次に、この座標の情報をOpenSCADに取り込みます。

今回、最終的にはCADソフトを使って回転押し出しをするため、プロットした座標の中から、

xが-20〜0、または0〜20までの範囲どちらかの情報だけで十分です。

 

つまり、こんな感じのグラフ:

f:id:snjrc:20190505124837p:plain

 

そのため、今回は、xの範囲が0〜20 の部分の座標だけ抜き出しました。

 では、実際にこの情報を、CADに取り込みます。

 

OpenSCADを起動するとこんな画面になります。

f:id:snjrc:20190505125236p:plain

試しに、球体を表示させてみましょう。

f:id:snjrc:20190505170845p:plain

たった二行だけで、このような3Dモデルを作れてしまうため、とても便利です。

 

早速、さっきの座標をプロットします。

点をプロットしてすべて直線でつなぎ、平面図形を作る時に書くコードは、

polygon(points=[ {x_1,y_1},{x_2,y_2} 〜{x_n,y_n} ]);

のようなコードです。((x_n,y_n)には、書きたい図形の頂点の座標が入ります)

f:id:snjrc:20190505174631p:plain

はい。座標は全部手打ちなので、めちゃくちゃ大変です。

だれかgnuplotの出力ファイルから、自動的に座標を入力してくれるPythonコードなんかを書いてくれる人募集してます。

ちなみにファイルの中の座標は、x=0のときのものがあるとは限らないので、そこは自分で計算して打ち込みます。

 

これで、ほとんどすべての手順が終わりました。あとは、この平面図形を回転押し出しするだけです。

 

3Dモデルを完成させる

最後に、回転押し出しを使って3Dモデルにします。
OpenSCADで回転押し出しをするコードは以下の通りです。

rotate_extrude($fn=?)

この?の部分の数値は、大きければ大きいほど細かく押し出しがされるため、滑らかになります。

最初に、30でやってみましょう。

f:id:snjrc:20190505180409p:plain

結構荒いですね。では、次に1000でやってみます。あまりにも値を大きくし過ぎると、出力するSTLファイルのサイズがやばいくらいでかくなるので注意してください。

f:id:snjrc:20190505180643p:plain

かなり細かいので、ほとんどつなぎ目が見えませんね。では最後に、この3DモデルをSTLファイルに変換します。

"Editor"にある、"STL"と書かれたアイコンをクリックし、好きな名前で保存します。

これで、このSTLファイルを使って実際の形状を出力できるようになりましたね。

 

あとは3Dプリンターなどで印刷して、ヒートプレスなどの方法でミラーを作ることができるでしょう。

 

これで今回の記事は終わりです。ここで紹介した、「gnuplot」や、「OpenSCAD」は、これ以外にも様々な活用する方法があると思います。皆さんぜひ活用してみてください。 

全方位ミラーの3Dモデルを作る 前編

 始めまして。SNJRCのメンバーの、ONCと言います。

 現在、ロボカップジュニアの、サッカーオープンで全国大会出場を目指して活動している者です。

 この記事では、全方位ミラーを制作するために必要な3Dモデルを、これまでとは別の方法で作る方法を紹介する、予定でしたが、記事が長くなりすぎたので2つに分けることにしました。

 

初めに

 皆さんご存知の通り、2017年からロボカップジュニアのルールが一部変更され、オープンリーグで使用されるボールが赤外線発光ボールからパッシブボール(オレンジ色のボール)に変わりました。

 そのため、オープンリーグに出場するロボットにはカメラなどを用いて画像処理などを行う機能が必須となりました。

 

 また、新しくなったルールにはカメラについての制約事項があります、

 

8.2.2 制限事項
1 台のロボットには 1 つのカメラしか搭載することができません。市販のオムニディレクショナルカメラやレンズを使用することはできません。選手が自作したオムニディレクショナルカメラおよびレンズのみ使用可能です。つまり、選手達が主となり製作したパーツによって構成されている必要があります。ロボットにそれらを使用しているチームは、プレゼンテーション及びインタビューにおいて、その製作過程を説明しなければなりません。これらの規則において、「オムニディレクショナル」とは、水平方向に140 度以上の視野、または垂直方向に 80 度以上の視野、またはその両方を持つものと定義されます。
(これらの値は、人間の目の視野角をもとに設定されています。 )

 

 オープンリーグの競技で優位に立つには、広い視野角が重要です。しかしそれを実現するには自分たちで全方位ミラーなどを作る必要があるということです。

 

 全方位ミラーの設計及び制作方法は、すでにいくつかのブログなどで紹介されていますが、この記事では少し違うやり方で3Dデータを作る方法を紹介します。

 

全方位ミラーの概形

 

 今回、ミラーの形は双曲線を使います。双曲線のミラーを用いると、カメラから見える画像の中心からの距離と、実際の距離が比例するため、画像処理を行いやすいそうです。

 

 ミラーに使用する双曲線の式を求める方法は、他の方も紹介していましたので、ここでは簡単に書きます。

 

 双曲線関数は一般に、

\dfrac{x^2}{a^2} - \dfrac{y^2}{b^2}=  1 or -1 (a,b定数) 

という式で表されます。

グラフの形はこのようになります。(= 1の場合) 

f:id:snjrc:20190504223126p:plain 


 今回、ミラーを設計するのに使うのは、 = -1の方の式になります。次に、双曲線の一般式を y = の式に直します。

  y = \pm\sqrt{\dfrac{b^2}{a^2}*x^2 + b^2}

 このグラフは、以下のようになります。

f:id:snjrc:20190504230338p:plain 

 今回、ミラーを設計する上で、マイナス側のグラフはいらないので、変形した式の±を消して、+のみにします。

 

 目的の双曲線の式を求めるには、変形した式の未定数、a,bをそれぞれ求めれば良いわけです。

そのために、全方位ミラーにいくつかのパラメーターを設定して、そこからa,bを含む二本の式を立てて連立してあげれば良いです。

 今回設定するパラメーターは、ミラーの焦点距離(d)とミラーの半径(c)、あとカメラの画角(θ)です。参考までに、(めっちゃ見づらい)図を載せておきます。

f:id:snjrc:20190505000010p:plain

この図からこのような条件を設定します:

  1. カメラの画角(Angle of view)(θ)
  2. ミラーの最外縁での反射光は水平に入射する
  3. ミラーの半径(c)

この中の、1.カメラの画角、3.ミラーの半径から、焦点距離(d)が求まります。

d=\dfrac{c}{2*\tan\frac{\theta}{2}}  ……①

 

続いて、さっきの全方位ミラーの図より、ミラーの最外縁の接線と光、画角の関係がわかります。それらを使うと、最外縁(図の半径cと焦点距離dから、座標は(c,d))での接線の傾きが、\tanを用いることでわかります。

双曲線において、(x_0,y_0)での接線の傾きは、

dy/dx=\dfrac{b^2}{a^2}*\dfrac{x_0}{y_0} ……②

x_0,y_0の値は最外縁の座標ですね。この式に、\tanで求めた傾きをイコールで結びます。

 

①、②を連立すると未定数a,bが求まり、双曲線の式が求まります。

 

今回の記事はここまでです。次の記事で、 求めた双曲線の式をどのように3Dモデルにしていくのか紹介します。