依据MPU6050六轴运动传感器的原始数据,计算设备当前状态的加速度、角速度和倾斜角度。本项目的主控芯片是nRF52832(SDK:Nordic SDK 17.0.2.),但算法通用,读取原始数据的完整工程来自艾克姆,已上传个人主页。
一般在唤醒MPU6050之前都会用MCU读一下设备地址以检测设备以及通信是否正常:
// !< WHO_AM_I register identifies the device. Expected value is 0x68.
#define ADDRESS_WHO_AM_I (0x75U)
bool mpu6050_verify_product_id(void)
{
uint8_t who_am_i;
if (mpu6050_register_read(ADDRESS_WHO_AM_I, &who_am_i, 1))
{
if (who_am_i != MPU6050_WHO_AM_I)
{
return false;
}
else
{
return true;
}
}
else
{
return false;
}
}
上述函数返回true后,才可以开始配置寄存器:
#define MPU_PWR_MGMT1_REG 0x6B //电源管理寄存器1
#define MPU_SAMPLE_RATE_REG 0x19 //采样频率分频器
#define MPU_CFG_REG 0x1A //配置寄存器
#define MPU_INT_EN_REG 0x38 //中断使能寄存器
#define MPU_GYRO_CFG_REG 0x1B //陀螺仪配置寄存器
#define MPU_ACCEL_CFG_REG 0x1C //加速度计配置寄存器
//唤醒MPU6050
(void)mpu6050_register_write(MPU_PWR_MGMT1_REG , 0x00);
//设置采样率(Sample Rate = Gyroscope Output Rate / (1 + SMPLRT_DIV)):1KHz
(void)mpu6050_register_write(MPU_SAMPLE_RATE_REG , 0x07);
//设置低通滤波器,截止频率是1K,带宽是5K
(void)mpu6050_register_write(MPU_CFG_REG , 0x06);
//关闭中断
(void)mpu6050_register_write(MPU_INT_EN_REG, 0x00);
//陀螺仪自检及测量范围,典型值:0x18(不自检,2000deg/s)
(void)mpu6050_register_write(MPU_GYRO_CFG_REG , 0x18);
//配置加速度传感器量程 +-2G s,不自检
(void)mpu6050_register_write(MPU_ACCEL_CFG_REG,0x00);
某个轴的加速度 a = Range * G * ACC / 32768 . 其中G是当地重力加速度,ACC是该轴的加速度原始数据,Range是由配置加速度量程时写入的参数决定的,关系如下:


根据初始化时写入的数据,不自检,AFS_SEL = 0x00,这里Range = 2:
//配置加速度传感器量程 +-2G s,不自检
(void)mpu6050_register_write(MPU_ACCEL_CFG_REG,0x00);
某个轴的角速度 g = Range * Gyro / 32768 . Gyro是这个轴的角速度原始数据,Range是由配置角速度量程时写入的参数决定的,关系如下:


