蜜袋鼯 第④贴 RSL10-SENSE-GEVK 玩耍BHI160,步数、运动识别?不用处理,直接获取!!
本帖最后由 justd0 于 2021-6-27 01:42 编辑<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei""> 本是周末是要被想出游的家人拉出去当司机,奈何计划有变,</span></span><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">于是终于有了自己的周末空闲时间~~</span></span><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">撒花啊!</span></span></p>
<p> </p>
<p><span style="font-size:14.0pt"> <a href="https://bbs.eeworld.com.cn/thread-1169973-1-1.html"><span lang="zh-CN" style="font-family:"Microsoft YaHei"">蜜袋鼯 第③贴</span></a> <span lang="zh-CN" style="font-family:"Microsoft YaHei"">上一贴写了</span> <span lang="zh-CN" style="font-family:"Microsoft YaHei"">由于官方对</span><span lang="zh-CN" style="font-family:"Times New Roman"">RSL10-SENSE-GEVK</span><span lang="zh-CN" style="font-family:"Microsoft YaHei"">开发板进行了硬件升级,替换了光照度传感器而导致的相应例程无法使用,故写了个写了个驱动代码分享给大家。</span></span></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei""> </span></span></p>
<p><strong><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">本帖主要内容:</span></span></strong></p>
<p><span style="font-size:14.0pt"><span lang="en-US" style="font-family:"Times New Roman"">1</span><span lang="zh-CN" style="font-family:"Microsoft YaHei"">、介绍姿态传感器、磁力计传感器背景及功能。</span></span></p>
<p><span style="font-size:14.0pt"><span lang="en-US" style="font-family:"Times New Roman"">2</span><span lang="zh-CN" style="font-family:"Microsoft YaHei"">、修改</span><span lang="zh-CN" style="font-family:"Times New Roman"">RSL10-SENSE-GEVK</span><span lang="zh-CN" style="font-family:"Microsoft YaHei"">官方例程,读取</span><span lang="zh-CN" style="font-family:"Microsoft YaHei""><span style="color:#e84c22">加速度、角速度、磁力计、重力</span></span><span lang="zh-CN" style="font-family:"Microsoft YaHei"">等数据。</span></span></p>
<p><span style="font-size:14.0pt"><span lang="en-US" style="font-family:"Times New Roman"">3</span><span lang="zh-CN" style="font-family:"Microsoft YaHei"">、修改例程中的</span><span lang="en-US" style="font-family:"Microsoft YaHei"">BHI160</span><span lang="zh-CN" style="font-family:"Microsoft YaHei"">应用层配置,将该传感器的特殊数据读取出来,例如:</span><span lang="zh-CN" style="font-family:"Microsoft YaHei""><span style="color:#e84c22">步数检测、运动状态识别</span></span><span lang="zh-CN" style="font-family:"Microsoft YaHei"">等,此处得圈下<span style="font-size:16px;">@</span></span></span><i><span style="font-size:16px;">w494143467</span> </i><span style="font-size:14.0pt"><span lang="zh-CN" style="font-family:"Microsoft YaHei"">,没记错的话你项目里要用它来做运动识别的话,传感器已经实现了,你就不用自己算了哈</span><span lang="en-US" style="font-family:"Microsoft YaHei"">~~</span></span></p>
<p> </p>
<hr />
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">正文开始:</span></span></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei""> </span></span></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">按照我的项目计划(哦,忘记写了,下一贴写下项目的计划内容吧),还需要运动信息,比如角速度、旋转圈数等,而这些数据可以由开发板上的BHI160传感器获取到。</span></span></p>
<p> </p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">在玩板之前,本以为这个传感器就是个普通的六轴姿态传感器,</span></span></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">但查了下资料之后才发现,这可是大名鼎鼎的博世 的 姿态传感器啊!</span></span></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei""> </span></span></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">你可能会问博世是啥?跟普通的姿态传感器有啥区别啊。。</span></span></p>
<p> </p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">哈哈,我也有这个疑问来的,在我看完他的datasheet之后,不得不说这传感器很牛b。</span></span></p>
<p> </p>
<p></p>
<p> </p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">从他<a href="https://www.bosch-sensortec.com/products/smart-sensors/bhi160b/">官网</a>上的简介可以看到,这个小传感器不仅仅是三轴加速度计、三轴角速度计这么简单,</span></span></p>
<p> </p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">他在内部就对原始数据进行了处理,能够输出</span></span></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei""><span lang="zh-CN" style="color:#fa0000">“加速度计、重力、线性加速度、陀螺仪、</span></span></span><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei""><span lang="zh-CN" style="color:#fa0000">陀螺仪未校准、游戏旋转矢量、计步器、步数检测器、</span></span></span></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei""><span lang="zh-CN" style="color:#fa0000">有效运动识别(</span><span lang="en-US" style="color:#fa0000">significant motion</span><span lang="zh-CN" style="color:#fa0000">)、</span></span></span><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei""><span lang="zh-CN" style="color:#fa0000">倾斜检测器、拾取识别、唤醒识别、手势识别、站立、</span></span></span></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei""><span lang="zh-CN" style="color:#fa0000">跑步、骑自行车、开车的活动识别”</span></span></span></p>
<p> </p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">而且传感器还能串联一个其他类别的传感器,例如地磁计,就又可以输出</span></span></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei""><span lang="zh-CN" style="color:#fa0000">“地磁场、未校准磁场、方向矢量、旋转矢量、地磁旋转矢量”</span></span></span></p>
<p> </p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">在官网的下方还可以看到博世已经给提供了这个传感器的使用例程,还有固件?</span></span></p>
<p> </p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">固件什么鬼,点开看下,原来用传感器串联他家自己传感器的时候,都不用自己配置信息了,直接按照固件烧进去就行了,如下图的BMM150,</span></span><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">这不正是RSL10-SENSE-GEVK开发板上的磁力计传感器么~~</span></span></p>
<p> </p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">另外博世还给提供了详细的驱动库和示例代码,感兴趣的可以去<a href="https://github.com/BoschSensortec/BHy1_driver_and_MCU_solution">github</a>看下</span></span></p>
<p> </p>
<p></p>
<p lang="en-US"><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei""><span style="color:#fa0000"> </span></span></span></p>
<p lang="en-US"><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei""><span style="color:#fa0000"> </span></span></span></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">那么回来再看RSL10-SENSE-GEVK开发板的电路图上,就是采用的博世的BHI160+BMM150方案</span></span></p>
<p></p>
<p> </p>
<p> </p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">我们直接打开SDK中的sense_bhi160来先体验下,copy下工程,然后看下例程里面是怎么个逻辑,</span></span></p>
<p> </p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">我画了个流程图,可以看到这个例程还是很好理解的,</span></span></p>
<p> </p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">初始化了必要组件之后,初始化了下BHI160传感器,并对它初始化过程做了个计时。</span></span></p>
<p> </p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">接下来就是注册了三组数据的回调处理函数,以便获取传感器数据更新值。</span></span></p>
<p></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">然后编译下载到开发板,我们通过Jlink RTT viewer 就可以看到数据了,</span></span></p>
<p> </p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">下图中可以看到,BHI160初始化的时间显示的是805ms</span></span></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">感兴趣的同学可以进入到初始化函数中看下,</span></span><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">可以看到用这么久时间进行初始化,其实都是前面说的给BHI160烧写了BMM150的配置程序那个过程。</span></span></p>
<p></p>
<p> </p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">用RTT viewer看log数据就是一堆的打印信息,如下图所示,</span></span></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">但实时刷新的时候,根本看不清数据是啥。。。</span></span></p>
<p></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">那么我们可以借助jscope来看下数据变化,接下来只要定义个全局变量,</span></span></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">把传感器数据传出来,jscope就可以监控到变化的数据。</span></span></p>
<p> </p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">代码修改如下:</span></span></p>
<pre>
<code class="language-cpp">main.c
//定义数据结构,实例化数据
typedef struct
{
float x;
float y;
float z;
}Data_t;
Data_t orientation;
Data_t acc;
Data_t gyro;
........
/** Converts measured orientation data into degrees.
*
* GREEN LED will be turned on if board heading is within 10 degrees of
* magnetic north (<=10 or >=350).
*/
void ao_vector_cb(bhy_data_generic_t *data, bhy_virtual_sensor_t sensor)
{
orientation.x = data->data_vector.x / 32768.0f * 360.0f;
orientation.y = data->data_vector.y / 32768.0f * 360.0f;
orientation.z = data->data_vector.z / 32768.0f * 360.0f;
if (orientation.x > 350.0f || orientation.x < 10.0f)
{
LED_On(LED_GREEN);
}
else
{
LED_Off(LED_GREEN);
}
//printf("Orientation: h=%.1f p=%.1f, y=%.1f (%d)\r\n", h, p, y, data->data_vector.status);
}
/** Converts measured linear acceleration data based on sensors dynamic range
* and prints it to debug terminal.
*
* Also turns on RED LED if total acceleration applied to the board is over 1g.
*/
void la_vector_cb(bhy_data_generic_t *data, bhy_virtual_sensor_t sensor)
{
/* Linear Acceleration sensor values are scaled using dynamic range. */
uint16_t dyn_range = BHI160_NDOF_GetAccelDynamicRange();
acc.x = data->data_vector.x / 32768.0f * dyn_range;
acc.y = data->data_vector.y / 32768.0f * dyn_range;
acc.z = data->data_vector.z / 32768.0f * dyn_range;
if (fabsf(acc.x) + fabsf(acc.y) + fabsf(acc.z) >= 1.0f)
{
LED_On(LED_RED);
}
else
{
LED_Off(LED_RED);
}
// printf("Linear Accel: x=%.2f g, y=%.2f g, z=%.2f g\r\n", x, y, z);
}
void gyro_vector_cb(bhy_data_generic_t *data, bhy_virtual_sensor_t sensor)
{
uint16_t dyn_range = BHI160_NDOF_GetGyroDynamicRange();
gyro.x = data->data_vector.x / 32768.0f * dyn_range;
gyro.y = data->data_vector.y / 32768.0f * dyn_range;
gyro.z = data->data_vector.z / 32768.0f * dyn_range;
if (fabsf(gyro.z) > 45.0f)
{
LED_On(LED_BLUE);
}
else
{
LED_Off(LED_BLUE);
}
// printf("Rate of Rotation: x=%.2f , y=%.2f /s, z=%.2f \r\n", x, y, z);
}</code></pre>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei""> </span></span></p>
<p><span style="font-size:14.0pt"><span lang="zh-CN" style="font-family:"Microsoft YaHei"">然后,打开</span><span lang="en-US" style="font-family:"Microsoft YaHei"">jscope</span><span lang="zh-CN" style="font-family:"Microsoft YaHei"">,新建个</span><span lang="en-US" style="font-family:"Microsoft YaHei"">project</span><span lang="zh-CN" style="font-family:"Microsoft YaHei"">,</span></span></p>
<p><span style="font-size:14.0pt"><span lang="zh-CN" style="font-family:"Microsoft YaHei"">在配置界面的</span><span lang="en-US" style="font-family:"Microsoft YaHei"">specify target device</span><span lang="zh-CN" style="font-family:"Microsoft YaHei"">中输入</span><span lang="en-US" style="font-family:"Microsoft YaHei"">rsl10</span></span></p>
<p><span style="font-size:14.0pt"><span lang="en-US" style="font-family:"Microsoft YaHei"">elf file</span><span lang="zh-CN" style="font-family:"Microsoft YaHei"">中选择工程编译目录下的</span><span lang="zh-CN" style="font-family:"Times New Roman"">sense_bhi160.elf</span></span></p>
<p><span style="font-size:14.0pt"><span lang="zh-CN" style="font-family:"Microsoft YaHei"">如下图所示,就可以点</span><span lang="en-US" style="font-family:"Microsoft YaHei"">ok</span><span lang="zh-CN" style="font-family:"Microsoft YaHei"">了</span></span></p>
<p></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei""> </span></span></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">然后在下面添加我们定义的全局变量,点击start就可以看到数据变化了,如下图。</span></span></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">但各位看下下图中的数据,是存在明显的锯齿的,也就是刷新频率很低。</span></span></p>
<p></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei""> </span></span></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei""> 这个问题我们可以看下 注册回调函数的那个api,其中最后一个参数,便是设置采样率的,</span></span></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">他的数值代表的是频率,数值越大更新速度越快,</span></span></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">当然了,功耗也会相对高一点点,这里我们把它设置为1000hz,看看效果,代码修改如下所示:</span></span></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei""> </span></span></p>
<pre>
<code>main.c
int main(void)
{
.......
retval = BHI160_NDOF_EnableSensor(BHI160_NDOF_S_ORIENTATION, &ao_vector_cb, 1000);
ASSERT_DEBUG(retval == BHY_SUCCESS);
retval = BHI160_NDOF_EnableSensor(BHI160_NDOF_S_LINEAR_ACCELERATION, &la_vector_cb, 1000);
ASSERT_DEBUG(retval == BHY_SUCCESS);
retval = BHI160_NDOF_EnableSensor(BHI160_NDOF_S_RATE_OF_ROTATION, &gyro_vector_cb, 1000);
ASSERT_DEBUG(retval == BHY_SUCCESS);
.......
}</code></pre>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei""> </span></span></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">编译并烧录,在看下jscope的数据图,就变的连贯很多了。</span></span></p>
<p></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei""> </span></span></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei""> 在传感器数据回调注册的函数中我们还可以看到第一个参数,是选择需要的数据类型的,</span></span></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">改变这个参数就可以获取传感器的不同类型数据了,</span></span><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">这里可看到库中给的定义,列写了五种数据,包括姿态角度、重力、线性加速度、角速度、磁场强度数据,</span></span><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">可以分别改动下看看数据是怎样的。</span></span></p>
<p></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">至此,这个例程的功能我们就体验完了。</span></span></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei""> </span></span></p>
<p> </p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">但本帖还没完。。。。。</span></span></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei""> </span></span><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei""> </span></span></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei""> </span></span></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">就像开头所说的,BHI160传感器支持的数据可不止上面例程库中给列写的那几个,</span></span></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">在看了芯片的datasheet之后,发现还支持</span></span></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">“</span></span><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei""><span style="color:#fa0000;">游戏旋转矢量、计步器、步数检测器、有效运动识别(significant motion)、</span></span></span></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei""><span style="color:#fa0000;">倾斜检测器、拾取识别、唤醒识别、手势识别、站立、跑步、骑自行车、开车的活动识别</span>”这些数据。</span></span></p>
<p></p>
<p lang="en-US"><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei""> </span></span></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">看下RSL10的工程,其实也是引用了博世提供的SDK的,如下图:</span></span></p>
<p></p>
<p lang="en-US"><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei""> </span></span></p>
<p lang="en-US"> </p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">在回看下上面传感器数据的枚举变量中</span></span></p>
<p></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">定义的变量其实就是这些支持的功能</span></span></p>
<p></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">那么也就是说,我们需要哪个数据,只要在BHI160_NDOF_Sensor这个枚举体中再定义下,</span></span></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">按照例程的方式,就可以直接使用啦。</span></span></p>
<p> </p>
<p><span style="font-size:14.0pt"><span lang="zh-CN" style="font-family:"Microsoft YaHei"">只是这些不同类型的数据,会有对应的数据格式,这个格式可以参考</span><span lang="en-US" style="font-family:"Times New Roman"">BHI160</span><span lang="zh-CN" style="font-family:"Microsoft YaHei"">的数据手册中定义的来,</span></span></p>
<p><span style="font-size:14.0pt"><span lang="zh-CN" style="font-family:"Microsoft YaHei"">如上面</span><span lang="en-US" style="font-family:"Times New Roman"">T</span><span lang="en-US" style="font-family:"Microsoft YaHei"">able14 virtual sensor ID </span><span lang="zh-CN" style="font-family:"Microsoft YaHei"">表中</span><span lang="en-US" style="font-family:"Microsoft YaHei"">VS data type</span><span lang="zh-CN" style="font-family:"Microsoft YaHei"">中定义的数据类型,</span></span></p>
<p><span style="font-size:14.0pt"><span lang="zh-CN" style="font-family:"Microsoft YaHei"">再看下面这张图中的</span><span lang="en-US" style="font-family:"Microsoft YaHei"">data values </span><span lang="zh-CN" style="font-family:"Microsoft YaHei"">使用就行了。</span></span></p>
<p></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei""> </span></span></p>
<p> </p>
<p><span style="font-size:14.0pt"><span lang="zh-CN" style="font-family:"Microsoft YaHei"">下面以行走步数和活动识别来举例,</span></span></p>
<p> </p>
<p><span style="font-size:14.0pt"><span lang="zh-CN" style="font-family:"Microsoft YaHei"">因为步数更新和活动识别都是传感器内部实现的,</span></span></p>
<p><span style="font-size:14.0pt"><span lang="zh-CN" style="font-family:"Microsoft YaHei"">我们读取数据的频率就可以降低些,以1hz频率更新</span></span></p>
<p><span style="font-size:14.0pt"><span lang="zh-CN" style="font-family:"Microsoft YaHei"">这里用</span><span lang="en-US" style="font-family:"Times New Roman"">RTT </span><span lang="en-US" style="font-family:"Microsoft YaHei"">viewer</span><span lang="zh-CN" style="font-family:"Microsoft YaHei"">来打印,</span></span></p>
<p><span style="font-size:14.0pt"><span lang="zh-CN" style="font-family:"Microsoft YaHei"">把例程自带的三个原始数据的回调注册的打印给注释掉了,防止顶掉我们想要的数据显示</span></span></p>
<p><span style="font-size:14.0pt"><span lang="zh-CN" style="font-family:"Microsoft YaHei"">并实现行走步数和活动识别的回调和相应处理,实现代码如下:</span></span></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei""> </span></span></p>
<pre>
<code class="language-cpp">main.c
void step_counter_cb(bhy_data_generic_t *data, bhy_virtual_sensor_t sensor)
{
bhy_data_scalar_u16_t step_data;
step_data.data = data->data_scalar_u16.data;
printf("Step counter is %d\r\n", step_data.data);
}
void activity_recognition_cb(bhy_data_generic_t *data, bhy_virtual_sensor_t sensor)
{
bhy_data_scalar_u16_t act_data;
static uint16_t last_act;
act_data.data = data->data_scalar_u16.data;
if(act_data.data != last_act)
{
switch (act_data.data)
{
case 0x0000:
break;
case 0x0001:
printf("Still activity ended. \r\n");
break;
case 0x0002:
printf("Walking activity ended. \r\n");
break;
case 0x0004:
printf("Running activity ended. \r\n");
break;
case 0x0008:
printf("On Bicycle activity ended \r\n");
break;
case 0x0010:
printf("In Vehicle activity ended. \r\n");
break;
case 0x0020:
printf("Tilting activity ended. \r\n");
break;
case 0x0040:
break;
case 0x0080:
break;
case 0x0100:
printf("Still activity start. \r\n");
break;
case 0x0200:
printf("Walking activity start. \r\n");
break;
case 0x0400:
printf("Running activity start. \r\n");
break;
case 0x0800:
printf("On Bicycle activity start \r\n");
break;
case 0x1000:
printf("In Vehicle activity start. \r\n");
break;
case 0x2000:
printf("Tilting activity start. \r\n");
break;
case 0x4000:
break;
case 0x8000:
break;
default:
break;
}
}
last_act = act_data.data;
}
int main(void)
{
.......
/* Enable desired virtual sensor outputs. */
retval = BHI160_NDOF_EnableSensor(BHI160_NDOF_S_ORIENTATION, &ao_vector_cb, 1000);
ASSERT_DEBUG(retval == BHY_SUCCESS);
retval = BHI160_NDOF_EnableSensor(BHI160_NDOF_S_LINEAR_ACCELERATION, &la_vector_cb, 1000);
ASSERT_DEBUG(retval == BHY_SUCCESS);
retval = BHI160_NDOF_EnableSensor(BHI160_NDOF_S_RATE_OF_ROTATION, &gyro_vector_cb, 1000);
ASSERT_DEBUG(retval == BHY_SUCCESS);
retval = BHI160_NDOF_EnableSensor(BHI160_NDOF_S_STEP_COUNTER, &step_counter_cb, 1);
ASSERT_DEBUG(retval == BHY_SUCCESS);
retval = BHI160_NDOF_EnableSensor(BHI160_NDOF_S_ACTIVITY_RECOGNITION, &activity_recognition_cb, 1);
ASSERT_DEBUG(retval == BHY_SUCCESS);
........
}</code></pre>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei""> </span></span></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">活动识别的数据具体定义可以参考芯片数据手册中的描述:</span></span></p>
<p></p>
<p><span style="font-size:14.0pt"><span lang="zh-CN" style="font-family:"Microsoft YaHei"">然后我们烧录,并用</span><span lang="en-US" style="font-family:"Times New Roman"">RTT </span><span lang="en-US" style="font-family:"Microsoft YaHei"">viewer</span><span lang="zh-CN" style="font-family:"Microsoft YaHei"">可以看到我模拟走路的步数被有效的记录了下来,</span></span></p>
<p><span style="font-size:14.0pt"><span lang="zh-CN" style="font-family:"Microsoft YaHei"">这相比自己用原始数据来计算出来,功耗、效果方面都会好很多了。</span></span></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei""> </span></span></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei"">本文就先到这了,以上用到的数据手册我放到下面连接了,各位随意取用。</span></span></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei""> </span></span></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei""> </span></span></p>
<p><span style="font-size:14.0pt"><span style="font-family:"Microsoft YaHei""> </span></span></p>
<p>哈哈,突然被Q到,原来还有这东西,看来世博提供的SDK还是比较丰富的,这些算法源码开源不,还是只提供接口?</p>
w494143467 发表于 2021-6-27 08:05
哈哈,突然被Q到,原来还有这东西,看来世博提供的SDK还是比较丰富的,这些算法源码开源不,还是只提供接口 ...
<p>应该是找不到源码的,它可能被固话到传感器芯片了。</p>
<p>不过你可以通过数据和识别结果,做个黑箱测试,或者用它的结果跟你的结果做个对比</p>
w494143467 发表于 2021-6-27 08:05
哈哈,突然被Q到,原来还有这东西,看来世博提供的SDK还是比较丰富的,这些算法源码开源不,还是只提供接口 ...
<p>BHI160内部的程序干的,firmware是二进制数据形式。</p>
cruelfox 发表于 2021-6-27 10:05
BHI160内部的程序干的,firmware是二进制数据形式。
<p>哦哦哦,原来如此,那我后面又时间可以试一下!</p>
justd0 发表于 2021-6-27 09:59
应该是找不到源码的,它可能被固话到传感器芯片了。
不过你可以通过数据和识别结果,做个黑箱测试,或 ...
<p>我后面试试,那这个传感器还是非常不错的!</p>
页:
[1]