ビジョン#

導入#

VEX EXP用ビジョンセンサーは、カラーシグネチャとカラーコードを検知・追跡します。これにより、ビジョンセンサーは周囲の状況を分析し、検知した視覚データに基づいて反応することができます。

このページでは、ビジョンセンサー、カラーシグネチャ、カラーコードの名前として、それぞれ vision_1、 RED_BOX、 BOX_CODE という例を使用しています。必要に応じて、ご自身で設定した名前に置き換えてください。

以下にすべてのメソッドの一覧を示します。

ゲッター – ビジョンセンサーからデータを取得します。

  • take_snapshot – 特定のカラーシグネチャまたはカラーコードのデータをキャプチャします。

  • largest_object – スナップショットから最大のオブジェクトを選択します。

  • installed – ビジョンセンサーが EXP ブレインに接続されているかどうか。

プロパティ – take_snapshot から返されるオブジェクトデータ。

  • .exists – 現在の検出でオブジェクトが存在するかどうか。

  • .width – 検出されたオブジェクトの幅。

  • .height – 検出されたオブジェクトの高さ。

  • .centerX – オブジェクトの中心の X 座標。

  • .centerY – オブジェクトの中心の Y 座標。

  • .angle – カラーコードの向き。

  • .originX – オブジェクトの左上隅の X 座標。

  • .originY – オブジェクトの左上隅の Y 座標。

コンストラクター – ビジョンセンサーとそのシグネチャを手動で初期化および構成します。

  • Vision – ビジョンセンサーを作成します。

  • Signature – カラー署名を作成します。

  • Code – カラーコードを作成します。

ゲッター#

take_snapshot#

take_snapshot は、ビジョンセンサーフレームからのデータを単一のシグネチャ(センサーが認識できるものの保存された説明、構成済みのカラーシグネチャやカラーコードなど)にフィルタリングし、タプルを返します。

この方法で使用する前に、カラーシグネチャとカラーコードをVision Utilityで最初に設定する必要があります。

The tuple stores objects ordered from largest to smallest by width, starting at index 0. Each object’s properties can be accessed using its index. An empty tuple is returned if no matching objects are detected.

Usage:
vision_1.take_snapshot(SIGNATURE)

パラメータ

説明

SIGNATURE

指定されたシグネチャのデータのみを含むようにデータセットをフィルタリングします。使用可能なシグネチャは
のとおりです。0

  • カラーシグネチャまたはカラーコード - ビジョンセンサーの名前、アンダースコア2つ、カラーシグネチャまたはカラーコードの名前。例: vision_1__RED_BOX.

# Move forward if a red object is detected
while True:
    red_box = vision_1.take_snapshot(vision_1__RED_BOX)
    if red_box[0].exists:
        drivetrain.drive_for(FORWARD, 10, MM)
    wait(5, MSEC)

カラーシグネチャー#

カラーシグネチャとは、ビジョンセンサーが認識できる固有の色のことです。これらのシグネチャにより、センサーは色に基づいて物体を検出および追跡できます。カラーシグネチャが設定されると、センサーは視野内のその特定の色を持つ物体を識別できます。カラーシグネチャは、take_snapshot で使用され、色付き物体をリアルタイムで処理および検出します。

プロジェクトで設定済みのカラーシグネチャを使用するには、その名前はビジョンセンサーの名前、アンダースコア2つ、そしてカラーシグネチャの名前の順である必要があります。例: vision_1__RED_BOX。

# Display if any objects match the RED_BOX signature
while True:
    brain.screen.set_cursor(1, 1)
    brain.screen.clear_row(1)
    # Change to any configured Color Signature
    red_box = vision_1.take_snapshot(vision_1__RED_BOX)
    if red_box[0].exists:
        brain.screen.print("Color signature detected!")
        wait(100, MSEC)

カラーコード#

カラーコードとは、特定の順序で並べられた色の組み合わせからなる構造化されたパターンです。これらのコードにより、ビジョンセンサーはあらかじめ定義された色のパターンを認識できます。カラーコードは、複雑な物体を識別したり、自律航行のための固有のマーカーを作成したりするのに役立ちます。

プロジェクトで設定済みのカラーコードを使用するには、その名前はビジョンセンサーの名前、アンダースコア2つ、そしてカラーコードの名前の順でなければなりません。例: vision_1__BOX_CODE。

# Display if any objects match the BOX_CODE code
while True:
    brain.screen.set_cursor(1, 1)
    brain.screen.clear_row(1)
    # Change to any configured Color Code
    box_code = vision_1.take_snapshot(vision_1__BOX_CODE)
    if box_code[0].exists:
        brain.screen.print("Color code detected!")
        wait(100, MSEC)

largest_object#

