【smabo第4回】smaboにカメラと超音波センサを取り付けてみよう

【smabo第4回】smaboにカメラと超音波センサを取り付けてみよう

image

前回: 【smabo第3回】smaboに腕を取り付けて制御してみよう

次回:【smabo第5回】smaboを移動ロボットにしてみよう

smaboトップページ: スマホが入るロボットの作り方【smabo】

お疲れ様です。秋並です。

今回は、

  • smaboにカメラと超音波センサを取り付けて制御する方法

について解説します。

image
image
image

smaboリポジトリはこちら

🔍
smaboリポジトリに新しいコード等を追加しているので、リポジトリを最新の状態に更新した状態で作業してください。
  • 更新手順(ラズパイ側で実行)
  • cd ~/smabo
    git pull origin main # リポジトリのmainブランチを最新に更新
    cp -r ~/smabo/smabo_pkgs ~/smabo_ws/src # ROS2ワークスペース内のパッケージを最新に
    cd ~/smabo_ws
    colcon build --symlink-install # ROS2ワークスペースを再ビルド

目次

今回使用する機材、パーツなど

🔍
「互換品多数あり」の商品に関しては、もっと安い商品があるので、品質とのバランスを考えて互換品の購入も検討してみてください

共通パーツ

パーツ名
商品url
スマートフォン Iphone MAXのような大きなサイズのスマホや、折り畳み式のような分厚いスマホは入らないので注意してください。 pixel7a(152.0mm×72.9mm×9.0mm) + カバー でぎりぎりちょうどくらいのサイズです。
-
Raspberry Pi
-
モバイルバッテリー サイズが大きいとsmaboに入らないので注意。 URLのAnker PowerCore Fusion 5000がちょうどいいくらいのサイズになります。
L字ケーブル モバイルバッテリーとラズパイを接続するために使用します。 smaboにラズパイを入れた状態だと、L字型のケーブルでないと収まらないので注意してください。
ブレッドボード(85mm×55mm) (サイズが大きいとsmaboに入らないので注意)
ジャンプワイヤー
単三×4 バッテリーボックス
充電式単三電池 × 4
(電池充電器)
3Dプリンタ

頭関連パーツ

パーツ名
商品url
SG90(互換品多数あり)
Raspberry Pi Camera V2(互換品多数あり)
M2×8mmネジ × 8
M2×10mmネジ × 2
同上
超音波センサ HY-SRF05(互換品多数あり)
M1.6ネジ(HY-SRF05用)

今回使用するソフトなど

ubuntu 22.04

ソフト名
url
ROS2 humble
🔍
今回は、Raspberry Pi上で作業を行います。

パーツを3Dプリンタで印刷しよう

smaboリポジトリに格納されている以下モデルを3Dプリンタで印刷してください。

🔍
3Dプリンタによる印刷については、こちらのページの「3Dプリンタで印刷してみよう」を参考にしてください。

パーツを取り付けよう

次に、印刷したパーツを取り付けます。

頭パーツ

  1. SG90をsmaboのbodyの内側から「M2×8mm」のネジで固定します。
  2. 内側からみた図
    内側からみた図
    外側からみた図
    外側からみた図
  1. head_stand_baseに「SG90に付属しているホーン」を「M2×8mm」のネジで固定します。
  2. image
  1. head_stand_camera_ultra_sonicに「Raspberry Pi Camera V2」を「M2×8mm」で固定します。
  2. image
  1. head_stand_camera_ultra_sonic, ultra_sonic_pollに「HY-SRF05」を「M1.6ネジ」で固定します。
  2. 正面からみた図
    正面からみた図
    横からみた図
    横からみた図
  1. head_stand_baseとhead_stand_camera_ultra_sonicを「M2×10mmネジ」で固定します
  2. image
  3. 最後に、head_stand_baseをSG90に取り付けます。
  4. image

配線しよう

次に、配線を行います。

パーツ名
商品url
ブレッドボード(85mm×55mm) (サイズが大きいとsmaboに入らないので注意)
ジャンプワイヤー
単三×4 バッテリーボックス
充電式単三電池 × 4
サーボモータドライバ PCA9685(互換品多数あり)
SG90 × 1(互換品多数あり)
超音波センサ HY-SRF05(互換品多数あり)

下図のように配線してください。

image
🔍
ラズパイのGPIOピンの割り当ては下図の通りになります。

