查看: 3842|回复: 21

[应用教程] 【CurieNano试用】随动摄像头

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

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



20170505135300.gif    效果

20170505135422.gif   跟随头部运动无视掉我的内裤发型吧,勒的。

摄像头视角
20170505140021.gif

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

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

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

分享加速度计和陀螺仪的原理和融合资料:http://blog.csdn.net/bbzz2/article/details/51354267

代码:

[C++] 纯文本查看 复制代码
/*
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'这个名字 ,就找到这个库了,安装即可

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:09:39

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


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

PS:忍不住给内裤发型截个图留念
5AB6D9CE-66BB-4514-995A-6379B882EF7C.png
回复 支持 反对

使用道具 举报

luna  管理员

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

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

使用道具 举报

422234  中级技师
 楼主|

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

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

蓝牙还没调通,调通后就可以远程。两个不同的房间的话需要WIFI模块,然后路由器中继就可以了你从上海看我也没问题
回复 支持 反对

使用道具 举报

422234  中级技师
 楼主|

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

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

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

老师的,上面有个2轴云台,方便直接就用了为什么要给特写
回复 支持 反对

使用道具 举报

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
人家是撞到头了吧

内裤绷带
回复 支持 反对

使用道具 举报

dsweiliang  版主

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

延迟能再降低就更好了
回复 支持 反对

使用道具 举报

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

我记得 MadgwickAHRS 好像有带九轴融合~
回复 支持 反对

使用道具 举报

422234  中级技师
 楼主|

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

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

我完了去查查
回复 支持 反对

使用道具 举报

安卓机器人  高级技匠

发表于 2017-5-8 22:36:06

好好借鉴
回复 支持 反对

使用道具 举报

好奇吖斌  中级技师

发表于 2017-5-15 21:49:31

做个头追好玩
回复 支持 反对

使用道具 举报

北极星泪  学徒

发表于 2017-5-16 13:55:50

兼容arduino uno r3 吗

回复 支持 反对

使用道具 举报

422234  中级技师
 楼主|

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


什么叫兼容arduino uno ?

回复 支持 反对

使用道具 举报

陈占富  见习技师

发表于 2017-5-24 23:48:42

666  期待9轴融合
回复 支持 反对

使用道具 举报

zgb1917  见习技师

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

能wifi连接就爽yy了
回复 支持 反对

使用道具 举报

12下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
wifi气象站

硬件清单

btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2016 Comsenz Inc. Powered by Discuz! X3.4 Licensed

QQ