您好,
会员登录 快速注册
退出 ( 条未读消息)
关于本站 意见反馈 首页

公告:小宅博客网可以开发票了,需要发票的,去群里找群主哈!!
全部文章分类
  • 人工智能 >

  • 编程语言 >

  • WPF系列 >

  • ASP.NET系列 >

  • Linux >

  • 数据库 >

  • 嵌入式 >

  • WEB技术 >

  • PLC系列 >

  • 微服务与框架 >

  • 小宅DIY >

  • 学习资料 >

OpenCv基础 ANN车牌识别 yolov5车牌识别 指针式仪表识别 ROS系列 YOLO Halcon Detectron2 昇腾AI ChatGPT在线体验 英伟达JETSON ChatGLM ChatTTS FunASR 地平线 ByteTrack 魔搭社区 LangChain
C C# C++ Python Java Go
WPF
ASP.NET小功能 GPS定位系统-MVC GPS定位系统-VUE ASP.NET WebRTC
Linux Linux内核 Shell MakeFile
MySql SqlServer Oracle
STM8 STM32 51单片机
VUE入门 HTML JavaScript CSS layui镜像网站 ElementUi中文官网 element-plus 图标
三菱 欧姆龙 西门子 施耐德 松下 台达
IOTSharp IOTGateway ABP FRAMEWORK Docker
亚克力音响 编程仙途:智驭万法
面试题与技巧 Python入门技能树 微软C#教程
首页 编程之美 工具下载 全国就业 流量地图 文心一言
ROS系列
ROS - 介绍 ROS1-常规安装方法 ROS1-Linux下的ROS环境搭建 ROS1-ROS话题:发布者 ROS1-发布者与订阅者通讯 ROS1-服务器与客户端节点通讯 ROS1-动作服务器与客户端通讯 ROS1-发布imu和gps消息 ROS2-新建Ubuntu环境 ROS2-创建一个简单节点 ROS2-Python之消息的发布与订阅 ROS2-C++之消息的发布与订阅 ROS2-调用USB免驱摄像头 ROS2-地瓜机器人笔记 ROS2 控制小车进行矩形运动 ROS2 设置节点开机自启 ROS2 添加自定义msg ROS2 URDF建模 ROS2 Gazebo 仿真环境搭建 ROS2 XACRO建模 ROS2 在Gazebo加载机器人模型 ROS2 Carttographer安装 ROS2 配置cartographer进行建图 ROS2 Nav2导航仿真-新建工程 ROS2 Nav2导航仿真 ROS2 Nav2 API导航
ROS1-动作服务器与客户端通讯
ROS2-新建Ubuntu环境
激萌の小宅 CSDN ROS系列

文章作者:激萌の小宅

促销:¥0

价格:¥0

配送方式: 购买后立即生效(如购买异常,请联系站长)
付款之后一定要等待自动跳转结束,否则购买可能会失败
  • 0 天

    有效期

  • 0

    总销量

  • 0

    累计评价

发布imu和gps消息 - (ROS学习笔记7)


转载:https://blog.csdn.net/Tansir94/article/details/81385812

CSDN原文:https://blog.csdn.net/gs1069405343/article/details/88644518


一、创建工作空间

mkdir -p imu_gps/src  #创建工作空间
catkin_make  #编译
source devel/setup.bash  #将新的工作空间加入到环境变量中
echo $ROS_PACKAGE_PATH   #输入如下指令查看环境变量

二、创建IMU_data发布程序包

首先下方链接地址中是sensor_msgs/Imu.msg的消息格式:

http://docs.ros.org/jade/api/sensor_msgs/html/msg/Imu.html

cd imu_gps/src #进入工作空间中的src

#创建一个名为'imu_gps_publish'的新程序包,这个程序包依赖于std_msgs、roscpp和rospy:
catkin_create_pkg imu_gps_publish stdmsgs roscpp rospy

此时整个工作空间的文件架构如下:

imu_gps   #工作空间
        build
        devle
        src
            imu_gps_publish
                include
                src
                CMakeLists.txt
                package.xml
      CMakeLists.txt

