首页 > 编程语言 >ROS1,用C++实现获取激光雷达数据,并使用gazebo测试

ROS1,用C++实现获取激光雷达数据,并使用gazebo测试

时间:2024-10-11 17:22:34浏览次数:10  
标签:node catkin C++ lidar pkg LidarCallback ros gazebo ROS1

在这里插入图片描述
实现步骤

  1. 构建一个新的软件包,包名叫做lidar_pkg。
cd catkin_ws/src/

catkin_create_pkg lidar_pkg roscpp rospy sensor_msgs

在这里插入图片描述
输入code,打开vscode
在这里插入图片描述
在这里插入图片描述

  1. 在软件包中新建一个节点,节点名叫做lidar_node。
    在这里插入图片描述

  2. 在节点中,向ROS大管家NodeHandle申请订阅话题/scan,并设置回调函数为LidarCallback()。

  3. 构建回调函数LidarCallback(),用来接收和处理雷达数据。

  4. 调用ROSINFO()显示雷达检测到的前方障碍物距离。

步骤345的代码如下

#include <ros/ros.h>
#include <sensor_msgs/LaserScan.h>

void LidarCallback(const sensor_msgs::LaserScan msg){
    float fMidDist = msg.ranges[180];
    ROS_INFO("前方测距 ranges[180]=%f 米", fMidDist);

}

int main(int argc, char *argv[]){
    setlocale(LC_ALL,"");
    ros::init(argc, argv, "lidar_node");

    ros::NodeHandle n;
    ros::Subscriber lidar_sub = n.subscribe("/scan", 10, &LidarCallback);
    ros::spin();
    return 0;
}

编写好代码后,需要编译。

打开cmakelists.txt

在这里插入图片描述

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

这几行其实就是里面136行和149-151行的内容。

将 这几行换成下面 几行

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

编译

ctrl+alt+T打开终端,输入

cd catkin_ws/
catkin_make

在这里插入图片描述


以上就是项目编写 的一般过程。

接下来我们测试一下 我们的代码

首先,使用下面命令 打开gazebo仿真环境

roslaunch wpr_simulation wpb_simple.launch

在这里插入图片描述

使用terminator终端工具,ctrl shift+O分屏,输入

rosrun lidar_pkg lidar_node

在这里插入图片描述

标签:node,catkin,C++,lidar,pkg,LidarCallback,ros,gazebo,ROS1
From: https://blog.csdn.net/knighthood2001/article/details/142852820

相关文章

  • C++ 读写锁 shared_mutex
    C++17新增了std::shared_mutex,通过shared_mutex可以实现读写锁的功能, 参考网址:https://zh.cppreference.com/w/cpp/thread/shared_mutexshared_mutex可以同时支持多个线程对共享资源同时读,但是只支持一个线程对同一共享资源进行写操作。shared_mutex支持共享锁和独......
  • Dev C++ 安装与使用
    本帖子针对C/C++入门的学生。用该编译器可便于初学者入门C/C++。一、安装1、下载DevC++    百度搜索DevC++的官网点击Download等待下载2、安装点击安装这里并没有发现有支持中文的语言选项(可能是本人在语言选择的时候漏看了,见谅),选择English即可。......
  • C++删除字符串中的所有空格与换行(任意字符)
    删除字符串中的所有空格与换行使用头文件中的remove函数,注意:std::remove不会改变容器的大小,它只是将元素移动到容器的末尾。因此,我们需要调用erase来实际从字符串中删除这些元素。使用std::remove算法,它重排元素,使得要删除的元素(在这里是空格和换行符)被放在序列的末尾,......
  • C++ 算法学习——1.8 倍增与ST表
    在C++中,"倍增"(也称为"指数增长"或"指数级别增长")是一种算法优化技术,它通常用于解决一些需要频繁查询某个区间内的信息的问题,例如在处理动态规划、搜索等算法中。倍增思想的主要目的是通过预处理和存储一些中间结果,以加速后续的查询操作。具体来说,倍增思想通常包括以下步骤:......
  • C++ 算法学习——1.8 单调队列算法
    单调队列(MonotonicQueue)是一种特殊类型的队列,通常用于解决一些数组或序列相关的问题。和单调栈类似,单调队列也具有一些特定的性质,在解决一些问题时非常有用。以下是关于单调队列的一些重要点:定义:单调队列是一种数据结构,队列中的元素满足单调递增或单调递减的性质。应用:单......
  • Chromium 前端form表单提交过程分析c++
    一、本文以一个简单的HTML表单,包含两个文本输入框和一个提交按钮:<formaction="demo_form.php">Firstname:<inputtype="text"name="fname"><br>Lastname:<inputtype="text"name="lname"><br><i......
  • 实验1 现代C++编程初体验
    实验任务1代码1//现代C++标准库、算法库体验2//本例用到以下内容:3//1.字符串string,动态数组容器类vector、迭代器4//2.算法库:反转元素次序、旋转元素5//3.函数模板、const引用作为形参67#include<iostream>8#include<string>9......
  • 实验1 现代C++编程初体验
    任务1代码:1//现代C++标准库、算法库体验2//本例用到以下内容:3//1.字符串string,动态数组容器类vector、迭代器4//2.算法库:反转元素次序、旋转元素5//3.函数模板、const引用作为形参67#include<iostream>8#include<string>9#inc......
  • C#调用C++ dll教程
    C#调用C++dll教程文章目录一、创建C++dll项目二、C#程序员调用C++dll三、C++与C#数据类型对应基本数据类型对应表C++指针类型与C#类型在使用C#开发客户端时,有时需要调用C++dll,本篇博客来介绍C#程序如何调用C++dll。一、创建C++dll项目首先使用VS2022创建C++d......
  • 【C/C++内存管理】
    【知识预告】C/C++内存分布C语言中动态内存管理方式C++内存管理new和delete的实现原理常见面试题内存泄漏1C/C++内存分布intglobalVar=1;staticintstaticGlobalVar=1;voidTest(){ staticintstaticVar=1; intlocalVar=1; intnum1[10]={1,2,3,......