imu_callback
从话题中读入各个数据的t,x,y,z,g,y,r
,存放到acc
和gry
中:
//从话题读入
double t = imu_msg->header.stamp.toSec(); //将imu_msg的header中的时间戳转换为秒(s)
double dx = imu_msg->linear_acceleration.x;
double dy = imu_msg->linear_acceleration.y;
double dz = imu_msg->linear_acceleration.z;
double rx = imu_msg->angular_velocity.x;
double ry = imu_msg->angular_velocity.y;
double rz = imu_msg->angular_velocity.z;
Vector3d acc(dx, dy, dz);//线速度
Vector3d gyr(rx, ry, rz);//角速度
并将其放到Estimator
中的accBuf
与gyrBuf
estimator.inputIMU(t, acc, gyr);
其中inputIMU
执行了:
Estimator::inputIMU(t, acc, gyr)
accBuf.push(make_pair(t, acc))//<t, acc>放到Buf
gyrBuf.push(make_pair(t, gry))//<t, gry>放到Buf
img_callback
将图像消息放到img_buf
中
m_buf.lock();
img0_buf.push(img_msg);//将img添加到队列中
m_buf.unlock();
注意m_buf.lock()
作用:
一段时间内仅一个线程可以访问其中的变量。
多线程协同工作,往往要共享某一块或某几块内存区,各线程执行细节不完全可知可控,容易造成数据损失。如两个线程同时对一个字符串做修改,结果会变得混乱。
为避免这种情况,使用线程锁保证某一线程使用该内存区时,其他线程不得访问,即独占。