422234 发表于 2017-5-5 14:26:56

【CurieNano试用】随动摄像头

前两天拿到的CurieNano做了个小东西,先放上来。
随动云台的原理是用CurieNano采集角度数据,然后发给云台舵机,使舵机可以随着控制板的运动而运动。{:5_192:}
接线图
D7是左右 D8是上下   PS画的很丑,没元件资源{:5_116:}
材料清单
CurieNano*1
舵机*2(也可加第三轴)
舵机云台架*1
bluno*1(还没调好,备用)

这个主要是控制云台的,云台上的东西你们随便搭吧,什么摄像头,机枪之类的{:5_172:}



   效果

跟随头部运动{:5_127:}无视掉我的内裤发型吧,勒的。

摄像头视角


问题:
最大的问题是不能无线传数据,本来想着用DFR0453 CurieNano的BLE和BLUNO蓝牙通讯,然后用BLUNO控制舵机的,但是CurieNano的BLE和BLUNO怎么也调不好{:5_140:}卡了好几天

左右角度会漂,如果左右移动太快的画角度会漂。。。。。其他两轴不漂。还没滤波,有点抖动,等有时间滤一下波,让小角度变化不会输出。

这次的东西只用了六个轴,将 加速度计和陀螺仪的数据融合,用的是MadgwickAHRS库还没做到9轴融合,正在学习卡尔曼滤波,努力将九轴数据融合,现在先放上来让大家解解馋,也希望大神解决后可以分享方法!!!

分享加速度计和陀螺仪的原理和融合资料:http://blog.csdn.net/bbzz2/article/details/51354267
代码:
/*
Name: suidon.ino
Created: 2017/4/29 12:35:42
Author: hb
*/
// the setup function runs once when you press reset or power the board
#include <CurieIMU.h> //6轴传感器库
#include <MadgwickAHRS.h> //Madgwick滤波
#include <Servo.h> //舵机库
//#include "BLESerial.h" //蓝牙库
Servo myservoLR; //左右舵机
Servo myservoUD; //上下舵机
int LR; //左右变量
int UD; //上下变量


Madgwick filter; //初始化对象
unsigned long microsPerReading, microsPrevious;
float accelScale, gyroScale;

void setup() {
//初始化串口
Serial.begin(9600);
/*
pinMode(13, OUTPUT); // 配置13号引脚的LED,当连接成功后亮起
BLESerial.setName("Bluno101");
BLESerial.begin();
while (!BLESerial);
*/
//初始化设备
CurieIMU.begin();

//设置陀螺仪采样频率
CurieIMU.setGyroRate(25);
//设置加速度计采样频率
CurieIMU.setAccelerometerRate(25);
//设置加速度计范围为2G
CurieIMU.setAccelerometerRange(2);
//设置陀螺仪范围为250度/秒
CurieIMU.setGyroRange(250);

filter.begin(25);

//初始化变量以更新正确率
microsPerReading = 1000000 / 25;
microsPrevious = micros();

//陀螺仪自动校准
CurieIMU.autoCalibrateGyroOffset();

//加速度自动计校准
CurieIMU.autoCalibrateAccelerometerOffset(X_AXIS, 0);
CurieIMU.autoCalibrateAccelerometerOffset(Y_AXIS, 0);
CurieIMU.autoCalibrateAccelerometerOffset(Z_AXIS, 1);

myservoLR.attach(7); //D7控制L R
myservoUD.attach(8); //D8控制U D
//舵机归零
myservoLR.write(90);
myservoUD.write(90);
delay(15);


}

// the loop function runs over and over again until power down or reset
void loop() {

//加速度计和陀螺仪原始数据
int aix, aiy, aiz; //加速度
int gix, giy, giz; //陀螺仪
//转换后的数据
float ax, ay, az;
float gx, gy, gz;
//处理后的数据
float roll, pitch, heading;
//pitch是上下角度 heading是左右角度 我只使用了两轴云台,不需要roll的自旋参数,有兴趣可以自己加

unsigned long microsNow;

//检查是否要读取数据并更新过滤器
microsNow = micros();
if (microsNow - microsPrevious >= microsPerReading) {
//得到加速度计和陀螺仪的姿态数据
CurieIMU.readMotionSensor(aix, aiy, aiz, gix, giy, giz);

//从原始数据转换为重力和度/秒单位
ax = convertRawAcceleration(aix);
ay = convertRawAcceleration(aiy);
az = convertRawAcceleration(aiz);
gx = convertRawGyro(gix);
gy = convertRawGyro(giy);
gz = convertRawGyro(giz);
//使用Madgwick库中的功能函数updateIMU()滤波
filter.updateIMU(gx, gy, gz, ax, ay, az);
roll = filter.getRoll();
pitch = filter.getPitch();
heading = filter.getYaw();

//打印3轴角度,可有可无
Serial.print("Orientation: ");
Serial.print(heading);
Serial.print(" ");
Serial.print(pitch);
Serial.print(" ");
Serial.println(roll);


//增加以前的时间,所以我们保持适当的速度
microsPrevious = microsPrevious + microsPerReading;
}
delay(30);
LR = heading;
UD = roll; //这里放的时候改了一下 roll 和 pitch都可以
if (UD <= 0)
{
UD = 90 + 0 - UD;
}
else
{
UD = 90 - UD;
}
if (LR >= 90 && LR <= 270)
{
LR = LR - 90;
}
else
{
if (LR < 90)
{
LR = 0;
}
else
{
LR = 270;
}
}

Serial.print(" ");
Serial.print(LR);
Serial.print(" ");
Serial.println(UD);
/*失败的蓝牙部分
while (BLESerial.operator bool()) {
digitalWrite(13, HIGH);
while (Serial.available()) {
BLESerial.write(LR);
BLESerial.write(UD);
}
}
digitalWrite(13, LOW);
*/
myservoLR.write(LR);
myservoUD.write(UD);
delay(15);
}

