M5Stackを内蔵のESP32でWiFiサーバーとして使い、コードレスで無線ジェスチャーコントロールをしてみました(^^)/
準備するもの
M5Stack (私は、Basicですが、Grayとかのほうが今後発展して使いやすいです。)
servoモーター(sg90)
Mediapipeでドローンをジェスチャーコントロールできたので、ほかの自称ロボットも操作できるのではないかと、試みました。
顔の鼻の位置の移動量におおじて、自称ロボットの顔を連動させる計画です。
*備忘録*
codeは以下の通りです。pythonのimport requestsでシリアル通信で、自称ロボットを動かすM5Stack(ESP32)ArduinoIDEにデーターを渡すのが、コツです。自称ロボットの制御については、まずArduinoでしてみましたのでこちらを参照願います。
pip install pyserial
python IDE
pythonでのコードは、次の通りです。
requestsは、PythonでHTTPリクエストを簡単に扱うためのライブラリです。このライブラリを使うと、ウェブサイトに対してGETやPOSTなどのリクエストを送信し、その応答を取得することができます。
まず、requestsライブラリをインストールする必要があります。pip install requests
Pythonコード:
- Mediapipeで鼻の位置を検出し、そのx座標をESP32にHTTPリクエストで送信します。
- requestsライブラリを使ってESP32にGETリクエストを送信します。
import requests
ESP32のIPアドレス(シリアルモニタに表示される)
ESP32_IP = ‘http://192.168.1.100’ # 変更してください
def send_angle(angle):
url = f”{ESP32_IP}/angle”
###
url
にエンドポイント /angle
を含めたESP32のURLを設定します
。params
に angle
パラメータを含め、HTTP GETリクエストを送信します。
params = {‘angle’: angle}
response = requests.get(url, params=params)
####これにより、クライアントはESP32のエンドポイント /angle
に対して角度データを送信し、サーボモーターの角度を設定することができます。
if response.status_code == 200: ###requestsの反応確認200は正常値 それ以外は異常値リクエスト失敗。
print(f”Angle set to: {response.text}”)
else:
print(“Failed to send angle”)
Mediapipeとカメラ設定
import cv2
import mediapipe as mp
mp_pose = mp.solutions.pose
pose = mp_pose.Pose()
mp_drawing = mp.solutions.drawing_utils
cap = cv2.VideoCapture(0)
while cap.isOpened():
success, image = cap.read()
if not success:
break
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
results = pose.process(image_rgb)
if results.pose_landmarks:
mp_drawing.draw_landmarks(image, results.pose_landmarks, mp_pose.POSE_CONNECTIONS)
nose = results.pose_landmarks.landmark[mp_pose.PoseLandmark.NOSE]
# 鼻のx座標を0〜180の範囲に変換(サーボ1の角度範囲)
nose_x = int(nose.x * 180)
nose_x = max(0, min(180, nose_x)) # 範囲外の値を修正
###この部分では、nose_x
が計算され、その値を send_angle
関数に渡しています。つまり、send_angle(nose_x)
と呼び出すと、nose_x
の値が send_angle
関数の angle
引数に渡されます
# 角度を送信
send_angle(nose_x)
cv2.putText(image, f’Nose X: {nose_x}’, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2, cv2.LINE_AA)
cv2.imshow(‘Pose Estimation’, image)
if cv2.waitKey(5) & 0xFF == 27:
break
cap.release()
cv2.destroyAllWindows()
M5Stack(ESP32) Arduino IDE
WiFiを使ってM5Stackの内蔵ESP32を使ってサーボモーターをコントロールするには、ESP32がWebサーバーとして動作し、クライアント(PC側)からHTTPリクエストで角度データを送信します。
M5Stackのセット:
- WiFiに接続し、Webサーバーを立ち上げ、HTTPリクエストを処理してサーボモーターの角度を設定します。
#include <M5Stack.h>
#include <WiFi.h>
#include <WebServer.h>
// WiFi設定
const char* ssid = “接続するWiFiの_SSID”;
const char* password = “接続するWiFiの_PASSWORD”;
WebServer server(80);//port: 通常は80(HTTPのデフォルトポート)だが、省略されることが多い
int angle = 90; // 初期角度
void SG90write(int angle) {
ledcWrite(15, map(constrain(angle, 0, 180), 0, 180, 26, 123));
}
void handleRoot() {
server.send(200, “text/plain”, “M5Stack Servo Controller”);
}
//handleAngle
関数は、受け取ったリクエストから角度データを取得し、サーボモーターの角度を設定します
void handleAngle() {
if (server.hasArg(“angle”)) {
angle = server.arg(“angle”).toInt();//server.arg("angle").toInt()
でその値を整数に変換し、angle
変数に格納します。
SG90write(angle);
// ディスプレイに角度を表示
M5.Lcd.fillScreen(BLACK); // 画面をクリア
M5.Lcd.setCursor(0, 0);
M5.Lcd.printf(“Angle: %d”, angle);
server.send(200, “text/plain”, String(angle));
} else {
server.send(400, “text/plain”, “Bad Request”);
}
}
void setup() {
M5.begin();
Serial.begin(115200);
// ディスプレイの初期化
M5.Lcd.clear();
M5.Lcd.setTextSize(3);
M5.Lcd.setCursor(0, 0);
// PWMチャネルの設定とピンのアタッチ
ledcSetup(15, 50, 10);
ledcAttachPin(2, 15);
// WiFi接続
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println(“Connecting to WiFi…”);
}
Serial.println(“Connected to WiFi”);
// Webサーバーのルートとハンドラーの設定
server.on(“/”, handleRoot);
server.on(“/angle”, handleAngle); //この行は、ESP32のWebサーバーが /angle
パスに対するリクエストを受け取ったときに handleAngle
関数を呼び出すことを意味しています。
server.begin();
}
void loop() {
server.handleClient();
}
- 自由研究に!「ドローンをつくろう!学ぼう!」by 神戸ロボットクラブ
- 保護中: LiteBee Wing/ SKY / Tello でドローンプログラミングを教えます。プログラミングしたい人集まれ(^^♪
- ロボットアーム(ベクトル内積を使った)ジェスチャーコントロール *目指せ老後の食事介助アーム*
- M5Stackを内蔵のESP32でWiFiサーバーとして使い、コードレスで無線ジェスチャーコントロールをしてみました(^^)/
- mediapipe & Arduino で 自称ロボットのジェスチャーコントロール
投稿
- 空撮事始め (2021年6月18日)
- 航空法施行規則改正されました。令和3年6月1日 (2021年6月19日)
- Tello(Ryze Technology 社 POWERED BY DJI)の飛ばし方マニュアル (2021年7月5日)
- 趣味におすすめ!ドローン(Tello)のいろいろな楽しさをお伝えします。 (2021年7月5日)
- プログラミング言語って?Pythonの導入前にプログラミング言語の種類をおおまかにまとめてみました。 (2021年7月6日)
- ドローンのプログラミングらしき事をやってみる! はじめてのPython&IDEのインストール方法 (2021年7月7日)
- Tello の画像をOpenCVでPCに写してみる!!OpenCVの導入方法 (2021年7月9日)
- これだけは知っておこう!ドローンを飛ばすのに法律って関係あるの? (2021年7月15日)
- ドローンの空撮は最高!きままに撮ってみました(^^♪ 空撮Gallery集 (2021年7月30日)
- ドローンを飛ばすなら これだけは知っておこう!ドローンの飛行ルール(令和3年6月施行) (2021年7月30日)
- これだけは知っておこう!ドローン空撮には注意が必要です。映像等のインターネット上での注意事項。 (2021年7月30日)
- socket通信プログラムの部分を少しだけ解説してみました (2021年9月2日)
- OpenCVで遊んでみる。 PC内蔵webカメラから動画の撮影。 (2021年9月14日)
- PCでOpenCVで顔認識して遊んでみる。(^^♪ カスケード分類器の使い方 (2021年10月30日)
- ドローン・無人航空機の登録が義務化されます。リモートIDの付け方 (2021年12月14日)
- ドローンのプログラミングでOpenCVをつかい顔認識をしてみる (2022年1月9日)
- ドローン(Tello)を飛ばしてOpenCVで顔認識してみる改良版 (2022年2月21日)
- TelloでOpenCVで顔認識させたらFLIP(フリップ)させる(^^♪ (2022年5月2日)
- Pythonを使いTello(ドローン)でOpenCV(顔認識)から自動追尾をしてみる!☺ (2022年6月13日)
- フィンガーサインでドローン(Tello)を操縦してみた!MediaPipeを使用 (2022年9月29日)
- Pythonプログラミング・OpenCv&MediaPipeを使いドローン(Tello)を自由に操縦してみた! (2022年11月21日)
- Pythonで「Tello(ドローン)で自動追尾プログラミング」改良版を紹介します!これはいける! (2023年3月22日)
- OpenCVで遊んでみる。 PC内蔵カメラから映像の表示 と ドローンからの映像を表示をする (2023年4月13日)
- Telloとパソコンの通信の部分を少しわかりやすくしてみました (2023年4月13日)
- 100g未満のドローン、100g以上のドローンを飛ばすには?法律や準備しないといけないことは何? (2023年4月21日)
- mediapipe(メディアパイプ)& OpenCV・ Pythonでposeランドマーク検出Telloの自動操縦 (2023年5月8日)
- プログラミングで動かせるオススメ!ドローン・ロボット ベスト2選!! (2023年6月1日)
- 海外、子供に人気!プログランミングで動かせるドローンLitebeeWing紹介(パソコン接続方法解説)します。 (2023年7月2日)
- 講座用ダウンロード サイト (2023年7月7日)
- ドローン(Tello)を音声認識コントロールできる?パソコンで2か所Wi-Fi接続してGoogle Speech to Text (2023年7月9日)
- 最近はまっている 楽しーい気分転換アイテム ドローン&プログラミング学習用教材&ラジコン (2023年7月26日)
- Scratch(スクラッチ)ビデオモーションセンサーでTello(ドローン)操作 AR「拡張現実」? (2024年1月31日)
- スクラッチ(Scratch3-Tello) & (マイコンボード)micro:bitを使って、Telllo(ドローン)をコントロールしてみた(^^♪ (2024年5月5日)
- マイコンでドローン感知ロボットを作ってみました(^^♪ microbit & arduino (2024年6月1日)
- mediapipe & Arduino で 自称ロボットのジェスチャーコントロール (2024年6月5日)
- M5Stackを内蔵のESP32でWiFiサーバーとして使い、コードレスで無線ジェスチャーコントロールをしてみました(^^)/ (2024年6月12日)
- ロボットアーム(ベクトル内積を使った)ジェスチャーコントロール *目指せ老後の食事介助アーム* (2024年6月27日)
- LiteBee Wing/ SKY / Tello でドローンプログラミングを教えます。プログラミングしたい人集まれ(^^♪ (2024年7月3日)
- 自由研究に!「ドローンをつくろう!学ぼう!」by 神戸ロボットクラブ (2024年8月17日)