largest_object は、take_snapshot の最新の使用から返されたタプルからデータを取得するために検出された最大のオブジェクトを取得します。

この方法を用いると、インデックスを指定せずにタプルから常に最大のオブジェクトを取得できます。

Usage:
vision_1.largest_object()

# Turn slowly until the largest object is centered in
# front of the Vision Sensor
drivetrain.set_turn_velocity(10, PERCENT)
drivetrain.turn(RIGHT)

while True:
    red_box = vision_1.take_snapshot(vision_1__RED_BOX)

    if red_box[0].exists:
        if 140 < vision_1.largest_object().centerX < 180: 
            drivetrain.stop()

    wait(10,MSEC)

installed#

installed 、ビジョンセンサーが現在 EXP Brain に接続されているかどうかを示すブール値を返します。

  • True – ビジョンセンサーはEXPブレインに接続されています。

  • False – ビジョンセンサーがEXPブレインに接続されていません。

Usage:
vision_1.installed()

パラメータ

説明

このメソッドにはパラメータがありません。

# Display a message if the Vision Sensor is connected
if vision_1.installed():
    brain.screen.print("Vision Sensor Installed!")

不動産#

take_snapshot を使用した後にタプルに格納される各オブジェクトには、8 つのプロパティが含まれます。

すべてのプロパティ値は、 take_snapshot が使用された時点における、ビジョンセンサーの視野内での検出されたオブジェクトの位置とサイズを表します。これらの値は、センサーの316×212ピクセルの解像度に基づいて、ピクセル単位で測定されます。

.exists#

.exists 、インデックスがタプル内に存在するかどうかを示すブール値を返します。

  • True - インデックスが存在します。

  • False - インデックスが存在しません。

# Check if at least one red object is detected
# You will receive an error if no objects are detected

while True:
    brain.screen.clear_screen()
    brain.screen.set_cursor(1, 1)
    red_objects = vision_1.take_snapshot(vision_1__RED_BOX)

    if red_objects[0].exists:
        brain.screen.print("At least 1")
            
    else:
        brain.screen.print("No red objects")

    wait(0.5, SECONDS)

.width#

.width 、検出されたオブジェクトの幅をピクセル単位で返します。これは 1 から 316 までの整数です。

# Move towards a blue object until its width is
# larger than 100 pixels
while True:
    blue_box = vision_1.take_snapshot(vision_1__BLUE_BOX)

    if blue_box[0].exists:
        if blue_box[0].width < 100:
            drivetrain.drive_for(FORWARD, 10, MM)
    else:
        drivetrain.stop()

    wait(50, MSEC)

.height#

.height 、検出されたオブジェクトの高さをピクセル単位で返します。これは 1 から 212 までの整数です。

# Move towards a blue object until its height is
# larger than 100 pixels
while True:
    blue_box = vision_1.take_snapshot(vision_1__BLUE_BOX)

    if blue_box[0].exists:
        if blue_box[0].height < 100:
            drivetrain.drive_for(FORWARD, 10, MM)
    else:
        drivetrain.stop()

    wait(50, MSEC)

.centerX#

.centerX 、検出されたオブジェクトの中心の x 座標をピクセル単位で返します。これは 0 から 316 までの整数です。

# Turn slowly until the largest blue object is centered
# in front of the Vision Sensor.
drivetrain.set_turn_velocity(10, PERCENT)
drivetrain.turn(RIGHT)

while True:
    blue_box = vision_1.take_snapshot(vision_1__BLUE_BOX)

    if blue_box[0].exists:
        if 140 < vision_1.largest_object().centerX < 180: 
            drivetrain.stop()

    wait(10,MSEC)

.centerY#

.centerY 、検出されたオブジェクトの中心の y 座標をピクセル単位で返します。これは 0 から 212 までの整数です。

# Move towards a blue object until its
# center y-coordinate is more than 140 pixels
while True:
    blue_box = vision_1.take_snapshot(vision_1__BLUE_BOX)

    if blue_box[0].exists:
        if blue_box[0].centerY < 140:
            drivetrain.drive(FORWARD)
    else:
        drivetrain.stop()

    wait(50, MSEC)

.angle#

.angle 、検出されたオブジェクトの向きを度数で返します。これは 0 から 359 までの整数です。

# Turn left or right depending on how a
# configured box code is rotated
while True: 
    box_code = vision_1.take_snapshot(vision_1__BOX_CODE)

    if box_code[0].exists: 
        if 70 < box_code[0].angle < 110:
            drivetrain.turn_for(RIGHT, 45, DEGREES)
            
        elif 250 < box_code[0].angle < 290:
            drivetrain.turn_for(LEFT, 45, DEGREES)
        
        else:
            drivetrain.stop()

    wait(50, MSEC)

.originX#

