WAVEGO code breakdown - dongwon18/CareRobotBoBi GitHub Wiki
- flask๋ฅผ ์ด์ฉํ web app ๊ตฌ๋์ ์ํ ํจ์ ๋ชจ์
- route ์ค์ , class webapp
- flask์ ip, port ๋ฑ ์ค์
- class CameraEvent
- ์๋ก์ด frame์ด ๋ค์ด์์ ๋ client์๊ฒ signal์ ๋ณด๋ด์ฃผ๋ event ๊ฐ์ class
- wait
- ์๋ก์ด client๋ผ๋ฉด thread event ๋ฑ๋ก ํ๊ณ events list์ ์ ์ฅ
- client ๋ค์ด ์ฐ๋ ํจ์
- ํด๋น id๋ฅผ ๊ฐ์ง client์ wait
- set
- ์๋ก์ด frame์ด ์๊ฒผ์ ๋ ์ฌ์ฉ
- camera thread๊ฐ ์ฌ์ฉํ๋ ํจ์
- client๊ฐ set ๋์ด ์์ง ์์ผ๋ฉด ํ์ฌ ์๊ฐ์ผ๋ก set
- set ๋์ด ์๋ client๊ฐ 5์ด ๋์ ์ด์ frame์ ์ฒ๋ฆฌํ์ง ์์ผ๋ฉด client๊ฐ ํด์ฅํ๋ค ์๊ฐํ๊ณ events list์์ ์ ๊ฑฐ
- clear
- ๋ชจ๋ events list clear
- class BaseCamera
- init
- ์นด๋ฉ๋ผ๊ฐ ์คํ์ค์ด์ง ์์ผ๋ฉด background ์์ thread๋ก ์ฒ๋ฆฌํ๋๋ก thread ์์ฑ
- get_frame
- CameraEvent class๋ฅผ ์ด์ฉํ์ฌ ์ต์ frame return
- wait, clear ์ฌ์ฉ
- CameraEvent class๋ฅผ ์ด์ฉํ์ฌ ์ต์ frame return
- frames
- thread
- client์๊ฒ ์๋ก์ด frame์ด ๋ค์ด์๋ค๊ณ ์ ํธ๋ฅผ ์ค
- 10์ด ๋์ ์ด๋ค client๋ frame์ ์๊ตฌํ์ง ์์ผ๋ฉด ์๋ ์ข ๋ฃ๋๋ ๋ถ๋ถ์ ์ฃผ์ ์ฒ๋ฆฌ ๋์ด ์์
- init
- class BaseCamera๋ฅผ ์ฌ์ฉ
- class CVThread
- mode
- mode, img ์ค์
- elementDraw
- CVMode์ ๋ฐ๋ผ text, ์ฌ๊ฐํ img์ ๊ทธ๋ฆผ
- faceDetection, findColor, findlineCV, watchDog
- findLineTest
- ๋ผ์ธ์ ๋ฐ๋ผ์ ์ผ์ชฝ, ์ค๋ฅธ์ชฝ์ผ๋ก command๋ฅผ ์ถ๋ ฅ
- ์ถ๋ ฅ๋ง ํ๊ณ ์ค์ ๋ก๋ด์๊ฒ ๋ช ๋ น์ ์ ๋ด๋ฆผ - ๊ทธ๋ฅ ํ ์คํธ์ฉ
- ์๋ฌด๋๋ line tracingํ๋๋ฐ ์ฐ๋ ๊ฒ์ธ ๋ฏ????
- findLineCtrl
- ๋์์ findLineTest์ ๋์ผํ๋ ์ค์ ๋ก ๋ก๋ด์๊ฒ ๋ช ๋ น ๋ด๋ฆผ
- findlineCV
- grayscale๋ก ์ฐ์ ์ด๋ฏธ์ง ๋ณ๊ฒฝ
- frame_findline์ ์ด์ฉํ์ฌ ์ ์ฐพ๊ธฐ
- ๋ ์ ์ ๋ํด ์งํ
- lineColorSet์ด๋ ๋์ผํ ์์ ๊ฐ๋ ๋ผ์ธ ํ๋ณ
- CVMode์ ๋ฐ๋ผ ์คํ(findLineCtrl, findLineTest ์ค)
- findColor
- faceDetectCV
- watchDog
- grayscale๋ก ๋ณํ
- dilate, findContours๋ฅผ ์ด์ฉํ์ฌ ์ด์ ๊ณผ ๋ค๋ฅธ ๊ฒ ์๋์ง ํ๋จ
- pause
- resume
- run
- mode
- class Camera
- def commandAct
- ์์ ์ธ์์ฉ ํ์ต๋ ๋ฐ์ดํฐ
- ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด CPU, GPU, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋๊ณผ ์จ๋๋ฅผ ์ธก์ ํ์ฌ ๋ฐํ
- ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ ๊ด๋ จ๋ ํจ์๋ค
- serial ํต์ ์ผ๋ก ๊ฐ ๊ธฐ๋ฅ๋ง๋ค ํจ์๋ฅผ ๋ณด๋
- setUpperIP
- ipInput์ผ๋ก ๋ค์ด์จ IP๋ฅผ upperIP๋ก ์ค์
ํจ์ ์ด๋ฆ | ๋ชฉ์ | var | val |
---|---|---|---|
forward | 4์กฑ๋ณดํ | move | 1 |
backward | 4์กฑ๋ณดํ | move | 5 |
left | 4์กฑ๋ณดํ | move | 2 |
right | 4์กฑ๋ณดํ | move | 4 |
stopLR | 4์กฑ๋ณดํ | move | 6 |
stopFB | 4์กฑ๋ณดํ | move | 3 |
lookUp | ์ ์ค์ฒ | ges | 1 |
lookDown | ์ ์ค์ฒ | ges | 2 |
lookStopUD | ์ ์ค์ฒ | ges | 3 |
lookLeft | ์ ์ค์ฒ | ges | 4 |
lookRight | ์ ์ค์ฒ | ges | 5 |
lookStopLR | ์ ์ค์ฒ | ges | 6 |
steadyMode | ํน๋ณ ํ๋ | funcMode | 1 |
jump | ํน๋ณ ํ๋ | funcMode | 4 |
handShake | ํน๋ณ ํ๋ | funcMode | 3 |
- lightCtrl
- colorName์ ๋ฐ๋ผ colorNum ๊ฒฐ์ ํด์ jsonํ์ผ๋ก ๋ณด๋
- var: lignt, val: colorNum
- colorName์ ๋ฐ๋ผ colorNum ๊ฒฐ์ ํด์ jsonํ์ผ๋ก ๋ณด๋
- buzzerCtrl
- json ํ์ผ ๋ณด๋ด์ ๋ถ์ ์ธ๋ฆผ
- ์นด๋ฉ๋ผ ์ฐ๊ฒฐ ํ ์คํธ ์งํ
- boot/config.txt์ ๊ฐ์ test๋ฅผ ์ํด ์ค์ ํจ
- ๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์นํ๋ ์ฉ๋
- ์ผ์๋ฅผ ์ถ๊ฐํ๋ค๋ฉด, ์ผ์๋ฅผ ๋์ ์ํค๋ ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น ๋ช ๋ น์ด ๊ธฐ์
- IP, WIFI ์ธํ ๋ฐ ๋ก๊ทธ์ธ ํ์ธ
- flask_app์ input์ ๋ฐ๋ผ ์ ์ ํ response ๋ณด๋ด๊ณ cmd์ ๋ชจ๋ ์ถ๋ ฅ
- webapp์ ์ํ js, css, html ํ์ผ ๋ฑ ํฌํจ๋์ด ์์
#include <Wire.h>
#include <ICM20948_WE.h>
#include <INA219_WE.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_NeoPixel.h>
- ์ผ์& ๋ชจ๋ ์ด๊ธฐ ์ค์ , ํค๋ include, ๋ค๋ฃจ๋ ํจ์ ํฌํจ
- OLED thread ์ํ ์๋์ด๋ ธ ์ฝ์ด ์ค์
- GPIO ์ค์
- ์๋ณด ๋ชจํฐ ์ค๊ฐ ๊ฐ ์ค์
- wire debug ๋ชจ๋ ํด์
- G12 3V3์ ์ฐ๊ฒฐํ๋ฉด ๋ก๋ด์ด ๋๋ฒ๊ทธ ๋ชจ๋๊ฐ ๋จ
- 9์ถ ์ผ์(ICM20948)
- ํค๋ ํฌํจ
- InitICM20948(): ์ด๊ธฐ ์ธํ
- accXYZUpdate(): ์ผ์ ๊ฐ ์ฝ์ด์ ACC_X, ACC_Y, ACC_Z์ ์ ์ฅํ๋ ํจ์
- ์ ๋ฅ ์ผ์(INA219) - ์ ์ ํ์ ํ๊ธฐ ์ํ ํจ์
- ํค๋ ํฌํจ
- InitINA219(): ์ด๊ธฐ ์ธํ
- InaDataUpdate(): ์ผ์ ๊ฐ ์ฝ์ด์ ๊ฐฑ์
- oled(SSD1306)
- ํค๋ ํฌํจ
- InitScreen(): ์คํฌ๋ฆฐ ์ด๊ธฐํ, ์ ์ง์ , ํ ์คํธ ํฌ๊ธฐ ์ง์ ๋ฑ
- xyzScreenUpdate(): V, A, P ๊ฐ display์ ํํ
- allDataUpdate(): ์์ดํ์ด, ์ ๋ฅ ๊ฐ ์ฝ์ด์์ display์ ํํ
- InitBuzzer(): ๋ถ์ ์ด๊ธฐํ
- 3์ LED(WS2812)
- ํค๋ ํฌํจ
- InitRGB(): RGB ๋ฐ๊ธฐ ์กฐ์ , ์์
- colorWipe(): ํํ ๊ฐ๋ฅ ์ปฌ๋ฌ ์ฐจ๋ก๋๋ก ๋ณด์ฌ์ฃผ๊ธฐ
- SetSingleLED(): ํน์ ์ปฌ๋ฌ ๋ณด์ฌ์ฃผ๊ธฐ
#include <Preferences.h>
- middleUpdate()
- ServoMiddlePWM ๊ฐ์ preferences ์์ ์ฝ์ด์์ ์ค์
- servoConigSave(byte activeServo)
- activeServo ๋ฒํธ์ ๋ง์ถฐ preference์ ํ์ฌ PWM ๊ฐ put
- preferencesSetup()
- preferences์ ServoConfig๋ false ๋ก ์์
- middleUpdate() ์คํ
- delay 500
#include <Adafruit_PWMServoDriver.h>
#include <math.h>
- Define
- SERVOMIN : 263
- ๊ธธ์ด๋ฅผ ์ ๋ ์ต์ pulse ๊ฐ
- out of 4096???
- SERVOMAX : 463
- ๊ธธ์ด๋ฅผ ์ ๋ ์ต๋ pulse๊ฐ
- out of 4096??
- SERVO_FREQ : 50
- ๋ชจํฐ์ ์ฃผํ์
- 50 Hz ๋ฐ์์ ๋์๊ฐ
- SERVO_RANGE : 90
- M_PI : 3.1415926
- Pi ๊ฐ
- LEG_A_FORE
- LEG_A_BACK
- LEG_A_WAVE
- SERVOMIN : 263
- ๋ณ์ ์ ์
- double
- Linkage_W
- ํ๋๋ ์๋ณด๋ชจํฐ์ ๋ค๋ฆฌ ๋งํฌ์ ํ๋ฉด ์ฌ์ด์ ๊ฑฐ๋ฆฌ
- LInkage_S
- ๋๊ฐ์ ์๋ณด๋ชจํฐ ์ฌ์ด์ ๊ฑฐ๋ฆฌ
- Linkage_A
- ์๋ณด๋ชจํฐ์ ์ฐ๊ฒฐ๋๋ ๋งํฌ
- Linkage_B
- ๋ฐฉํฅ์ ์ ํํ๋ ๋งํฌ
- Linkage_C
- ๋ค๋ฆฌ์ ์์ชฝ ํํธ
- Linkage_D
- ๋ค๋ฆฌ์ ์๋์ชฝ ํํธ
- Linkage_E
- ๋ฐ
- WALK_HEIGHT_MAX
- WALK_HEIGHT_MIN
- WALK_HEIGHT
- WALK_LIFT
- WALK_RANGE
- WALK_ACC
- WALK_EXTENDED_X
- WALK_EXTENDED_Z
- WALK_SIDE_MAX
- WALK_MASS_ADJUST
- STAND_HEIGHT
- Linkage_W
- double
- ํจ์(๋ชจ๋ void์ด๊ณ , *๋ฌ๋ ค์๋ ํจ์๋ extern void)
- ServoSetup()
- IICํต์ ์์
- pwm ์์
- pwm์ ์ฃผํ์๋ฅผ SERVO_FREQ๋ก ์ค์
- *InitPosAll()
- 16๋ฒ์ for๋ฌธ
- pwm์ MiddlePosition์ผ๋ก ์ธํ
- CurrentPWM[i] = MiddlePosition
- ์ด๋ฅผ Serial์ ์ถ๋ ฅ(์ด๋ค ๊ฐ์ธ์ง ํ์ธํด๋ณด์)
- *middlePosAll()
- 16๋ฒ์ for๋ฌธ
- pwm์ ServoMiddlePWM[i]๋ก ์ธํ
- CurrentPWM[i] = ServoMiddlePWM[i]
- ์ด๋ฅผ Serial์ ์ถ๋ ฅ
- *servoDebug(byte, servoID, int offset)
- servoID์ ๋ง๋ ํ์ฌ์ PWM์ offset ์กฐ์
- GoalPosAll
- GoalPWM์ผ๋ก pwm์ ์ธํ
- goalPWMSet(uint8_t servoNum, double angleInput)
- int pwmGet = round((SERVOMAX - SERVOMIN) * angleInput / SERVO_RANGE)
- pwmGet = pwmGet * ServoDirection[servoNum] + ServoMiddlePWM[servoNum]
- simpleLinkageIK(double LA, LB, aln, bln, uint8_t outputAlpha uint8_t outputBeta, uint8_t outputDelta)
- wigglePlaneIK(double LA, double aln, double bln, uint8_t outputAlpha, uint8_t outputLen)
- ServoSetup()
#include "InitConfig.h"
#include "ServoCtrl.h"
#include "PreferencesConfig.h"
#include <ArduinoJson.h>
- moveFB : -1/0/1 ๊ฐ์ ๋ฐ๋ผ ํ์ง/์ ์ง/์ ์ง
- moveLR : -1/0/1 ๊ฐ์ ๋ฐ๋ผ ์ขํ์ /์ง์ง/์ฐํ์
- serialCrtl()
- Serial ํต์ ์ด JSON ํํ๋ก ์ ๋ณด๋ด์๋ค๋ฉด
- ๋ฐ์์ค๋ var๊ณผ val ๊ฐ์ ๋ฐ๋ผ ๋์
-
var == funcMode
- funcMode ๋ณ์ ๊ฐ์ 0/1 ํน์ val ๊ฐ์ผ๋ก ๋ณ๊ฒฝ
-
var == move
- ๋ถ์ ์ธ๋ฆฌ๊ณ val๊ฐ์ ๋ฐ๋ผ moveFB ๋ณ์ ๊ฐ์ ๋ณ๊ฒฝํ๊ณ ์๋ฆฌ์ผ ๋ฌธ์ ์ฐ์
- ์ ์ง(val 1) : moveFB = 1
- ์ขํ์ (val 2) : moveLR = -1
- ์ ์ง(val 3) : moveFB = 0
- ์ฐํ์ (val 4) : moveLR = 1
- ํ์ง(val 5) : moveFB = -1
- ์ง์ง(val 6) : moveLR = 0
- ๋ถ์ ์ธ๋ฆฌ๊ณ val๊ฐ์ ๋ฐ๋ผ moveFB ๋ณ์ ๊ฐ์ ๋ณ๊ฒฝํ๊ณ ์๋ฆฌ์ผ ๋ฌธ์ ์ฐ์
-
var == ges
- val ๊ฐ์ ๋ฐ๋ผ gestureSpeed(= 2) ๋งํผ ์ฆ๊ฐ
- gestureOffSetMax(= 15) ๊ฐ ์ต๋ ์๋๋ก ์๋๋ -15 ~ 15๋ก ์ ํ
- pitchYawRollHeightCtrl(gestureUD, gestureLR, 0, 0) ๋ค์ ํจ์๋ฅผ ํตํด ์๋ ๋ฐ์
-
var == light
val ๊ฐ์ ๋ฐ๋ผ led0๊ณผ led1์ ์์์ ๋ฐ๊พผ๋ค.
-
var == buzzer
- val ๊ฐ์ ๋ฐ๋ฅธ ๋ถ์ ON/OFF
-
- ๋ฐ์์ค๋ var๊ณผ val ๊ฐ์ ๋ฐ๋ผ ๋์
- Serial ํต์ ์ด JSON ํํ๋ก ์ ๋ณด๋ด์๋ค๋ฉด
- jsonSend()
- robotThreadings() : ์ด์ง delay๋ฅผ ๊ฑธ๊ณ serialCrtl while๋ฌธ์ผ๋ก ์คํ
- threadingsInit() : robotThreadings๋ฅผ Thread ๊ฑธ์ด์ ๋ค์ค ์คํ
- setup() : ๋ค์ํ setup ํจ์๋ค ์คํ
- loop()
- robotCtrl() / allDataUpdate() / wireDebugDetect() ์ ์์ฐจ์ ์ผ๋ก ์คํ
- html ํ์ผ
- arduino์์ ๋์ฐ๋ html ํ์ผ(192.168.4.1์ ๋จ๋ ๊ฑฐ)
#include <arduino.h>
#include "WebPage.h"
#include "esp_wifi.h"
#include <WiFi.h>
#include "soc/soc.h"
#include "soc/rtc_cntl_reg.h"
#include "dl_lib_matrix3d.h"
#include <esp32-hal-ledc.h>
#include "esp_http_server.h"
#include "esp_timer.h"
#include "esp_camera.h"
#include "img_converters.h"
- ์์ดํ์ด ์ฐ๊ฒฐ ๊ด๋ จ ํจ์
- ๊ด๋ จ esp ํค๋ ํฌํจ
- gpio ํ ๋ฒํธ ์ค์
- getMac(): mac ์ฃผ์ ๋ฐ์์ค๊ธฐ
- getIP(): IP ์ฃผ์ ๋ฐ์์ค๊ธฐ
- setAP(): ์์ดํ์ด ssid, ๋น๋ฒ ์ด์ฉ ์ฐ๊ฒฐ, ๋ด ip ๋ฐ์์ค๊ธฐ
- setSTA(): ์์ดํ์ด ์์
- getWifiStatus()
- ์์ดํ์ด ์ฐ๊ฒฐ๋์ด ์์ผ๋ฉด wifi ๋ชจ๋ 2, ip ๋ฐ์์ค๊ธฐ
- ์ฐ๊ฒฐ ์ ๋์ด ์์ผ๋ฉด wifi ๋ชจ๋ 3, ๋ค์ ์ฐ๊ฒฐ
- wifiInit(): ์์ดํ์ด mode1์ด๋ฉด setAP(), mode2๋ฉด setSTA
- stream_handler
- ์ด์ frame์ด ์์ผ๋ฉด esp์ ํ์ด๋จธ์์ ํ์์ ๋ฆฌํด ๋ฐ์ last_frame์ผ๋ก ์ง์
- ์นด๋ฉ๋ผ ์ฐ๊ฒฐ์ด ๋์๋ค๋ฉด
- frame์ jpg๋ก ๋ณํ
- esp๊ฐ ์ฐ๊ฒฐ๋์ด ์์ผ๋ฉด
- http๋ก jpg๋ก ๋ณํํ ๊ฑฐ ๋ณด๋
- ๊ฑธ๋ฆฐ ์๊ฐ ๊ตฌํ๊ธฐ
- delay 10
- res(httpd_resp_send_chunk์ return ๊ฐ, esp_err_t ํ์ )๋ฅผ ๋ฆฌํด
- cmd_handler
- ESP_OK๋ก ํต์ ์ด ์ ๋๊ณ ์๋ค๋ฉด
- var, val, cmd๋ฅผ parsingํจ
- var, val์ ๋ฐ๋ผ์ moveFB, moveLR ์ฒ๋ฆฌ
- moveFB: 1 forward 0 FBstop -1 backward
- moveLR: 1 right 0 LRstop -1 left
- funcMode๋ ํ์์๋ 0 funcMode์ผ ๋๋ง 1๋ก ์ค์
- ESP_OK๋ก ํต์ ์ด ์ ๋๊ณ ์๋ค๋ฉด
- startCameraServer
- http server ์์ํ๋ ํจ์
- /๋ก๋ index_handler
- /control๋ก๋ cmd_handler
- /stream์ผ๋ก๋ stream_handler get
- ์ฐธ๊ณ : https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/protocols/esp_http_server.html
- webServerInit
- brown_out ๋ฐฉ์ง
- camera config์ GPIO, freq, pixel format ์ง
- ์นด๋ฉ๋ผ ์ด๊ธฐํ
- wifi ์ด๊ธฐํ
- ์นด๋ฉ๋ผ ์๋ฒ ์์
last modified on 18 Aug, 2022