cartograhper 中IMU 消息发布需要注意的东西

21 篇文章 4 订阅


const imu_data_t* imu = &info->imu_data;
//这里除以100 是由协议规定的,因为芯片为了防止传输浮点型数据,先乘以100后再传输的,
//因此在stm32上获取数据后,需要除以100.0 才是真是的数据
float yaw = imu->yaw/100.0f;  
float roll = imu->roll/100.0f;
float pitch = imu->pitch/100.0f;
//imu 芯片数据中的坐标系是左手定则,而ros 的数据是右手定则,因此乘以-1 进行转换
float yaw_rate = -1*imu->yaw_rate/100.0f;
float roll_rate = -1*imu->roll_rate/100.0f;
float pitch_rate = -1*imu->pitch_rate/100.0f;

sensor_msgs::Imu imu_data;
imu_data.header.stamp = ros::Time::now();
imu_data.header.frame_id = imu_frame_id;
imu_data.orientation_covariance[0] = 1000000;
imu_data.orientation_covariance[1] = 0;
imu_data.orientation_covariance[2] = 0;
imu_data.orientation_covariance[3] = 0;
imu_data.orientation_covariance[4] = 1000000;
imu_data.orientation_covariance[5] = 0;
imu_data.orientation_covariance[6] = 0;
imu_data.orientation_covariance[7] = 0;
imu_data.orientation_covariance[8] = 0.000001;
geometry_msgs::Quaternion imu_quaternion;

/*这是欧拉角与四元数的转换公式, 理论是
x = 0.0;
y = 0.0;
z = sin(th/2.0); //th 为yaw 角,单位为弧度
w = cos(th/2.0);
*/
imu_quaternion.x = 0.0;
imu_quaternion.y = 0.0;
imu_quaternion.z = sin(-1*yaw*3.1416/(180 *2.0));
imu_quaternion.w = cos(-1*yaw*3.1416/(180 *2.0));
imu_data.orientation = imu_quaternion;
/*
这是线加速度,理论z 为重力加速度为9.8
然后根据你陀螺仪安装的位置(坐标系)调试(ROS坐标系下)x 方向数据和y 方向数据
*/
imu_data.linear_acceleration.x = -1*imu->yacc/100.0;
imu_data.linear_acceleration.y = -1*imu->xacc/100.0;
imu_data.linear_acceleration.z = -1*imu->zacc/100.0;
imu_data.linear_acceleration_covariance[0] = 1000000;
imu_data.linear_acceleration_covariance[4] = 1000000;
imu_data.linear_acceleration_covariance[8] = 0.000001;

imu_data.angular_velocity_covariance[0] = 0.000001;
imu_data.angular_velocity_covariance[4] = 0.0;
imu_data.angular_velocity_covariance[8] = 0.0;

imu_data.angular_velocity.x = DEG2RAD(roll_rate);
imu_data.angular_velocity.y = DEG2RAD(pitch_rate);
imu_data.angular_velocity.z = DEG2RAD(yaw_rate);
imuPub.publish(imu_data);
std_msgs::Float32 imuAngle;
imuAngle.data = -1*DEG2RAD(yaw);
imuAnglePub.publish(imuAngle);

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值