コンテンツにスキップ

ハードウェアセットアップ

ライトローバーにカメラを取り付けます。以下の手順で作業を行ってください。

カメラのマウントをライトローバー本体にM3ネジとナットで固定します。

image image

Raspberry Piの所定の位置(画像赤丸)にカメラのケーブルを差し込みます。

image

コネクタのロックを引き上げます。

image

カメラのケーブルをコネクタが見えている側がRaspberry PiのHDMI端子側になるように差し込みます。
この時、しっかり奥まで差し込みましょう。

image image

ケーブルを差し込んだら先ほど外したコネクタのロックを下ろします。

image

以上でハードウェアのセットアップは完了です。

  1. 画面左上のメニューから、設定->Raspberry Piの設定を選択します。
  2. タブからインターフェイスを選択し、カメラの項目の有効にチェックを入れ、OKを選択します。

カメラで色認識をしよう

赤い物体を認識し、それを追跡するサンプルプログラムを用意しました。

ライブラリのセットアップ

ROSでカメラを利用するために必要な各種ライブラリをセットアップしていきます。
なおここからの操作にはインターネット接続が必要です。 まずは次のコマンドを実行します。

sudo apt install libv4l-dev v4l-utils qv4l2


次に各種パッケージをインストールします。
バイナリでは配布されていないため、ソースからビルドします。

ターミナルで以下のコマンドを入力し、image-commonパッケージをインストールします。

sudo apt install ros-noetic-image-common 


次にcv-cameraパッケージインストールします。

sudo apt install ros-noetic-cv-camera


cv-bridgeパッケージをインストールします。

sudo apt install ros-noetic-vision-opencv


最後にimage-pipelineパッケージをインストールします。

sudo apt install ros-noetic-image-pipeline


サンプルプログラムのインストール

ライトローバーをカメラを使用して動作させるためのサンプルプログラムを準備します。
ターミナルで以下のコマンドを入力し、catkin_wsへ移動します。

cd ~/catkin_ws/src


以下のコマンドでGithubからlightrover_cam_optionパッケージをクローンします。 この際、 ブランチはnoeticを指定します。

git clone -b noetic https://github.com/vstoneofficial/lightrover_cam_option.git

ビルドします。

catkin build

続いて、導入したpythonスクリプトに以下のコマンドで実行権限を付けます。

sudo chmod +x ~/catkin_ws/src/lightrover_cam_option/scripts/*.py

サンプルプログラムの実行

新しいターミナルを開き、次のコマンドでサンプルプログラムを実行しましょう。

roslaunch lightrover_cam_option rover_cam.launch


サンプルプログラムを実行すると、画面にカメラの画像が表示されます。
赤い物体がカメラの画像内に表示されると、その部分が赤枠で囲まれ、
それに追従するようにライトローバーが動作します。

image

サンプルプログラムを変更することで、別の色の物体を追跡することなども可能になります。
また挙動が遅い場合は、画像を表示する処理を停止することで改善されることがあります。
以下の手順で「color_detect.py」を編集してください。
以下のコマンドでファイルを開く。

gedit ~/catkin_ws/src/lightrover_cam_option/scripts/color_detect.py

次のカ所を見つけてください。

        #検出範囲に赤枠を描写
        cv2.rectangle(image, tuple(rect[0:2]), tuple(rect[0:2] + rect[2:4]), (0, 0, 255), thickness=2)
        cv2.imshow('image',image)

この部分を以下のように編集します。

        #検出範囲に赤枠を描写
        cv2.rectangle(image, tuple(rect[0:2]), tuple(rect[0:2] + rect[2:4]), (0, 0, 255), thickness=2)
        #cv2.imshow('image',image)

以上で画像の表示処理を停止することができます。