根据初始化时写入的数据,不自检,FS_SEL = 0x11,这里Range = 2000:
//陀螺仪自检及测量范围,典型值:0x18(不自检,2000deg/s)
(void)mpu6050_register_write(MPU_GYRO_CFG_REG , 0x18);
倾斜角度依据加速度原始数据计算,公式如下:
#define x 0
#define z 1
Angle[x] = atan2(AccValue.X, AccValue.Y)*180/3.14f;
Angle[z] = atan2(AccValue.Z, AccValue.Y)*180/3.14f;
该公式适用的初始姿态是竖直的,也就是MPU6050的Y轴竖直向上时是初始状态,此时的角度为0。Angle[x] 是x轴与竖直平面的夹角度数,Angle[z] 是z轴与水平平面的夹角度数。
参考:(16条消息) 关于MPU6050的数据获取、分析与处理_acktomas的博客-CSDN博客_mpu6050读取
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:'passparameterbyreference'inRuby?在这个例子中:deftestverb='nothing'yieldverbputsverbendtest{|verb|verb='something'}它将打印“无”。是否可以将其更改为“某物”?谢谢
我的Ruby代码中有一个看起来有点像这样的结构Parameter=Struct.new(:name,:id,:default_value,:minimum,:maximum)稍后,我使用创建了这个结构的一个实例freq=Parameter.new('frequency',15,1000.0,20.0,20000.0)在某些时候,我需要这个结构的精确副本,所以我调用newFreq=freq.clone然后,我更改newFreq的名称newFreq.name.sub!('f','newF')奇迹般地,它也改变了freq.name!像newFreq.name='newFrequency'这样
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。在我在网上找到的每个基准测试中,Ruby似乎都很慢,比Java慢得多。Ruby的人只是说这无关紧要。您能举个例子说明RubyonRails(以及Ruby本身)的速度真的无关紧要吗?
我正在尝试使用Ruby从Rack获取原始格式的请求header,但还没有弄清楚。我从request.env得到的散列不是我想要的。在该散列中,header键被大写并使用下划线而不是破折号,如下所示:"CONTENT_TYPE"=>"应用程序/json;字符集=utf-8"我想要的是处理前的header,我正在寻找:"Content_Type"=>"application/json;charset=utf-8"我可以很容易地循环遍历request.env寻找以HTTP_开头的header并将它们拆分,将每个单词和gsub大写以将下划线替换为破折号以使它们成为我想要的格式。在处理标题时,以
我有这段代码:date_counter=Time.mktime(2011,01,01,00,00,00,"+05:00")@weeks=Array.new(date_counter..Time.now).step(1.week)do|week|logger.debug"WEEK:"+week.inspect@weeks从技术上讲,代码有效,输出:SatJan0100:00:00-05002011SatJan0800:00:00-05002011SatJan1500:00:00-05002011etc.但是执行时间完全是垃圾!每周计算大约需要四秒钟。我在这段代码中是否遗漏了一些奇怪的低效
我想知道NokogiriXPath或CSS解析是否可以更快地处理HTML文件。速度有何不同? 最佳答案 Nokogiri没有XPath或CSS解析。它将XML/HTML解析为单个DOM,然后您可以使用CSS或XPath语法进行查询。CSS选择器在要求libxml2执行查询之前在内部转换为XPath。因此(对于完全相同的选择器)XPath版本会快一点点,因为CSS不需要先转换成XPath。但是,您的问题没有通用答案;这取决于您选择的是什么,以及您的XPath是什么样的。很有可能,您不会编写与Nokogiri创建的相同的XPath。例如
给定以下网址:http://foo.com?bar=1&wee=2从操作中获取url的原始参数部分的最快方法是什么?即?bar=1&wee=2 最佳答案 当然,只需在您的Controller中使用request.query_string 关于ruby-on-rails-是否可以在Rails中获取原始参数字符串?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/399290/
arr=[1,3,2,4]arr.sort#=>[1,2,3,4]我想要一个数组[0,2,1,3](原始索引按arr.sort顺序排列)在Ruby1.9.3中有没有一种简单的方法可以做到这一点?谢谢 最佳答案 xs=[1,3,2,4]original_indexes=xs.map.with_index.sort.map(&:last)#=>[0,2,1,3] 关于ruby-Ruby中已排序元素的原始索引,我们在StackOverflow上找到一个类似的问题:
我有这个原始文本:________________________________________________________________________________________________________________________________PosCarCompetitor/TeamDriverVehicleCapCLLapsRace.TimeFastest...Lap16JasonClementsJasonClementsBMWM33200109:48.571030:57.3228*242DavidSkillenderDavidSkillenderHo
过程和lambdadiffer关于方法范围和return关键字的效果。我对它们之间的性能差异很感兴趣。我写了一个测试,如下所示:deftime(&block)start=Time.nowblock.callp"thattook#{Time.now-start}"enddeftest(proc)time{(0..10000000).each{|n|proc.call(n)}}enddeftest_block(&block)time{(0..10000000).each{|n|block.call(n)}}enddefmethod_testtime{(1..10000000).each{|