SH3001是Senodia公司生产的一款六轴姿态传感器,可测量芯片自身X、Y、Z轴的加速度以及角速度参数,通过姿态融合,进而得到姿态角。
三轴加速度计(Accelerometer):测量X、Y、Z轴的加速度。
三轴陀螺仪传感器(Gyroscope):测量X、Y、Z轴的角速度。
小球完全悬空时,对每个面都没有施加力,所以每个方向的加速度都为0.
当物体向x+轴运动,小球由于惯性,对x-轴施加力(相反方向)。
哪个面受力,就哪个面产生值。
低通滤波器允许低于截止频率的信号通过,高于截止频率的信号不能通过,可平滑去噪。
加速度计数据获取:
acc_x = ACC_XDATA_H << 8 | ACC_XDATA_L
acc_y = ACC_YDATA_H << 8 | ACC_YDATA_L
acc_z = ACC_ZDATA_H << 8 | ACC_ZDATA_L
要使数据更精确,通过厂家提供的函数接口,读取补偿系统
SH3001寻址
SH3001读取N字节函数
void sh3001_read_nbytes(uint8_t devaddr, uint8_t regaddr, uint8_t length, uint8_t *readbuf)
{
iic_start(); //主机发送起始信号
iic_send_byte(devaddr << 1 | 0x00); //主机发送sh3001写操作地址
iic_wait_ack(); //主机等待sh3001应答
iic_send_byte(regaddr); //主机发送寄存器地址
iic_wait_ack(); //主机等待sh3001应答
iic_start(); //主机发送起始信号
iic_send_byte(devaddr << 1 | 0x01); //主机发送sh3001读操作地址
iic_wait_ack();
for(uint8_t i=0; i<length; i++)
{
readbuf[i] = iic_read_byte(i == (length-1) ? 0:1); //为1时发送应答信号,为0时发送非应答信号。
}
iic_stop();
}
SH3001写入N字节函数
void sh3001_write_nbytes(uint8_t devaddr, uint8_t regaddr, uint8_t length, uint8_t *writebuf)
{
iic_start(); //主机发送起始信号
iic_send_byte(devaddr<<1 | 0x00); //主机发送sh3001写操作地址
iic_wait_ack();
iic_send_byte(regaddr);
iic_wait_ack();
for(uint8_t i=0; i<length; i++)
{
iic_send_byte(writebuf[i]);
iic_wait_ack();
}
iic_stop();
}
姿态解算指读取传感器数据,实时算出飞行器的姿态角(偏航角yaw、俯仰角pitch、横滚角roll)
利用加速度计测量角度(俯仰角与横滚角):
假设载体处于静止水平放置,此时加速度计仅受重力作用,从Z轴可读到1g数据(g为重力加速度),X轴和Y轴两个方向读到0。
采用多种传感器数据来检测姿态的处理算法被称为“姿态融合”。