|
@@ -22,7 +22,7 @@
|
|
|
|
|
|
static unsigned char r_buf[88]; //一次从串口中读取的数据存储缓冲区
|
|
static unsigned char r_buf[88]; //一次从串口中读取的数据存储缓冲区
|
|
static int port_fd = -1; //串口打开时的文件描述符
|
|
static int port_fd = -1; //串口打开时的文件描述符
|
|
-float acce[3],angular[3],angle[3],quater[4];
|
|
|
|
|
|
+static float acce[3],angular[3],angle[3],quater[4];
|
|
|
|
|
|
/******************************************************
|
|
/******************************************************
|
|
* Description:打开IMU模块串口,输入两个参数即可连接.
|
|
* Description:打开IMU模块串口,输入两个参数即可连接.
|
|
@@ -237,6 +237,7 @@ void parse_serialData(unsigned char chr)
|
|
quater[1] = ((short)(((short)chrBuf[5]<<8)|chrBuf[4]))/32768.0;
|
|
quater[1] = ((short)(((short)chrBuf[5]<<8)|chrBuf[4]))/32768.0;
|
|
quater[2] = ((short)(((short)chrBuf[7]<<8)|chrBuf[6]))/32768.0;
|
|
quater[2] = ((short)(((short)chrBuf[7]<<8)|chrBuf[6]))/32768.0;
|
|
quater[3] = ((short)(((short)chrBuf[9]<<8)|chrBuf[8]))/32768.0;
|
|
quater[3] = ((short)(((short)chrBuf[9]<<8)|chrBuf[8]))/32768.0;
|
|
|
|
+ //printf("%f %f %f %f\n", quater[0], quater[1], quater[2], quater[3]);
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
chrCnt = 0;
|
|
chrCnt = 0;
|
|
@@ -314,59 +315,56 @@ int initSerialPort(const char* path, const int baud)
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
-
|
|
|
|
-float getAccX()
|
|
|
|
-{
|
|
|
|
- return acce[0];
|
|
|
|
-}
|
|
|
|
-float getAccY()
|
|
|
|
-{
|
|
|
|
- return acce[1];
|
|
|
|
-}
|
|
|
|
-float getAccZ()
|
|
|
|
|
|
+/*****************************************
|
|
|
|
+ * Description:得到三轴加速度信息,输入
|
|
|
|
+ * 参数可以为0,1,2分别代表x,y,z轴的
|
|
|
|
+ * 加速度信息.
|
|
|
|
+ *****************************************/
|
|
|
|
+float getAcc(int flag)
|
|
{
|
|
{
|
|
- return acce[2];
|
|
|
|
|
|
+ return acce[flag];
|
|
}
|
|
}
|
|
|
|
|
|
-float getAngularX()
|
|
|
|
|
|
+/******************************************
|
|
|
|
+ * Description:得到角速度信息,输入参数可
|
|
|
|
+ * 以为0,1,2,分别代表x,y,z三轴的角速度
|
|
|
|
+ * 信息.
|
|
|
|
+ *****************************************/
|
|
|
|
+float getAngular(int flag)
|
|
{
|
|
{
|
|
- return angular[0];
|
|
|
|
|
|
+ return angular[flag];
|
|
}
|
|
}
|
|
|
|
|
|
-float getAngularY()
|
|
|
|
|
|
+/*******************************************
|
|
|
|
+ * Description:获取yaw,pitch,roll,输入参数0,
|
|
|
|
+ * 1,2可以分别获取到roll,pitch,yaw的数据.
|
|
|
|
+ *******************************************/
|
|
|
|
+float getAngle(int flag)
|
|
{
|
|
{
|
|
- return angular[1];
|
|
|
|
|
|
+ return angle[flag];
|
|
}
|
|
}
|
|
|
|
|
|
-float getAngularZ()
|
|
|
|
|
|
+/********************************************
|
|
|
|
+ * Description:输入参数0,1,2,3可以分别获取到
|
|
|
|
+ * 四元素的q0,q1,q2,q3.但是这里对应的ros中
|
|
|
|
+ * 的imu_msg.orientation.w,x,y,z的顺序,
|
|
|
|
+ * 这里的q0是对应w参数,1,2,3对应x,y,z.
|
|
|
|
+ ********************************************/
|
|
|
|
+float getQuat(int flag)
|
|
{
|
|
{
|
|
- return angular[2];
|
|
|
|
|
|
+ return quater[flag];
|
|
}
|
|
}
|
|
|
|
|
|
-float getAngleX()
|
|
|
|
-{
|
|
|
|
- return angle[0];
|
|
|
|
-}
|
|
|
|
-float getAngleY()
|
|
|
|
-{
|
|
|
|
- return angle[1];
|
|
|
|
-}
|
|
|
|
-float getAngleZ()
|
|
|
|
-{
|
|
|
|
- return angle[2];
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/********************************************************
|
|
|
|
|
|
+/*************************************************************
|
|
* Description:从串口读取数据,然后解析出各有效数据段,这里
|
|
* Description:从串口读取数据,然后解析出各有效数据段,这里
|
|
- * 一次性从串口中读取100个字节,然后需要从这些字节中进行
|
|
|
|
- * 解析读取44个字节,正好是4帧数据,每一帧数据是11个字节.
|
|
|
|
- * 有效数据包括加速度输出(0x55 0x51),角速度输出(0x55 0x52)
|
|
|
|
- * 角度输出(0x55 0x53),四元素输出(0x55 0x59).
|
|
|
|
- ********************************************************/
|
|
|
|
|
|
+ * 一次性从串口中读取100个字节,然后需要从这些字节中进行
|
|
|
|
+ * 解析读取44个字节,正好是4帧数据,每一帧数据是11个字节.
|
|
|
|
+ * 有效数据包括加速度输出(0x55 0x51),角速度输出(0x55 0x52)
|
|
|
|
+ * 角度输出(0x55 0x53),四元素输出(0x55 0x59).
|
|
|
|
+ ***********************************************************/
|
|
int getImuData()
|
|
int getImuData()
|
|
{
|
|
{
|
|
int data_len = 0;
|
|
int data_len = 0;
|
|
-
|
|
|
|
bzero(r_buf, sizeof(r_buf)); //存储新数据前,将缓冲区清零
|
|
bzero(r_buf, sizeof(r_buf)); //存储新数据前,将缓冲区清零
|
|
|
|
|
|
//开始从串口中读取数据,并将其保存到r_buf缓冲区中
|
|
//开始从串口中读取数据,并将其保存到r_buf缓冲区中
|