Skip to content
/ smabo Public

スマートフォンが入るロボットsmaboに関するリポジトリ

Notifications You must be signed in to change notification settings

akinami3/smabo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

smabo

スマホが入るロボットの作り方【smabo】 Alt text

スマートフォンが入るロボットsmaboに関するリポジトリです。

smaboとは

smaboはスマートフォンが入るロボットであり、

  • ナビゲーション (navigation)
  • 動作計画 (motion planning)
  • 画像処理 (image processing)
  • 遠隔操作 (remote control)
  • 深層学習 (deep learning)
  • 二足歩行 (bipedal walking)

など様々なことができます。

19.mp4

本リポジトリでは、smaboに関係するコード等をまとめていく予定です。


smaboのセットアップ

smaboの詳しいセットアップについては以下ブログにて解説しているので、ぜひご覧ください。

スマホが入るロボットの作り方【smabo】


本READMEでは、基本的な環境構築手順、使用法についてのみ解説します。

必要パッケージのインストール、設定

下記サイトを参考に、ROS2(humble)をインストールしてください。 https://docs.ros.org/en/humble/Installation/Alternatives/Ubuntu-Development-Setup.html


source /opt/ros/humble/setup.bash を実行すると、ros2コマンドを実行できるのですが、ターミナルを開くたびに入力するのは面倒なので、下記コマンドを実行しましょう。

echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc

GPIOのパッケージをインストールします。
sudo apt update -y && sudo apt install -y \
python3-rpi.gpio

また、下記サイトを参考にsudoなしで RPi.GPIO パッケージを使うためのセットアップを実施してください。
【ラズパイ+ubuntu】sudoなしでadd_event_detectを使うとfailed to add edge detectionエラーが出るときの解決方法


その他、必要なパッケージをインストールします

pip install adafruit-pca9685 # サーボドライバpca-9685のパッケージ
pip install opencv-contrib-python # openCV(画像処理)
pip install ipget # ipアドレスを取得
pip install readchar # 一文字入力
pip install flask # flask(Webアプリケーションフレームワーク)

smabo用ワークスペースの作成

以下コマンドで、smabo用のワークスペースを作成してください

mkdir -p smabo_ws/src

リポジトリのクローン、パッケージのコピー

以下コマンドで、本リポジトリをcloneしてください。

cd ~/
git clone https://github.com/akinami3/smabo.git

次に、以下コマンドでsmabo用のパッケージをワークスペースのsrcディレクトリにコピーしてください
cp -r ~/smabo/smabo_pkgs ~/smabo_ws/src

smabo関連のパッケージ以外に、「unityをROS2で通信するために必要なパッケージ」である「ROS-TCP-Endpoint」もcloneします(スマホとラズパイの通信に使用します)。
cd ~/smabo_ws/src
git clone -b dev-ros2 https://github.com/Unity-Technologies/ROS-TCP-Endpoint.git

パッケージのビルド

以下コマンドで、ワークスペースをビルドしてください

cd ~/smabo_ws
colcon build --symlink-install

次に、以下コマンドでros2コマンドからビルドしたパッケージを起動できるようにします。

source ~/smabo_ws/install/setup.bash

ターミナルを起動するたびに上記コマンドを実行するのは面倒なので、 .bashrc にも記述しておきます。

echo "source ~/smabo_ws/install/setup.bash" >> ~/.bashrc

smaboアプリのインストール

リポジトリ内の「SmartPhoneRobot.apk」をスマホにダウンロードし、インストールしてください。



smaboの使い方

ここからは、smaboの使い方について説明します。

smaboをROS2で通信

ROS-TCP-Endpointの起動

以下コマンドで、unityをROSで通信するためのサーバーを起動します。

ros2 run ros_tcp_endpoint default_server_endpoint

smaboアプリの起動

スマホ側で、インストールしたsmart_phone_robot(smabo用アプリ)を起動します。

アプリを起動すると、ipアドレスとポート番号を入力するオプション画面が表示されるので

  • ip address : ラズパイ側のipアドレス
  • port : 10000

と入力して「Connect」ボタンをクリックしてください。

ボタンをクリックし、しばらく待った後に「connected!!!!!!!」と表示されれば、接続が完了しています。

Alt text

Note

この時、何度か試してみても「not connected」と表示され続ける場合は、ラズパイとスマホが異なるネットワークに接続されている可能性があるので確認してみてください。

smaboの表情を変更する

Alt text

以下コマンドで、smaboの表情を変更するノードが起動します。

ros2 run smabo_pkg impression_pub

