Initial commit
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
#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 GetCurrentPositions(int pos[SERVO_COUNT]);
|
||||
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__
|
||||
Reference in New Issue
Block a user