美文网首页
2020-07-13

2020-07-13

作者: 月巴大叔 | 来源:发表于2020-07-13 19:39 被阅读0次

    关于turtlebot 的 imu数据的读取,并将四元素转换成了欧拉角。

    #include <ros/ros.h>
    #include <sensor_msgs/Imu.h>
    //#include <std_msgs/Float32.h>
    #include <std_msgs/String.h>
    #include <Eigen/Core>
    #include <Eigen/Geometry>
    
    void acallback(const sensor_msgs::Imu::ConstPtr &msgs){  
        //ROS_INFO("成功输出"); 
        double x = msgs->orientation.x;
        double y = msgs->orientation.y;
        double z = msgs->orientation.z;
        double w = msgs->orientation.w;
        // std::cout<<"  z  "<<z<<"  z "<<std::endl;
        // std::cout<<"  w  "<<w<<"  w "<<std::endl;
        Eigen::Quaterniond quaternion(w,x,y,z);//初始化四元素
        Eigen::AngleAxisd rotation_vector(quaternion);//四元素转旋转向量
        Eigen::Matrix3d rotation_matrix;
        rotation_matrix=quaternion.toRotationMatrix();//四元素转旋转矩阵
        Eigen::Vector3d eulerAngle=quaternion.matrix().eulerAngles(2,1,0);
        double x0 = (eulerAngle(0)/3.1415926)*180;
        // double x1 = (eulerAngle(1)/3.1415926)*180;
        // double x2 = (eulerAngle(2)/3.1415926)*180;
    
        // int i = 1;
        // if(x0==180&&(i%2==1)){
        //     while (x0<360)
        //     {
        //         x0 = 180 + x0;
        //         i++;
        //     }
        // }
        
        std::cout<<"x0 "<<x0<<std::endl;
        // std::cout<<"x1 "<<x1<<std::endl;
        // std::cout<<"x2 "<<x2<<std::endl;
        std::cout<<"矩阵"<<std::endl;
    }
    
    int main(int argc,char **argv){
        ros::init (argc,argv,"listener");
        ros::NodeHandle n;
        ros::Subscriber my_sub = n.subscribe("/mobile_base/sensors/imu_data",2000,acallback);
        ros::Rate rate(20.0);
    
        while(ros::ok){
            ros::spinOnce();
            rate.sleep();
        }   
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:2020-07-13

          本文链接:https://www.haomeiwen.com/subject/pvyzcktx.html