舵机云台实现体感姿态跟随功能

1. 功能说明

 本文示例将实现R207样机舵机云台根据六轴陀螺仪传感器数据实现姿态跟随的功能。

 

2. 电子硬件

      在这个示例中,我们采用了以下硬件,请大家参考:

主控板

Basra主控板(兼容Arduino Uno)

扩展板

Bigfish2.1扩展板

传感器 六轴陀螺仪
电池 7.4V锂电池

 电路连接说明:

      ① 六轴陀螺仪传感器连接在Bigfish扩展板的GND、VCC(3.3V)、RX、TX;

      ② 底座舵机0号连接在Bigfish扩展板的(GND、VCC、D4);

      ③ 摆动舵机1号连接在Bigfish扩展板的(GND、VCC、D3)。

 3. 功能实现

      编程环境:Arduino 1.8.19

      实现思路:舵机云台可以根据陀螺仪传感器的数据实现姿态跟随。

六轴陀螺仪实物与空间坐标系的对应关系:

 3.1 测试数据

     ① 测试舵机云台的两个舵机初始角度,记录数据;

     ② 测试六轴陀螺仪传感器的姿态数据。

下表是本实验中测试出的实验数据,大家可参考格式,测试出自己的实验数据。

物料

测试数据

舵机0

0   ---   180‍

舵机1

0   ---   110‍

陀螺仪的加速度包X轴数据 从左到右转动陀螺仪,数据从(+1.01,-1.05)逐渐减小;中值为0;

陀螺仪的加速度包Y轴数据

沿Y轴俯仰陀螺仪时,数据从(-1.15,1.01)逐渐增大;中值为0;

 3.2 示例程序

     根据已测数据编写程序,下面提供一个参考例程(body_feeling_attitude.ino):

/*------------------------------------------------------------------------------------

  版权说明:Copyright 2023 Robottime(Beijing) Technology Co., Ltd. All Rights Reserved.

           Distributed under MIT license.See file LICENSE for detail or copy at

           https://opensource.org/licenses/MIT

           by 机器谱 2023-04-24 https://www.robotway.com/

  ------------------------------*/

/*   

    功能:云台可以根据陀螺仪传感器的数据实现姿态跟随

    接线:陀螺仪传感器接在扩展板的Gnd、Vcc(3.3v)、RX、TX;

          底座舵机0号接在扩展板的(Gnd、Vcc、D4);

          摆动舵机1号接在扩展板的(Gnd、Vcc、D3)

*/

#include<Servo.h>   //调用舵机库函数

#include<Math.h>

Servo myservo[2];   //声明两个舵机

int myservopin[2] = {4, 3}; // 定义舵机的引脚

#define Gyroscope_left_LimitAngle_X   -1.05   //读取到陀螺仪 X 轴向左偏的极限数值

#define Gyroscope_Right_LimitAngle_X   1.01   //读取到陀螺仪 X 轴向右偏的极限数值

#define Gyroscope_Middle_LimitAngle_X   0    //读取到陀螺仪 X 轴平放时的数值

#define Gyroscope_left_LimitAngle_Y   -1.05   //读取到陀螺仪 Y 轴向左偏的极限数值

#define Gyroscope_Right_LimitAngle_Y   1.01   //读取到陀螺仪 Y 轴向右偏的极限数值

#define Gyroscope_Middle_LimitAngle_Y   0    //读取到陀螺仪 Y 轴平放时的数值


#define Servo_One_Mix_Angle 0       //1号舵机最小角度

#define Servo_One_Max_Angle 180     //1号舵机最大角度

#define Servo_Two_Mix_Angle 0       //2号舵机最小角度

#define Servo_Two_Max_Angle 110     //2号舵机最大角度

#define Servo_Speed 10              //舵机速度


unsigned char Re_buf[11],counter=0;

unsigned char sign=0;

float a[3],w[3],angle[3],T;

int servo_angle_current[2] = {0,0};

float value_init[2]={90,90};

float f = 10.0;                     //舵机的频率


void setup()

{

   Serial.begin(115200);           //打开串口,并设置波特率为115200

   myservo[0].attach(myservopin[0]);

   myservo[1].attach(myservopin[1]);

}


void loop()

{

   Get_gyroscope_And_Control();   //根据陀螺仪传感器的数据实现姿态跟随

}

注意:本次实验测试数据对应的程序位置如下图所示,大家可尝试输入自己的实验数据参数,修改这段程序,使舵机云台的姿态跟随更加流畅。

体感姿态跟随-程序源代码资料内容详见 舵机云台-体感姿态跟随

猜你喜欢

转载自blog.csdn.net/Robotway/article/details/130728483