在imu_gps_publish文件夹下的src文件中新建imu_gps_data.cpp

cd imu_gps_publish/src 
touch imu_gps_data.cpp

将如下代码复制到新建的cpp文件中

// Step 1:  Include Library Headers:
//发布imu的数据到IMU_data
#include <ros/ros.h> 
#include <sensor_msgs/Imu.h>

int main(int argc, char** argv)
{
    // Step 2: Initialization:
       ros::init(argc, argv, "imu_gps");     
    ros::NodeHandle n;  

    ros::Publisher IMU_pub = n.advertise<sensor_msgs::Imu>("IMU_data", 20);  
    ros::Rate loop_rate(50);  
    while(ros::ok())
    {

            sensor_msgs::Imu imu_data;
            imu_data.header.stamp = ros::Time::now();
            imu_data.header.frame_id = "base_link";
            //四元数位姿,所有数据设为固定值,可以自己写代码获取IMU的数据,,然后进行传递
           imu_data.orientation.x = 0;
            imu_data.orientation.y = -1;
            imu_data.orientation.z = -5;
            imu_data.orientation.w = 6;
            //线加速度
            imu_data.linear_acceleration.x = 0.01; 
            imu_data.linear_acceleration.y = 0.02;
            imu_data.linear_acceleration.z = 0.03;
        //角速度
            imu_data.angular_velocity.x = 0.05; 
            imu_data.angular_velocity.y = 0.06; 
            imu_data.angular_velocity.z = 0.07;



            IMU_pub.publish(imu_data);



        ros::spinOnce();  
        loop_rate.sleep();  
    }

    return 0;
}

更改imu_gps_publish下的CMakeLists.txt文件,添加如下两行

add_executable(${PROJECT_NAME}_node src/imu_gps_data.cpp)
target_link_libraries(${PROJECT_NAME}_node
  ${catkin_LIBRARIES}
 )

返回工作空间编译:

cd
cd imu_gps
catkin_make

编译成功,运行结果如下:

现在尝试运行节点:打开roscore,运行节点程序

roscore
rosrun imu_gps_publish imu_gps_publish_node

在新终端中查看节点和话题以及发布的消息如下图:

注:若是在CMakeList.txt中添加的两行为:

add_executable(imu_gps src/imu_gps_data.cpp)
target_link_libraries(imu_gps ${catkin_LIBRARIES})

重新编译运行时,启动节点的命令为

rosrun imu_gps_publish imu_gps

可见,add_executable意思为添加可执行的文件,imu_gps或是${PROJECT_NAME}_node指的是运行的节点的名称。


三、在IMU_data发布的基础上加入GPS数据发布

GPS消息类型文档:

http://docs.ros.org/jade/api/sensor_msgs/html/msg/NavSatFix.html3

在imu_gps_data.cpp文件中添加gps数据消息的发布,最终代码:

// Step 1:  Include Library Headers:
//发布imu的数据到IMU_data
#include <ros/ros.h> 
#include <sensor_msgs/Imu.h>
#include <sensor_msgs/NavSatFix.h>

int main(int argc, char** argv)
{
    // Step 2: Initialization:
    ros::init(argc, argv, "imu_gps");     
    ros::NodeHandle n;  
    //定义IMU数据的消息发布
    ros::Publisher IMU_pub = n.advertise<sensor_msgs::Imu>("IMU_data", 20);  
    //定义GPS数据的消息发布
    ros::Publisher GPS_pub = n.advertise<sensor_msgs::NavSatFix>("GPS_data", 20);

    ros::Rate loop_rate(10);  
    while(ros::ok())
    {
//imu消息的赋值和发布                   
            sensor_msgs::Imu imu_data;
            imu_data.header.stamp = ros::Time::now();
            imu_data.header.frame_id = "base_link";
            //四元数位姿,所有数据设为固定值,可以自己写代码获取IMU的数据,,然后进行传递
            imu_data.orientation.x = 0;
            imu_data.orientation.y = -1;
            imu_data.orientation.z = -5;
            imu_data.orientation.w = 6;
            //线加速度
            imu_data.linear_acceleration.x = 0.01; 
            imu_data.linear_acceleration.y = 0.02;
            imu_data.linear_acceleration.z = 0.03;
        //角速度
            imu_data.angular_velocity.x = 0.05; 
            imu_data.angular_velocity.y = 0.06; 
            imu_data.angular_velocity.z = 0.07;
            //发布IMU
            IMU_pub.publish(imu_data);


//gps消息的赋值和发布
            sensor_msgs::NavSatFix gps_data;
            gps_data.header.stamp = ros::Time::now();
            gps_data.header.frame_id = "base_link";

            //gps_data.status="working";
            gps_data.latitude=36.6555;
            gps_data.longitude=117.2656;
            gps_data.altitude=40.5;

            GPS_pub.publish(gps_data);

        ros::spinOnce();  
        loop_rate.sleep();  
    }

    return 0;
}