最終的な完成図は以下のようになります。

image

カメラを制御してみよう

ここからは、カメラを制御する手順について説明します。

image

事前準備として、必要なパッケージをインストールします。

pip install opencv-contrib-python
pip install flask
pip install ipget

以下コマンドで、/dev/video0 の権限を変更します。

sudo chmod 666 /dev/video0

pythonコードを実行して制御

最初に、ROSを使わずに制御する方法について説明します。

smaboリポジトリの「simple_code」に格納してある「cam_stream_on_flask.py」を実行してみましょう。

cd ~/smabo/simple_code
python3 cam_stream_on_flask.py

ターミナル上に表示されるアドレス(192.168..:5000/)にアクセスするとカメラから取得された画像が表示されます。

ROS2を使って制御

次に、ROS2を使用して制御する手順について説明します。

🔍
新しくコードを追加した場合は、以下コマンドでROS2ワークスペースをビルドしなおしてください。
cd ~/smabo_ws
colcon build --symlink-install

以下コマンドで「カメラから画像を取得するノード」を立ち上げます。

ros2 run smabo_pkg cam_stream

新しくターミナルを立ち上げて、「/imageトピックから購読した画像をflask上で表示するノード」を立ち上げます。

ros2 run smabo_pkg flask_image_display

ターミナル上に表示されるアドレス(192.168..:5000/)にアクセスするとカメラから取得された画像が表示されます。

超音波センサからの情報を取得してみよう

次に、超音波センサを制御する手順について説明します。

image

pythonコードを実行して制御

最初に、ROSを使わずに制御する方法について説明します。

smaboリポジトリの「simple_code」に格納してある「ultrasonic_sr04.py」を実行してみましょう。

cd ~/smabo/simple_code
python3 ultrasonic_sr04.py

コードを実行すると下記のように、超音波センサで計測した距離(cm)が表示されます。

13.17 cm
13.18 cm
13.21 cm
13.20 cm
13.21 cm

ROS2を使って制御

次に、ROS2を使用して制御する手順について説明します。

🔍
新しくコードを追加した場合は、以下コマンドでROS2ワークスペースをビルドしなおしてください。
cd ~/smabo_ws
colcon build --symlink-install

以下コマンドで「超音波センサからの距離情報を取得するノード」を立ち上げます。

ros2 run smabo_pkg ultrasonic_sensor

コードを実行すると下記のように、超音波センサで計測した距離(m)が表示されます。

[INFO] [1704560652.946915129] [ultrasonic_sensor]: distance: 0.04410195350646973 m
[INFO] [1704560652.951719651] [ultrasonic_sensor]: distance: 0.1263386607170105 m
[INFO] [1704560653.041953099] [ultrasonic_sensor]: distance: 0.12637817859649658 m
[INFO] [1704560653.143156803] [ultrasonic_sensor]: distance: 0.12622010707855225 m
[INFO] [1704560653.242842910] [ultrasonic_sensor]: distance: 0.12665480375289917 m

smaboの頭を制御してみよう

最後に、smaboの頭をキーボードで制御する手順について解説します。

image

事前準備として、必要なパッケージをインストールします。

pip install readchar

以下コマンドで i2c-1 の権限を変更します。

sudo chmod 666 /dev/i2c-1

ROS2を使って制御

サーボの制御は、第3回でも解説しているため、ROS2を使用して制御する手順についてのみ説明します。

🔍
新しくコードを追加した場合は、以下コマンドでROS2ワークスペースをビルドしなおしてください。
cd ~/smabo_ws
colcon build --symlink-install

「pca9685を制御するノード」を立ち上げます。

ros2 run smabo_pkg pca9685_controller

次に、新しいターミナルを立ち上げて「smaboの頭を制御するノード」を立ち上げます。

ros2 run smabo_pkg head_arrow_key_commander

上記のノードを立ち上げ、"z"キーを入力すると左方向に回転、"x"キーを入力すると右方向に回転します。

さいごに

今回は、

  • smaboにカメラと超音波センサを取り付けて制御する方法

解説します。

次回は、

  • smaboを移動ロボットにする

について解説します。

前回: 【smabo第3回】smaboに腕を取り付けて制御してみよう

次回:【smabo第5回】smaboを移動ロボットにしてみよう

smaboトップページ: スマホが入るロボットの作り方【smabo】

参考