* Add EDA Education Board Configuration - Add eda-tv-pro Board Configuration - Add eda-robot-pro Board Configuration - Add eda-super-bear Board Configuration * docs(oscillator): Add file headers with copyright and license information - Add comprehensive file headers to oscillator.cc and oscillator.h in eda-robot-pro board - Add comprehensive file headers to oscillator.cc and oscillator.h in eda-super-bear board - Include original author attribution (Juan Gonzalez-Gomez/Obijuan) and ESP32 port credit (txp666) - Include GPL license notice and file descriptions for clarity and compliance * fix: Move the eda* boards to the lceda-course-examples folder. - Move eda-robot-pro, eda-super-bear, and eda-tv-pro boards to lceda-course-examples subdirectory - Update CMakeLists.txt to set MANUFACTURER variable for each board configuration
91 lines
2.6 KiB
C++
91 lines
2.6 KiB
C++
#ifndef __EDA_DOG_MOVEMENTS_H__
|
|
#define __EDA_DOG_MOVEMENTS_H__
|
|
|
|
#include "driver/gpio.h"
|
|
#include "esp_log.h"
|
|
#include "esp_timer.h"
|
|
#include "freertos/FreeRTOS.h"
|
|
#include "freertos/task.h"
|
|
#include "oscillator.h"
|
|
|
|
//-- Constants
|
|
#define FORWARD 1
|
|
#define BACKWARD -1
|
|
#define LEFT 1
|
|
#define RIGHT -1
|
|
#define SMALL 5
|
|
#define MEDIUM 15
|
|
#define BIG 30
|
|
|
|
// -- Servo delta limit default. degree / sec
|
|
#define SERVO_LIMIT_DEFAULT 240
|
|
|
|
// -- Servo indexes for easy access
|
|
#define LEFT_FRONT_LEG 0
|
|
#define LEFT_REAR_LEG 1
|
|
#define RIGHT_FRONT_LEG 2
|
|
#define RIGHT_REAR_LEG 3
|
|
#define SERVO_COUNT 4
|
|
|
|
class EDARobotDog {
|
|
public:
|
|
EDARobotDog();
|
|
~EDARobotDog();
|
|
|
|
//-- EDA Dog initialization
|
|
void Init(int left_front_leg, int left_rear_leg, int right_front_leg, int right_rear_leg);
|
|
|
|
//-- Attach & detach functions
|
|
void AttachServos();
|
|
void DetachServos();
|
|
|
|
//-- Oscillator Trims
|
|
void SetTrims(int left_front_leg, int left_rear_leg, int right_front_leg, int right_rear_leg);
|
|
|
|
//-- Predetermined Motion Functions
|
|
void MoveServos(int time, int servo_target[]);
|
|
void MoveSingle(int position, int servo_number);
|
|
void OscillateServos(int amplitude[SERVO_COUNT], int offset[SERVO_COUNT], int period,
|
|
double phase_diff[SERVO_COUNT], float cycle);
|
|
|
|
//-- HOME = Dog at rest position
|
|
void Home();
|
|
bool GetRestState();
|
|
void SetRestState(bool state);
|
|
|
|
//-- Basic leg movements
|
|
void LiftLeftFrontLeg(int period = 1000, int height = 45); // 抬起左前腿
|
|
void LiftLeftRearLeg(int period = 1000, int height = 45); // 抬起左后腿
|
|
void LiftRightFrontLeg(int period = 1000, int height = 45); // 抬起右前腿
|
|
void LiftRightRearLeg(int period = 1000, int height = 45); // 抬起右后腿
|
|
|
|
//-- Dog gait movements
|
|
void Walk(float steps = 4, int period = 1000, int dir = FORWARD);
|
|
void Turn(float steps = 4, int period = 2000, int dir = LEFT);
|
|
void Sit(int period = 1500);
|
|
void Stand(int period = 1500);
|
|
void Stretch(int period = 2000);
|
|
void Shake(int period = 1000);
|
|
void Sleep(); // 睡觉动作
|
|
|
|
// -- Servo limiter
|
|
void EnableServoLimit(int speed_limit_degree_per_sec = SERVO_LIMIT_DEFAULT);
|
|
void DisableServoLimit();
|
|
|
|
private:
|
|
Oscillator servo_[SERVO_COUNT];
|
|
|
|
int servo_pins_[SERVO_COUNT];
|
|
int servo_trim_[SERVO_COUNT];
|
|
|
|
unsigned long final_time_;
|
|
unsigned long partial_time_;
|
|
float increment_[SERVO_COUNT];
|
|
|
|
bool is_dog_resting_;
|
|
|
|
void Execute(int amplitude[SERVO_COUNT], int offset[SERVO_COUNT], int period,
|
|
double phase_diff[SERVO_COUNT], float steps);
|
|
};
|
|
|
|
#endif // __EDA_DOG_MOVEMENTS_H__
|