feat: Add project support for the EDA course case team (#1758)
* 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
This commit is contained in:
@ -0,0 +1,105 @@
|
||||
#ifndef __EDA_ROBOT_MAX_MOVEMENTS_H__
|
||||
#define __EDA_ROBOT_MAX_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 BOTH 0
|
||||
#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_LEG 0
|
||||
#define RIGHT_LEG 1
|
||||
#define LEFT_FOOT 2
|
||||
#define RIGHT_FOOT 3
|
||||
#define LEFT_HAND 4
|
||||
#define RIGHT_HAND 5
|
||||
#define SERVO_COUNT 6
|
||||
|
||||
class EdaRobot {
|
||||
public:
|
||||
EdaRobot();
|
||||
~EdaRobot();
|
||||
|
||||
//-- EdaRobot initialization
|
||||
void Init(int left_leg, int right_leg, int left_foot, int right_foot, int left_hand = -1,
|
||||
int right_hand = -1);
|
||||
//-- Attach & detach functions
|
||||
void AttachServos();
|
||||
void DetachServos();
|
||||
|
||||
//-- Oscillator Trims
|
||||
void SetTrims(int left_leg, int right_leg, int left_foot, int right_foot, int left_hand = 0,
|
||||
int right_hand = 0);
|
||||
|
||||
//-- 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 = EdaRobot at rest position
|
||||
void Home(bool hands_down = true);
|
||||
bool GetRestState();
|
||||
void SetRestState(bool state);
|
||||
|
||||
//-- Predetermined Motion Functions
|
||||
void Jump(float steps = 1, int period = 2000);
|
||||
|
||||
void Walk(float steps = 4, int period = 1000, int dir = FORWARD, int amount = 0);
|
||||
void Turn(float steps = 4, int period = 2000, int dir = LEFT, int amount = 0);
|
||||
void Bend(int steps = 1, int period = 1400, int dir = LEFT);
|
||||
void ShakeLeg(int steps = 1, int period = 2000, int dir = RIGHT);
|
||||
|
||||
void UpDown(float steps = 1, int period = 1000, int height = 20);
|
||||
void Swing(float steps = 1, int period = 1000, int height = 20);
|
||||
void TiptoeSwing(float steps = 1, int period = 900, int height = 20);
|
||||
void Jitter(float steps = 1, int period = 500, int height = 20);
|
||||
void AscendingTurn(float steps = 1, int period = 900, int height = 20);
|
||||
|
||||
void Moonwalker(float steps = 1, int period = 900, int height = 20, int dir = LEFT);
|
||||
void Crusaito(float steps = 1, int period = 900, int height = 20, int dir = FORWARD);
|
||||
void Flapping(float steps = 1, int period = 1000, int height = 20, int dir = FORWARD);
|
||||
|
||||
// -- 手部动作
|
||||
void HandsUp(int period = 1000, int dir = 0); // 双手举起
|
||||
void HandsDown(int period = 1000, int dir = 0); // 双手放下
|
||||
void HandWave(int period = 1000, int dir = LEFT); // 挥手
|
||||
void HandWaveBoth(int period = 1000); // 双手同时挥手
|
||||
|
||||
// -- 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_edarobot_resting_;
|
||||
bool has_hands_; // 是否有手部舵机
|
||||
|
||||
void Execute(int amplitude[SERVO_COUNT], int offset[SERVO_COUNT], int period,
|
||||
double phase_diff[SERVO_COUNT], float steps);
|
||||
};
|
||||
|
||||
#endif // __EDA_ROBOT_MAX_MOVEMENTS_H__
|
||||
Reference in New Issue
Block a user