23673浏览
查看: 23673|回复: 27

[讨论] 【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

代码:
  1. /*
  2. Name: suidon.ino
  3. Created: 2017/4/29 12:35:42
  4. Author: hb
  5. */
  6. // the setup function runs once when you press reset or power the board
  7. #include <CurieIMU.h> //6轴传感器库
  8. #include <MadgwickAHRS.h> //Madgwick滤波
  9. #include <Servo.h> //舵机库
  10. //#include "BLESerial.h" //蓝牙库
  11. Servo myservoLR; //左右舵机
  12. Servo myservoUD; //上下舵机
  13. int LR; //左右变量
  14. int UD; //上下变量
  15. Madgwick filter; //初始化对象
  16. unsigned long microsPerReading, microsPrevious;
  17. float accelScale, gyroScale;
  18. void setup() {
  19. //初始化串口
  20. Serial.begin(9600);
  21. /*
  22. pinMode(13, OUTPUT); // 配置13号引脚的LED,当连接成功后亮起
  23. BLESerial.setName("Bluno101");
  24. BLESerial.begin();
  25. while (!BLESerial);
  26. */
  27. //初始化设备
  28. CurieIMU.begin();
  29. //设置陀螺仪采样频率
  30. CurieIMU.setGyroRate(25);
  31. //设置加速度计采样频率
  32. CurieIMU.setAccelerometerRate(25);
  33. //设置加速度计范围为2G
  34. CurieIMU.setAccelerometerRange(2);
  35. //设置陀螺仪范围为250度/秒
  36. CurieIMU.setGyroRange(250);
  37. filter.begin(25);
  38. //初始化变量以更新正确率
  39. microsPerReading = 1000000 / 25;
  40. microsPrevious = micros();
  41. //陀螺仪自动校准
  42. CurieIMU.autoCalibrateGyroOffset();
  43. //加速度自动计校准
  44. CurieIMU.autoCalibrateAccelerometerOffset(X_AXIS, 0);
  45. CurieIMU.autoCalibrateAccelerometerOffset(Y_AXIS, 0);
  46. CurieIMU.autoCalibrateAccelerometerOffset(Z_AXIS, 1);
  47. myservoLR.attach(7); //D7控制L R
  48. myservoUD.attach(8); //D8控制U D
  49. //舵机归零
  50. myservoLR.write(90);
  51. myservoUD.write(90);
  52. delay(15);
  53. }
  54. // the loop function runs over and over again until power down or reset
  55. void loop() {
  56. //加速度计和陀螺仪原始数据
  57. int aix, aiy, aiz; //加速度
  58. int gix, giy, giz; //陀螺仪
  59. //转换后的数据
  60. float ax, ay, az;
  61. float gx, gy, gz;
  62. //处理后的数据
  63. float roll, pitch, heading;
  64. //pitch是上下角度 heading是左右角度 我只使用了两轴云台,不需要roll的自旋参数,有兴趣可以自己加
  65. unsigned long microsNow;
  66. //检查是否要读取数据并更新过滤器
  67. microsNow = micros();
  68. if (microsNow - microsPrevious >= microsPerReading) {
  69. //得到加速度计和陀螺仪的姿态数据
  70. CurieIMU.readMotionSensor(aix, aiy, aiz, gix, giy, giz);
  71. //从原始数据转换为重力和度/秒单位
  72. ax = convertRawAcceleration(aix);
  73. ay = convertRawAcceleration(aiy);
  74. az = convertRawAcceleration(aiz);
  75. gx = convertRawGyro(gix);
  76. gy = convertRawGyro(giy);
  77. gz = convertRawGyro(giz);
  78. //使用Madgwick库中的功能函数updateIMU()滤波
  79. filter.updateIMU(gx, gy, gz, ax, ay, az);
  80. roll = filter.getRoll();
  81. pitch = filter.getPitch();
  82. heading = filter.getYaw();
  83. //打印3轴角度,可有可无
  84. Serial.print("Orientation: ");
  85. Serial.print(heading);
  86. Serial.print(" ");
  87. Serial.print(pitch);
  88. Serial.print(" ");
  89. Serial.println(roll);
  90. //增加以前的时间,所以我们保持适当的速度
  91. microsPrevious = microsPrevious + microsPerReading;
  92. }
  93. delay(30);
  94. LR = heading;
  95. UD = roll; //这里放的时候改了一下 roll 和 pitch都可以
  96. if (UD <= 0)
  97. {
  98. UD = 90 + 0 - UD;
  99. }
  100. else
  101. {
  102. UD = 90 - UD;
  103. }
  104. if (LR >= 90 && LR <= 270)
  105. {
  106. LR = LR - 90;
  107. }
  108. else
  109. {
  110. if (LR < 90)
  111. {
  112. LR = 0;
  113. }
  114. else
  115. {
  116. LR = 270;
  117. }
  118. }
  119. Serial.print(" ");
  120. Serial.print(LR);
  121. Serial.print(" ");
  122. Serial.println(UD);
  123. /*失败的蓝牙部分
  124. while (BLESerial.operator bool()) {
  125. digitalWrite(13, HIGH);
  126. while (Serial.available()) {
  127. BLESerial.write(LR);
  128. BLESerial.write(UD);
  129. }
  130. }
  131. digitalWrite(13, LOW);
  132. */
  133. myservoLR.write(LR);
  134. myservoUD.write(UD);
  135. delay(15);
  136. }
  137. //加速度计范围
  138. float convertRawAcceleration(int aRaw) {
  139. float a = (aRaw * 2.0) / 32768.0;
  140. return a;
  141. }
  142. //陀螺仪范围
  143. float convertRawGyro(int gRaw) {
  144. float g = (gRaw * 250.0) / 32768.0;
  145. return g;
  146. }
复制代码

库:#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模块,然后路由器中继就可以了你从上海看我也没问题
回复

使用道具 举报

luna  初级技神

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

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


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

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

使用道具 举报

422234  高级技师
 楼主|

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

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

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

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

使用道具 举报

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

好好借鉴
回复

使用道具 举报

好奇吖斌  高级技师

发表于 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下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

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

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

mail