ROS学习记录:获取IMU数据的C++节点

前言

IMU消息包数据格式
继了解了IMU消息包的数据格式后,接下来便是掌握如何通过C++获取IMU的数据

一、IMU设备话题

一般的应用里,通常订阅的是第二个话题
在这里插入图片描述

二、实现思路

编写一个节点,订阅IMU数据话题,就能获取到IMU数据了
在这里插入图片描述

三、实现步骤

在这里插入图片描述

四、开始操作

1、打开一个终端,输入cd catkin_ws1/src/ 进入工作空间

在这里插入图片描述

2、输入 catkin_create_pkg imu_pkg roscpp rospy sensor_msgs 创建软件包,包名叫做imu_pkg,依赖项里加入了包含IMU消息格式的sensor_msgs

在这里插入图片描述

3、输入code . 打开VScode

在这里插入图片描述

4、在刚刚创建的imu_pkg软件包下的src目录下新建一个节点文件

在这里插入图片描述

5、名字叫做imu_node.cpp

在这里插入图片描述

6、在imu_node.cpp文件中写入如下代码

#include "ros/ros.h" //包含ros头文件
#include "sensor_msgs/Imu.h"  //包含sensor_msgs/Imu消息类型头文件
#include "tf/tf.h"//用于使用TF工具,将四元素转换为欧拉角

void IMUCallback(sensor_msgs::Imu msg)   //IMU消息回调函数
{
    if(msg.orientation_covariance[0]<0)   //检查协方差,确保数据有效性
        return;                            //如果协方差小于0,数据无效,直接返回
    tf::Quaternion quaternion(            //创建四元素
        msg.orientation.x,              //从IMU消息中获取四元素数据
        msg.orientation.y,
        msg.orientation.z,
        msg.orientation.w
    );

    double roll,pitch,yaw;           //定义滚转、俯仰、偏航角

    tf::Matrix3x3(quaternion).getRPY(roll,pitch,yaw);// 利用TF库将四元数转换为欧拉角
    roll = roll*180/M_PI;       // 弧度转换为角度
    pitch = pitch*180/M_PI;     // 弧度转换为角度
    yaw = yaw*180/M_PI;         // 弧度转换为角度

    ROS_INFO("滚转= %.0f  俯仰= %.0f 偏航= %.0f",roll,pitch,yaw);    // 打印欧拉角
}

int main(int argc, char  *argv[])   // 主函数
{
    setlocale(LC_ALL,"");           // 设置本地区域选项
    ros::init(argc,argv,"imu_node");        // 初始化ROS节点

    ros::NodeHandle n;              // 创建节点句柄
    ros::Subscriber imu_sub = n.subscribe("/imu/data",10,IMUCallback); // 创建imu_sub订阅者,订阅IMU数据消息

    ros::spin();// 进入自发循环,阻塞程序直至节点关闭

    return 0;
}

五、给节点设置编译规则

1、打开imu_pkg里的CMakeLists.txt文件

在这里插入图片描述

2、CMakeLists.txt文件末尾添加如下代码

add_executable(imu_node src/imu_node.cpp)
add_dependencies(imu_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
target_link_libraries(imu_node
  ${catkin_LIBRARIES}
)

3、Ctrl+Shift+B进行编译(记得先保存再编译),编译成功

在这里插入图片描述

六、运行节点程序

1、再打开一个终端,输入cd ~/catkin_ws1进入工作空间

在这里插入图片描述

2、输入source ./devel/setup.bash,设置ROS的环境变量,以便在当前的终端窗口中正确运行ROS软件包。

在这里插入图片描述

3、输入roslaunch wpr_simulation wpb_simple.launch启动机器人仿真环境

在这里插入图片描述

4、机器人仿真环境启动成功

在这里插入图片描述

5、再打开一个终端,进入工作空间

在这里插入图片描述

6、输入source ./devel/setup.bash,设置ROS的环境变量,以便在当前的终端窗口中正确运行ROS软件包。

在这里插入图片描述

7、输入rosrun imu_pkg imu_node,运行imu_node节点程序

在这里插入图片描述

8、可以看到当前三个欧拉角都是0

在这里插入图片描述

9、回到Gazebo机器人仿真环境,先点旋转按钮,再点机器人

在这里插入图片描述

10、随意拖动旋转机器人,可以看到欧拉角相应的变化,至此,成功的获取了机器人的姿态信息

在这里插入图片描述

最近更新

  1. TCP协议是安全的吗?

    2024-03-31 10:38:02       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-31 10:38:02       20 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-31 10:38:02       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-31 10:38:02       20 阅读

热门阅读

  1. 有线电视网 题解

    2024-03-31 10:38:02       15 阅读
  2. 蓝桥杯算法题-发现环

    2024-03-31 10:38:02       17 阅读
  3. Unity WebRequest 变得简单

    2024-03-31 10:38:02       16 阅读
  4. Nginx入门--初识Nginx的架构

    2024-03-31 10:38:02       16 阅读
  5. 1688中国站按关键字搜索工厂数据 API

    2024-03-31 10:38:02       14 阅读
  6. B/S架构

    B/S架构

    2024-03-31 10:38:02      16 阅读
  7. 把CIFAR-10数据集分类保存成图片

    2024-03-31 10:38:02       15 阅读
  8. 如何系统地学习Python(四)标准库(二)

    2024-03-31 10:38:02       13 阅读
  9. 如何提高账号安全——密码的秘密

    2024-03-31 10:38:02       13 阅读
  10. 汽车电子行业知识:汽车电子领域包含哪些技术

    2024-03-31 10:38:02       15 阅读
  11. Centos 7 安装 Node.js v16.13.1

    2024-03-31 10:38:02       17 阅读
  12. 深入了解Vue中slot的应用

    2024-03-31 10:38:02       15 阅读