//加速度计范围
float convertRawAcceleration(int aRaw) {
float a = (aRaw * 2.0) / 32768.0;
return a;
}
//陀螺仪范围
float convertRawGyro(int gRaw) {
float g = (gRaw * 250.0) / 32768.0;
return g;
}

库:#include <CurieIMU.h>安装101的那个板后就会有
#include <Servo.h>舵机库,貌似IDE自带
#include <MadgwickAHRS.h> 先打开Arduino IDE,然后依次点击Sketch -> Include Library -> Manage Libraries"。接着搜索'Madgwick'这个名字 ,就找到这个库了,安装即可。

422234 发表于 2017-5-5 16:54:50

luna 发表于 2017-5-5 16:24
对了,这个远程可以做到吗?比如我把小车放在A房间,但是我在B房间操控它 ...

蓝牙还没调通,调通后就可以远程。两个不同的房间的话需要WIFI模块,然后路由器中继就可以了{:5_190:}你从上海看我也没问题

luna 发表于 2017-5-5 16:09:39

422234 发表于 2017-5-5 15:58
就是,正在看9轴融合,弄出来再发

好棒!先赞一个!代码写的好工整~还有这用头操控小车的是你吗?{:5_159:}

PS:忍不住给内裤发型截个图留念

422234 发表于 2017-5-5 16:55:57

luna 发表于 2017-5-5 16:09
好棒!先赞一个!代码写的好工整~还有这用头操控小车的是你吗?

PS:忍不住给内裤发型截个图留 ...

老师的,上面有个2轴云台,方便直接就用了{:5_173:}为什么要给特写

O_oYYQ 发表于 2017-5-5 15:32:54

赞一个!!要是能把6轴加速度计和板载3轴电子罗盘结合起来就更棒了~

422234 发表于 2017-5-5 15:58:57

O_oYYQ 发表于 2017-5-5 15:32
赞一个!!要是能把6轴加速度计和板载3轴电子罗盘结合起来就更棒了~

就是,正在看9轴融合,弄出来再发

luna 发表于 2017-5-5 16:24:08

对了,这个远程可以做到吗?比如我把小车放在A房间,但是我在B房间操控它

dsweiliang 发表于 2017-5-5 17:14:49

luna 发表于 2017-5-5 16:09
好棒!先赞一个!代码写的好工整~还有这用头操控小车的是你吗?

PS:忍不住给内裤发型截个图留 ...

人家是撞到头了吧

luna 发表于 2017-5-5 17:21:26

dsweiliang 发表于 2017-5-5 17:14
人家是撞到头了吧

内裤绷带:lol

dsweiliang 发表于 2017-5-6 08:38:44

延迟能再降低就更好了

hnyzcj 发表于 2017-5-6 19:41:58

:lol

hnyzcj 发表于 2017-5-7 05:40:42

这个厉害了

422234 发表于 2017-5-7 12:14:28

dsweiliang 发表于 2017-5-6 08:38
延迟能再降低就更好了

没有没有,还是写那个库的人厉害

John管宁川 发表于 2017-5-8 11:43:43

422234 发表于 2017-5-8 19:17:14

John管宁川 发表于 2017-5-8 11:43
我记得 MadgwickAHRS 好像有带九轴融合~

我完了去查查

安卓机器人 发表于 2017-5-8 22:36:06

好好借鉴{:5_179:}

好奇吖斌 发表于 2017-5-15 21:49:31

做个头追好玩

北极星泪 发表于 2017-5-16 13:55:50

兼容arduino uno r3 吗

422234 发表于 2017-5-16 19:32:01

北极星泪 发表于 2017-5-16 13:55
兼容arduino uno r3 吗

什么叫兼容arduino uno ?

陈占富 发表于 2017-5-24 23:48:42

666期待9轴融合

zgb1917 发表于 2017-10-18 22:49:44

能wifi连接就爽yy了
页: [1] 2
查看完整版本: 【CurieNano试用】随动摄像头