添加工作空间环境变量,运行节点:

source devel/setup.bash
rosrun imu_gps_publish imu_gps

查看节点和消息:

最终,实现了在一个节点中的IMU和GPS的数据发布。

ROS1-动作服务器与客户端通讯
ROS2-新建Ubuntu环境

友情链接: CSDN激萌の小宅 95知识库 自考题库 罗分明个人网络博客 精益编程leanboot

小宅博客  www.bilibili996.com All Rights Reserved. 备案号: 闽ICP备2024034575号

网站经营许可证  福建省福州市 Copyright©2021-2025 版权所有

小宅博客
首页 智能家居 地图定位
公告:小宅博客网可以开发票了,需要发票的,去群里找群主哈!!

文章作者:激萌の小宅

促销:¥0

价格:¥0

配送方式: 购买后立即生效(如购买异常,请联系站长)
付款之后一定要等待自动跳转结束,否则购买可能会失败
  • 0 天

    有效期

  • 0

    总销量

  • 0

    累计评价

发布imu和gps消息 - (ROS学习笔记7)


转载:https://blog.csdn.net/Tansir94/article/details/81385812

CSDN原文:https://blog.csdn.net/gs1069405343/article/details/88644518


一、创建工作空间

mkdir -p imu_gps/src  #创建工作空间
catkin_make  #编译
source devel/setup.bash  #将新的工作空间加入到环境变量中
echo $ROS_PACKAGE_PATH   #输入如下指令查看环境变量

二、创建IMU_data发布程序包

首先下方链接地址中是sensor_msgs/Imu.msg的消息格式:

http://docs.ros.org/jade/api/sensor_msgs/html/msg/Imu.html

cd imu_gps/src #进入工作空间中的src

#创建一个名为'imu_gps_publish'的新程序包,这个程序包依赖于std_msgs、roscpp和rospy:
catkin_create_pkg imu_gps_publish stdmsgs roscpp rospy

此时整个工作空间的文件架构如下:

imu_gps   #工作空间
        build
        devle
        src
            imu_gps_publish
                include
                src
                CMakeLists.txt
                package.xml
      CMakeLists.txt

在imu_gps_publish文件夹下的src文件中新建imu_gps_data.cpp

cd imu_gps_publish/src 
touch imu_gps_data.cpp

将如下代码复制到新建的cpp文件中

// Step 1:  Include Library Headers:
//发布imu的数据到IMU_data
#include <ros/ros.h> 
#include <sensor_msgs/Imu.h>

int main(int argc, char** argv)
{
    // Step 2: Initialization:
       ros::init(argc, argv, "imu_gps");     
    ros::NodeHandle n;  

    ros::Publisher IMU_pub = n.advertise<sensor_msgs::Imu>("IMU_data", 20);  
    ros::Rate loop_rate(50);  
    while(ros::ok())
    {

            sensor_msgs::Imu imu_data;
            imu_data.header.stamp = ros::Time::now();
            imu_data.header.frame_id = "base_link";
            //四元数位姿,所有数据设为固定值,可以自己写代码获取IMU的数据,,然后进行传递
           imu_data.orientation.x = 0;
            imu_data.orientation.y = -1;
            imu_data.orientation.z = -5;
            imu_data.orientation.w = 6;
            //线加速度
            imu_data.linear_acceleration.x = 0.01; 
            imu_data.linear_acceleration.y = 0.02;
            imu_data.linear_acceleration.z = 0.03;
        //角速度
            imu_data.angular_velocity.x = 0.05; 
            imu_data.angular_velocity.y = 0.06; 
            imu_data.angular_velocity.z = 0.07;



            IMU_pub.publish(imu_data);



        ros::spinOnce();  
        loop_rate.sleep();  
    }

    return 0;
}

