白線に沿って走る

「白い線」をカメラの中からみつけて、その位置が分かるブロックがあります。
ちょうど前までのレッスンで顔の位置を取得していたのと同じように白い線を認識できます。

今回は白い線に沿って走らせてみましょう。

白線の位置

白線の位置はAIにある「カメラに写った白いラインの位置」で取得できます。

顔の位置と同じで、-100から100までで位置を取得できます。

ブロックプログラム

基本的には人を追いかけるのプログラムと同じです。
少し違うのは、人の位置じゃなく、白線の位置になっているところ。
そして、モーターの出力が弱いほうが30にしてあるところです。

白線を見失わないように調整する必要があります。グネグネしているほど、急いで回らないと見失ってしまいます。

<!-- Block Program Example -->
<xml xmlns="http://www.w3.org/1999/xhtml">
  <variables>
    <variable type="obniz" id="X2:3=S(hsdv0mk{aavHW">obniz</variable>
    <variable type="airobotkit" id="x5_(6Sj8ykok1G=4ws}O">airobotkit</variable>
    <variable type="iothomekit" id="{t=B;bK+lHDp`^B,O9OX">iothomekit</variable>
    <variable type="UIButton" id="=mh1dRZ;WXMxc3Q:^$w1">button</variable>
    <variable type="UIButton" id="GJ,FQU?jj;U(,8y`]^q}">flagdown</variable>
    <variable type="UIButton" id="~X]hrm!ACLq@FjVmG0n8">play</variable>
    <variable type="UIButton" id="?+XKkB8,{?`bNWj3sNen">playbutton</variable>
    <variable type="UIButton" id="Qw*KldWxlVyQ]Z:b-sJf">sendbutton</variable>
    <variable type="UILabel" id="oJ2V]Wt84*1`R~b~Xxq5">label</variable>
  </variables>
  <block type="obniz_connect" id="Ng@9G*P|+m|w6FNkmBl?" x="-243" y="-81">
    <field name="obniz" id="X2:3=S(hsdv0mk{aavHW" variabletype="obniz">obniz</field>
    <value name="obniz_id">
      <shadow type="text" id="9W6|aL^+)i2XTZl9;,,G">
        <field name="TEXT">8075-4879</field>
      </shadow>
    </value>
    <next>
      <block type="obniz_parts_airobotkit_wired" id="`,zkv?mr%3y1tRTRDjsq">
        <field name="obniz" id="X2:3=S(hsdv0mk{aavHW" variabletype="obniz">obniz</field>
        <field name="AIRobotKit" id="x5_(6Sj8ykok1G=4ws}O" variabletype="airobotkit">airobotkit</field>
        <next>
          <block type="obniz_ai_camera_start" id="3h/(S]zP^do,c2g]a$7P">
            <next>
              <block type="obniz_util_repeat" id="1$tH?~(t~ifxw/jfbcV#">
                <statement name="DO">
                  <block type="controls_if" id="mn-e{jnakP+v~iynz#Js">
                    <mutation elseif="1" else="1"></mutation>
                    <value name="IF0">
                      <shadow type="logic_boolean" id="P?)F6!,U`,=)p-d2o?3Q">
                        <field name="BOOL">TRUE</field>
                      </shadow>
                      <block type="logic_compare" id="*R!d$=TajS/RzlYu)_`%">
                        <field name="OP">GT</field>
                        <value name="A">
                          <shadow type="math_number" id="!R{ax,Tpj2HIBA.em+nj">
                            <field name="NUM">10</field>
                          </shadow>
                          <block type="obniz_ai_line" id=";~@}0)x(^7*4_NlUH.}6"></block>
                        </value>
                        <value name="B">
                          <shadow type="math_number" id="|EY/AELEU{tlJ}^ZNa1P">
                            <field name="NUM">50</field>
                          </shadow>
                        </value>
                      </block>
                    </value>
                    <statement name="DO0">
                      <block type="obniz_parts_airobotkit_motor" id="unRP3LJn-JaB*dk5w+~s">
                        <field name="AIRobotKit" id="x5_(6Sj8ykok1G=4ws}O" variabletype="airobotkit">airobotkit</field>
                        <value name="leftpower">
                          <shadow type="math_number" id="ZfNBA$Y-]iCAR{0J=D[^">
                            <field name="NUM">60</field>
                          </shadow>
                        </value>
                        <value name="rightpower">
                          <shadow type="math_number" id="w_$R!VGb_yLu^olp$+0F">
                            <field name="NUM">30</field>
                          </shadow>
                        </value>
                      </block>
                    </statement>
                    <value name="IF1">
                      <block type="logic_compare" id="5vJq@~tXiqHyCn.{PJ9C">
                        <field name="OP">LT</field>
                        <value name="A">
                          <shadow type="math_number" id="!R{ax,Tpj2HIBA.em+nj">
                            <field name="NUM">10</field>
                          </shadow>
                          <block type="obniz_ai_line" id="T{FR@6#7~woa5mYNIccV"></block>
                        </value>
                        <value name="B">
                          <shadow type="math_number" id="Ajp!NLDj/8!Md-1n(rNL">
                            <field name="NUM">-50</field>
                          </shadow>
                        </value>
                      </block>
                    </value>
                    <statement name="DO1">
                      <block type="obniz_parts_airobotkit_motor" id="fo_g|l[`(M[C|Q*C$9[O">
                        <field name="AIRobotKit" id="x5_(6Sj8ykok1G=4ws}O" variabletype="airobotkit">airobotkit</field>
                        <value name="leftpower">
                          <shadow type="math_number" id="z+MA1LR#5u,D5DxIEXcz">
                            <field name="NUM">30</field>
                          </shadow>
                        </value>
                        <value name="rightpower">
                          <shadow type="math_number" id="u}g:yFvvkT:.$*5ipM*J">
                            <field name="NUM">60</field>
                          </shadow>
                        </value>
                      </block>
                    </statement>
                    <statement name="ELSE">
                      <block type="obniz_parts_airobotkit_motor" id="B9g*]S8*fO=fDoIjEQcq">
                        <field name="AIRobotKit" id="x5_(6Sj8ykok1G=4ws}O" variabletype="airobotkit">airobotkit</field>
                        <value name="leftpower">
                          <shadow type="math_number" id="$-?+^#qm23I;bh:S,{!P">
                            <field name="NUM">60</field>
                          </shadow>
                        </value>
                        <value name="rightpower">
                          <shadow type="math_number" id="R;w9;Tk(L`3M^:}4_TX9">
                            <field name="NUM">60</field>
                          </shadow>
                        </value>
                      </block>
                    </statement>
                  </block>
                </statement>
              </block>
            </next>
          </block>
        </next>
      </block>
    </next>
  </block>
</xml>

動かしてみましょう。

あまり明るい色じゃない場所にビニールテープなどで白い線を貼るとそれに沿って走ると思います。



Next : IFTTT/Google Home Integration

You will Get in Few Days

Circuit for Starter “obniz Board” is available on Amazon and other online stores.
You can get it at below

Our products and resellers

Forum

Visit our developer’s forum to discuss and discover technologies.

Forum

Contact

Feel free to contact out support and technical team.

Contact us