设为首页收藏本站

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

422234 发表于 2017-5-5 14:26:56 | 显示全部楼层 [复制链接]
20 3036
前两天拿到的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'这个名字 ,就找到这个库了,安装即可
发表于 2017-5-5 15:32:54 | 显示全部楼层
赞一个!!要是能把6轴加速度计和板载3轴电子罗盘结合起来就更棒了~
回复 支持 反对

使用道具 举报

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

就是,正在看9轴融合,弄出来再发
回复 支持 反对

使用道具 举报

发表于 2017-5-5 16:09:39 | 显示全部楼层
422234 发表于 2017-5-5 15:58
就是,正在看9轴融合,弄出来再发


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

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

使用道具 举报

发表于 2017-5-5 16:24:08 | 显示全部楼层
对了,这个远程可以做到吗?比如我把小车放在A房间,但是我在B房间操控它
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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

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

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

使用道具 举报

发表于 2017-5-5 17:14:49 | 显示全部楼层
luna 发表于 2017-5-5 16:09
好棒!先赞一个!代码写的好工整~还有这用头操控小车的是你吗?

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

人家是撞到头了吧
回复 支持 反对

使用道具 举报

发表于 2017-5-5 17:21:26 | 显示全部楼层
dsweiliang 发表于 2017-5-5 17:14
人家是撞到头了吧

内裤绷带
回复 支持 反对

使用道具 举报

发表于 2017-5-6 08:38:44 | 显示全部楼层
延迟能再降低就更好了
回复 支持 反对

使用道具 举报

发表于 2017-5-7 05:40:42 | 显示全部楼层
这个厉害了
回复 支持 反对

使用道具 举报

发表于 2017-5-7 12:14:28 | 显示全部楼层
dsweiliang 发表于 2017-5-6 08:38
延迟能再降低就更好了

没有没有,还是写那个库的人厉害
回复 支持 反对

使用道具 举报

发表于 2017-5-8 11:43:43 | 显示全部楼层
我记得 MadgwickAHRS 好像有带九轴融合~
回复 支持 反对

使用道具 举报

发表于 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 吗

回复 支持 反对

使用道具 举报

发表于 2017-5-16 19:32:01 | 显示全部楼层

什么叫兼容arduino uno ?

回复 支持 反对

使用道具 举报

发表于 2017-5-24 23:48:42 | 显示全部楼层
666  期待9轴融合
回复 支持 反对

使用道具 举报

发表于 15 分钟前 | 显示全部楼层
能wifi连接就爽yy了
回复 支持 反对

使用道具 举报

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

本版积分规则 允许回帖同步到新浪微博  

推荐阅读

精华导读




公司简介| 联系我们| 小黑屋| 加入我们| 微博| 优酷| 英文网站| DF创客社区 ( 沪ICP备09038501号-4  
友情链接| 硬创邦| 花生壳社区| 模友之吧| 电子发烧友社区| 创客星球| 云汉电子社区| 电子工程网| 与非网| Arduino中文社区| 南极熊3D打印网| OneNET|

上海智位机器人有限公司  沪ICP备09038501号-4   

Powered by Discuz! X3.1

Licensed Comsenz Inc.

返回顶部 返回列表