读取GY-951模块数据(Linux)

参考:https://github.com/Razor-AHRS/razor-9dof-ahrs/wiki/Tutorial#sensor-calibration

链接中使用的硬件是SparkFun“9DOF Razor IMU”,本文使用的是GY-951,同样适用。

硬件连接方式:

GY-951模块 + Mini FT232RL(USB转串口模块)

 

设置软件:

从https://github.com/Razor-AHRS/razor-9dof-ahrs/tree/master 中下载并解压Razor AHRS固件。

下载安装Arduino软件,解压后进入文件夹,打开终端输入 ./install.sh

  • 从下载的Razor AHRS固件包中Arduino/Razor_AHRS/Razor_AHRS.ino使用Arduino打开文件。
  • Arduino中
    • 看看Razor_AHRS.ino文件的顶部,它包含有关固件的有用信息。
    • 此外还有一个部分标"USER SETUP AREA"有你可以设置固件默认值的地方。
      • 你必须选择你正在使用的硬件"HARDWARE OPTIONS"!(将#define HW__VERSION_CODE 10736 前注释去掉)
    • 转到"Tools"→ "Board"并选择"Arduino Pro or Pro Mini 处理器选(3.3v, 8mhz) w/ATmega328"
    • 转到"Tools"→ "Serial Port"并选择端口(/dev/ttyUSB0)。
    • "File"并击中"Upload to I/O Board"。在Arduino代码窗口底部的一小段时间之后"Done uploading"
  • 打开Arduino串行监视器,将波特率设置为57600。

若上传时出现权限错误

avrdude: ser_open(): can't open device "/dev/ttyUSB0": Permission denied

可在终端输入
sudo usermod -a -G dialout 用户名
sudo chmod a+rw /dev/ttyUSB0

 

 

传感器校准

 

在校准前几分钟给芯片供电可能会很好,传感器可以预热。第一次校准传感器可能有点棘手,但我们先来看看:

 

  • Arduino/Razor_AHRS/Razor_AHRS.ino使用Arduino打开并找到部分"USER SETUP AREA""SENSOR CALIBRATION"。这是您稍后放置校准值的地方。

  • GY-951连接到您的计算机,在Arduino中设置正确的串行端口并打开串行监视器

  • 如果你没有更改固件默认值,你应该看到很多这样的输出:

      #YPR=-155.73,-76.48,-129.51
    
  • 通过发送字符串将固件输出模式设置为校准#oc。你现在应该看到这样的输出:

      accel x,y,z (min/max) = -5.00/-1.00  25.00/29.00  225.00/232.00
    

 

  1. 校准加速度计
    • 我们将尝试在每个轴上找到地球引力的最小和最大输出值。当您移动电路板时,请将其缓慢移动,因此您应用的电路板的加速度越小越好。我们只想要纯粹的引力!
    • 拿起电路板并用x轴垂直指向。当你这样做时,你可以看到x-maximum(第二个值)越来越大。
    • 保持电路板静止不动,然后重新发送重置测量#oc
    • 现在小心地将板沿各个方向稍微倾斜一点,直到数值不再变大为止并写下x最大值。
    • 对另一侧(x轴向上)做同样的事情来获得x最小值:将其移到原位,发送#oc重置测量值,找到x最小值并写下来。
    • 对z轴(向上和向上)和y轴(向右和向左)做同样的事情。
      • 如果您认为通过抖动或移动电路板使测量结果变得过于混乱,您可以随时通过发送进行重置#oc
    • 您现在应该具有所有最小值/最大值。把它们放进去Razor_AHRS.ino (Razor_AHRS.ino的第245行开始的代码有详细校正方法)
    • 注意:这样做时你必须非常小心!即使用手指轻轻敲击电路板也会使测量变得困难,并导致错误的校准。#oc经常使用并仔细检查您的最小/最大值)
  2. 校准磁力计
    • 这一次,可以尽可能多地摇动电路板,但是请远离有磁场的电子设备,以免干扰。

    • 我们仍然是加速计的校准模式。发送#on,将校准移动到下一个传感器,即磁力计。

    • 注意: 本节仅供参考,但您应该使用较新的“扩展磁强计校准(详细请看参考链接),因为它可以产生更好的结果!您可以跳过该步骤并继续使用陀螺仪。

    • 我们将尝试为每个轴上的地球磁场找到最小和最大输出值。这基本上像校准加速度计一样工作,除了地球的磁场没有直线下降。根据你目前星球上的哪个地方,它以一定的角度指向北半球(南半球)或北半球(北半球)。这个角度被称为倾斜度。此外,真实的地理北极可能会有微小的偏差,这就是所谓的赤纬。以下描述假定您正在校准北半球的磁力计。

    • 将电路板像x轴一样放在指南针上(记住:x轴=向前,指向连接器孔)指向北方。然后开始围绕东西轴旋转棋盘,以便它开始朝下。观察串行监视器中的x最大值(第二个值),您会注意到当您将电路板的x轴与地球的磁场对齐时。停止旋转,然后再向各个方向稍微倾斜,直到数值不再变大。

    • 为相反的方面做同样的事情来获得x最小值:第一个点向北,然后向下。

    • 对于磁强计,我们不需要在两次#oc测量之间进行重置。

    • 对z轴(上/下)和y轴(左/右)做同样的事情。

      • 注意:电路板围绕要测量的轴旋转并不重要,只是它指向正确的方向。例如,当您开始测量z轴时,x轴指向上或向下或向左或向右都无关紧要。
    • 你现在应该在串口监视器中有这样的东西:

        magn x,y,z (min/max) = -564.00/656.00  -585.00/635.00  -550.00/564.00
      

      将这些值放入Razor_AHRS.ino

  3. 校准陀螺仪
    • 仍然将电路板放在桌子上。

    • 我们仍然是磁力计的校准模式。发送#on,这会将校准移动到下一个传感器,即陀螺仪。

    • 等待10秒钟,不要移动电路板它将收集和平均所有三个轴上陀螺仪的噪音。

    • 你现在应该有这样的输出:

        gyro x,y,z (current/average) = -29.00/-27.98  102.00/100.51  -5.00/-5.85
      
      • 如果您认为您通过晃动或移动电路板搞乱了测量,则可以通过发送进行重置#oc
    • 取每一对的第二个值并将其放入Razor_AHRS.ino

 

  • 完成:)

 


 

