【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'这个名字 ,就找到这个库了,安装即可。
luna 发表于 2017-5-5 16:24
对了,这个远程可以做到吗?比如我把小车放在A房间,但是我在B房间操控它 ...
蓝牙还没调通,调通后就可以远程。两个不同的房间的话需要WIFI模块,然后路由器中继就可以了{:5_190:}你从上海看我也没问题 422234 发表于 2017-5-5 15:58
就是,正在看9轴融合,弄出来再发
好棒!先赞一个!代码写的好工整~还有这用头操控小车的是你吗?{:5_159:}
PS:忍不住给内裤发型截个图留念
luna 发表于 2017-5-5 16:09
好棒!先赞一个!代码写的好工整~还有这用头操控小车的是你吗?
PS:忍不住给内裤发型截个图留 ...
老师的,上面有个2轴云台,方便直接就用了{:5_173:}为什么要给特写 赞一个!!要是能把6轴加速度计和板载3轴电子罗盘结合起来就更棒了~ O_oYYQ 发表于 2017-5-5 15:32
赞一个!!要是能把6轴加速度计和板载3轴电子罗盘结合起来就更棒了~
就是,正在看9轴融合,弄出来再发
对了,这个远程可以做到吗?比如我把小车放在A房间,但是我在B房间操控它 luna 发表于 2017-5-5 16:09
好棒!先赞一个!代码写的好工整~还有这用头操控小车的是你吗?
PS:忍不住给内裤发型截个图留 ...
人家是撞到头了吧 dsweiliang 发表于 2017-5-5 17:14
人家是撞到头了吧
内裤绷带:lol 延迟能再降低就更好了 :lol 这个厉害了 dsweiliang 发表于 2017-5-6 08:38
延迟能再降低就更好了
没有没有,还是写那个库的人厉害
John管宁川 发表于 2017-5-8 11:43
我记得 MadgwickAHRS 好像有带九轴融合~
我完了去查查
好好借鉴{:5_179:} 做个头追好玩 兼容arduino uno r3 吗
北极星泪 发表于 2017-5-16 13:55
兼容arduino uno r3 吗
什么叫兼容arduino uno ?
666期待9轴融合 能wifi连接就爽yy了
页:
[1]
2