ノードを起動したら、「0~5の間の整数」を入力することでsmaboの表情を変化させることが出来ます。

スマホのセンサ情報をラズパイで取得する

ジャイロ

Alt text

以下コマンドで、スマホのジャイロの情報を取得するノードが起動します。

ros2 run smabo_pkg gyro_sub

加速度

以下コマンドで、スマホの加速度を取得するノードが起動します。

ros2 run smabo_pkg accel_sub

コンパス

以下コマンドで、スマホのコンパス情報を取得するノードが起動します。

ros2 run smabo_pkg magnetic_sub

smaboの腕を制御(pca9685, sg90)

右腕用のサーボはpca9685の6pin、左腕用のサーボは7pinに接続した状態で実施してください。 Alt text


i2c-1の権限を変更します。

sudo chmod 666 /dev/i2c-1

ROS2を使用しない

プログラムを実行し、「-90~90度」の間の整数を入力すると、smaboの腕を指定した角度に動かすことができます。

cd ~/smabo/simple_code
python3 pca9685_simple_hand.py

ROS2を使用

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

ros2 run smabo_pkg pca9685_controller

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

ros2 run smabo_pkg simple_hand_angle_commander

上記のノードを立ち上げ、「-90~90度」の間の整数を入力すると、smaboの腕を指定した角度に動かすことができます。

smaboの頭を制御(pca9685, sg90)

Alt text


i2c-1の権限を変更します。

sudo chmod 666 /dev/i2c-1

頭用のサーボはpca9685の5pinに接続した状態で実施してください。

ROS2を使用

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

ros2 run smabo_pkg pca9685_controller

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

ros2 run smabo_pkg head_arrow_key_commander 

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

超音波センサからの情報を取得 (hc-sr04)

Alt text


超音波センサにはhc-sr04を使用します。

ros2を使用しない

「超音波センサからの距離情報を取得するコード」を実行します。

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 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のカメラを制御 (openCV, flask)

Alt text


video0 の権限を変更します。

sudo chmod 666 /dev/video0

ROS2を使用しない

「カメラから取得した画像をflaskのサーバ上で表示するコード」を実行します。

cd ~/smabo/simple_code
python3 cam_stream_on_flask.py

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

ROS2を使用

「カメラから画像を取得するノード」を立ち上げます。

ros2 run smabo_pkg cam_stream 

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

ros2 run smabo_pkg flask_image_display

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

移動ロボットとして制御

alt text

ROS2を使用しない

「移動ロボットのsmaboを制御するコード」を実行します。

cd ~/smabo/simple_code
python3 control_move_smabo.py

キーボードの以下ボタンを押すことで制御できます。

q w e r
a s d
z x c v

s: 停止
w: 前進
x: 後進
d: 右回転(その場回転)
a: 左回転(その場回転)
e: 左車輪のみ前進
c: 左車輪のみ後退
q: 右車輪のみ前進
z: 右車輪のみ後退
r: 加速 v: 減速

ROS2を使用

「移動ロボット用のdcモータを制御するノード」を立ち上げます。

ros2 run smabo_pkg move_robot_dc_controller 

新しくターミナルを立ち上げて、「dcモータ制御用ノードに走行指示を送るノード」を立ち上げます。

ros2 run smabo_pkg move_robot_commander 

キーボードの以下ボタンを押すことで制御できます。

q w e r
a s d
z x c v

s: 停止
w: 前進
x: 後進
d: 右回転(その場回転)
a: 左回転(その場回転)
e: 左車輪のみ前進
c: 左車輪のみ後退
q: 右車輪のみ前進
z: 右車輪のみ後退
r: 加速 v: 減速

ロボットアームを制御

Alt text

i2c-1の権限を変更します。

sudo chmod 666 /dev/i2c-1

各サーボはpca9685の以下のpinに接続してください。

  • link1(頭のサーボと共有): 5pin
  • link2: 13pin
  • link3: 14pin
  • gripper: 15pin

ROS2を使用

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

ros2 run smabo_pkg pca9685_controller

次に、新しいターミナルを立ち上げて「ロボットアームの各リンク、グリッパを設定するノード」を立ち上げます。

ros2 run smabo_pkg link3_robot_arm_commander

キーボードの以下ボタンを押すことで制御できます。

q w e
a s d
z x

z: link1を正方向に回転
x: link1を逆方向に回転
q: link2を正方向に回転
a: link2を逆方向に回転
w: link3を正方向に回転
s: link3を逆方向に回転
e: グリッパを開く
d: グリッパを閉じる

About

スマートフォンが入るロボットsmaboに関するリポジトリ

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published