Linux C++ Interface

https://github.com/Razor-AHRS/razor-9dof-ahrs/tree/master/C%2B%2B

 

进入C++文件中

   编译测试程序

g++ Example.cpp RazorAHRS.cpp -Wall -D_REENTRANT -lpthread -o example

执行:
./example



若出现报错:Did you set your serial port in Example.cpp?
先在Example.cpp中将串口名改为 “/dev/ttyUSB0”

再在终端输入:
sudo usermod -a -G dialout 用户名
sudo chmod a+rw /dev/ttyUSB0
(https://vps123.info/ubuntu-arduino-ide-err-open-device-permission-denied/)

参考:https://www.cnblogs.com/21207-iHome/p/7832355.html
进一步工作:该部分可以读取加速度计,陀螺仪,磁力计的数据,所以为了更形象的显示IMU姿态,可以下载rviz_imu_plugin插件(http://wiki.ros.org/rviz_imu_plugin),话题为(http://docs.ros.org/api/sensor_msgs/html/msg/Imu.html)







也可参考:http://www.corvin.cn/428.html


欢迎交流。

 

转载于:https://www.cnblogs.com/112358nizhipeng/p/9165027.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:https://dhexx.cn/news/show-17938.html

如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网进行投诉反馈,一经查实,立即删除!


相关文章:

  • Educational Codeforces Round 45 (Rated for Div. 2)
  • java byte数组与16进制间的相互转换
  • 解决关于phpstorm打开速度很慢的问题
  • DeepWalk学习
  • Mysql 查询列名
  • c# 定义别名
  • appium工作原理及启动方式
  • python读、写、修改、追写excel文件(xlrd / xlwt / xlutils / openpyxl)
  • 类属性与实例属性
  • es6基础(4)--字符串扩展
  • 小项目: low版本的 员工信息程序:
  • ActiveX 控件重绘无效问题,用CClientDC 而不是CPaintDC
  • VS中为非控制台程序提供控制台输出窗口
  • TCPClient例子(3)基于委托和事件的TcpHelper程序
  • Java--基础命名空间
  • RabbitMQ入门:主题路由器(Topic Exchange)
  • Verilog基础知识0(`define、parameter、localparam三者的区别及举例)
  • React后台管理系统-订单管理
  • window.open('') 火狐,IE事件冒泡处理,点击事件冒泡处理
  • Microsoft.ACE.OLEDB.12.0 读取混合列
  • Redis笔记 -- 链表和链表节点的API函数(三)
  • 任务墙(7月1日)
  • ZigBee协议栈解析
  • 366 斐波那契数列
  • SQL Server 机考,用T-SQL编写 简单实例
  • iOS商城demo、音乐播放器、视频通话、自定义搜索、转场动画等源码
  • yum离线安装rpm包
  • 知乎十万级容器规模的Java分布式镜像仓库实践
  • 对String值不可变的理解以及String类型的引用传递问题
  • npm安装为什么要安装gyp各种报错呢
  • 【转】requests、BeautifulSoup使用总结
  • RMAN 数据库克隆文件位置转换方法
  • CentOS随笔 - 4.CentOS7安装MySql 5.5.60(下载 tar 方式安装)
  • tensorflow输出
  • 关于数据迁移的一些经验总结
  • visual studio 2010 c++ 打印 Hello world
  • java开发注意事项
  • redis和couchbase的比较
  • java基础47 装饰着模式设计
  • ASP.NET CORE的H5上传
  • 了解一些分词工具
  • Intel收购半导体设计公司eASIC
  • 二进制,八进制,十六进制,十进制之间的换算
  • (七)SSH认证
  • ubuntu安装dockers和images:dvwa
  • Linux设备管理(三):sysfs文件系统的功能及其应用
  • 阿里架构师的日志:带你快速理解微服务架构;理解微服务架构的核心
  • 事件的拖拽一
  • sql server 2012 复制数据库向导出现TransferDatabasesUsingSMOTransfer()异常
  • Codeforces 1009E Intercity Travelling 【期望】【概率】