更改imu_gps_publish下的CMakeLists.txt文件,添加如下两行

add_executable(${PROJECT_NAME}_node src/imu_gps_data.cpp)
target_link_libraries(${PROJECT_NAME}_node
  ${catkin_LIBRARIES}
 )

返回工作空间编译:

cd
cd imu_gps
catkin_make

编译成功,运行结果如下:

现在尝试运行节点:打开roscore,运行节点程序

roscore
rosrun imu_gps_publish imu_gps_publish_node

在新终端中查看节点和话题以及发布的消息如下图:

注:若是在CMakeList.txt中添加的两行为:

add_executable(imu_gps src/imu_gps_data.cpp)
target_link_libraries(imu_gps ${catkin_LIBRARIES})

重新编译运行时,启动节点的命令为

rosrun imu_gps_publish imu_gps

可见,add_executable意思为添加可执行的文件,imu_gps或是${PROJECT_NAME}_node指的是运行的节点的名称。


三、在IMU_data发布的基础上加入GPS数据发布

GPS消息类型文档:

http://docs.ros.org/jade/api/sensor_msgs/html/msg/NavSatFix.html3

在imu_gps_data.cpp文件中添加gps数据消息的发布,最终代码:

// Step 1:  Include Library Headers:
//发布imu的数据到IMU_data
#include <ros/ros.h> 
#include <sensor_msgs/Imu.h>
#include <sensor_msgs/NavSatFix.h>

int main(int argc, char** argv)
{
    // Step 2: Initialization:
    ros::init(argc, argv, "imu_gps");     
    ros::NodeHandle n;  
    //定义IMU数据的消息发布
    ros::Publisher IMU_pub = n.advertise<sensor_msgs::Imu>("IMU_data", 20);  
    //定义GPS数据的消息发布
    ros::Publisher GPS_pub = n.advertise<sensor_msgs::NavSatFix>("GPS_data", 20);

    ros::Rate loop_rate(10);  
    while(ros::ok())
    {
//imu消息的赋值和发布                   
            sensor_msgs::Imu imu_data;
            imu_data.header.stamp = ros::Time::now();
            imu_data.header.frame_id = "base_link";
            //四元数位姿,所有数据设为固定值,可以自己写代码获取IMU的数据,,然后进行传递
            imu_data.orientation.x = 0;
            imu_data.orientation.y = -1;
            imu_data.orientation.z = -5;
            imu_data.orientation.w = 6;
            //线加速度
            imu_data.linear_acceleration.x = 0.01; 
            imu_data.linear_acceleration.y = 0.02;
            imu_data.linear_acceleration.z = 0.03;
        //角速度
            imu_data.angular_velocity.x = 0.05; 
            imu_data.angular_velocity.y = 0.06; 
            imu_data.angular_velocity.z = 0.07;
            //发布IMU
            IMU_pub.publish(imu_data);


//gps消息的赋值和发布
            sensor_msgs::NavSatFix gps_data;
            gps_data.header.stamp = ros::Time::now();
            gps_data.header.frame_id = "base_link";

            //gps_data.status="working";
            gps_data.latitude=36.6555;
            gps_data.longitude=117.2656;
            gps_data.altitude=40.5;

            GPS_pub.publish(gps_data);

        ros::spinOnce();  
        loop_rate.sleep();  
    }

    return 0;
}

添加工作空间环境变量,运行节点:

source devel/setup.bash
rosrun imu_gps_publish imu_gps

查看节点和消息:

最终,实现了在一个节点中的IMU和GPS的数据发布。