.originX 、検出されたオブジェクトのバウンディングボックスの左上隅の x 座標をピクセル単位で返します。これは 0 から 316 までの整数です。

# Display if a red object is to the
# left or the right
while True:
    brain.screen.clear_screen()
    brain.screen.set_cursor(1,1)
    
    red_box = vision_1.take_snapshot(vision_1__RED_BOX)
    
    if red_box[0].exists:
        if red_box[0].originX < 160:
            brain.screen.print("To the left!")
        else: 
            brain.screen.print("To the right!")

    wait(50, MSEC)

.originY#

.originY 、検出されたオブジェクトのバウンディングボックスの左上隅の y 座標をピクセル単位で返します。これは 0 から 212 までの整数です。

# Display if a red object is close or far
# from the robot
while True:
    brain.screen.clear_screen()
    brain.screen.set_cursor(1,1)
    
    red_box = vision_1.take_snapshot(vision_1__RED_BOX)

    if red_box[0].exists:
        if red_box[0].originY < 80:
            brain.screen.print("Far")
        else: 
            brain.screen.print("Close")

    wait(50, MSEC)

建設業者#

Constructors are used to manually create Vision, Signature, and Code objects, which are necessary for configuring the Vision Sensor outside of VEXcode.

Vision#

Vision はビジョンセンサーを作成します。

使用法

Vision(smartport, brightness, sigs)

パラメータ

説明

smartport

ビジョンセンサーが接続されているスマートポートは、 Ports.PORTx と表記されます。ここで、x はポート番号です。

brightness

オプション。ビジョンセンサーの輝度値(1~100)。

sigs

Optional. The name of one or more Color Signature or Color Code objects separated by commas (,).

# Create the Color Signatures
RED_BOX = Signature(1, 10121, 10757, 10439,-1657, -1223, -1440, 2.5, 1)
BLUE_BOX = Signature(2, -4443, -3373, -3908,6253, 7741, 6997, 2.5, 1)

# Create the Color Code
BOX_CODE = Code(RED_BOX, BLUE_BOX)

"""
Create a Vision Sensor with the following values:
- Port 1
- brightness: 80
- RED_BOX and BOX_CODE signatures
"""
vision_1 = Vision(Ports.PORT1, 80, RED_BOX, BOX_CODE)

Signature#

Signature はカラーシグネチャを作成します。ビジョンセンサーには、最大 7 種類の異なるカラーシグネチャを同時に保存できます。

使用法:

Signature(index, uMin, uMax, uMean, vMin, vMax, vMean, rgb, type)

パラメータ

説明

index

Signature オブジェクトのインデックス (1 ~ 7)。注: 同じインデックス番号で 2 つの Signature オブジェクトを作成すると、2 番目に作成されたオブジェクトが最初のオブジェクトを上書きします。

uMin

Vision Utilityにおける uMin の値。

uMax

Vision Utilityにおける uMax の最大値。

uMean

Vision Utilityにおける uMean の平均値。

vMin

Vision Utilityにおける vMin までのvMin値。

vMax

Vision UtilityにおけるvMaxの値は vMax。

vMean

Vision Utilityにおける vMean までの平均値。

rgb

Vision Utilityにおける rgb RGB値。

type

Vision Utilityでは、値は type 変化します。

カラーシグネチャを作成するための値を取得するには、ビジョンユーティリティを開きます。カラーシグネチャが設定されたら、構成ウィンドウからパラメータ値をコピーします。

"""
Create a Color Signature with the following values:
- index: 1
- uMin: 10121
- uMax: 10757
- uMean: 10439
- vMin: -1657
- vMax: -1223
- vMean: -1440
- rgb: 2.5
- type: 1
"""
RED_BOX = Signature(1, 10121, 10757, 10439,-1657, -1223, -1440,2.5, 1)

Code#

コードCode カラーコードを作成します。使用するには、少なくとも2つのカラーシグネチャが既に定義されている必要があります。ビジョンセンサーには、最大8つの異なるカラーコードを同時に保存できます。

使用法:

Code(sig1, sig2, sig3, sig4, sig5)

パラメータ

説明

sig1

以前に作成された カラーシグネチャ。

sig2

以前に作成された カラーシグネチャ。

sig3

オプション。以前に作成された カラーシグネチャ。

sig4

オプション。以前に作成された カラーシグネチャ。

sig5

オプション。以前に作成された カラーシグネチャ。

# Create the Color Signatures
RED_BOX = Signature(1, 10121, 10757, 10439,-1657, -1223, -1440, 2.5, 1)
BLUE_BOX = Signature(2, -4443, -3373, -3908,6253, 7741, 6997, 2.5, 1)

# Create a Color Code with the Color Signatures
BOX_CODE = Code(RED_BOX, BLUE_BOX)