ROS学习记录:在ROS中用C++实现获取激光雷达的数据

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

在这里插入图片描述

二、输入source ./devel/setup.bash,将ROS工作空间的环境设置(setup)添加到当前终端会话中

在这里插入图片描述

三、输入roslaunch wpr_simulation wpb_simple.launch打开机器人仿真环境

在这里插入图片描述

四、仿真环境打开成功

在这里插入图片描述

五、再打开另一个终端,输入source ./devel/setup.bash

在这里插入图片描述

六、激光雷达的数据获取,在wpr_simulation中有一个示例程序,在终端中输入(这里我清屏了一下所以前面source看不到了)rosrun wpr_simulation demo_lidar_data

在这里插入图片描述

七、可以看到,激光雷达检测到机器人前方的障碍物为2.6米左右,ok,本文目的就是通过自己实现达到跟这个例子程序一样的效果

在这里插入图片描述

八、在机器人的ROS系统中,激光雷达通常会有一个对应的节点,这个节点通常由雷达的厂商提供

在这里插入图片描述

九、我们只需要简单的配置一下端口参数,就能和激光雷达的电路系统建立连接,雷达的测距数值,就从电路系统传递到雷达节点

在这里插入图片描述

十、雷达节点会把测距数值封装成一个消息包,发布在一个Topic话题中

在这里插入图片描述

十一、我们只需订阅这个话题,就能获取激光雷达的数据了

在这里插入图片描述

十二、这个消息包的格式就是LaserScan格式,在这篇笔记中有详细介绍ROS系统中激光雷达消息包的数据格式

在这里插入图片描述

十三、发布消息包的话题名称是约定俗成的叫/scan

在这里插入图片描述

十四、获取激光雷达数据的实现思路

在这里插入图片描述

十五、输入cd ~/catkin_ws1/src进入工作空间下的src目录

在这里插入图片描述

十六、输入catkin_create_pkg lidar_pkg roscpp rospy sensor_msgs创建一个软件包,包名叫做lidar_pkg,依赖项中的sensor_msgs是包含了雷达消息格式的的软件包

在这里插入图片描述

十七、输入code .打开VScode

在这里插入图片描述

十八、VScode打开成功

在这里插入图片描述

十九、在lidar_pkg的src文件夹下新建文件

在这里插入图片描述

二十、名字叫做lidar_node.cpp

在这里插入图片描述

二十一、在lidar_node.cpp文件总写入如下代码

#include <ros/ros.h>  //引入ROS系统头文件
#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[])
{/* code */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设置编译规则

在这里插入图片描述

二十三、在CMakeLists.txt文件末尾加入如下代码

在这里插入图片描述

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

二十四、按Shift+Ctrl+B进行编译,选择catkin_make:build

在这里插入图片描述

二十五、编译成功

在这里插入图片描述

二十六、打开一个终端,输入cd ~/catkin_ws1进入工作空间

在这里插入图片描述

二十七、输入source ./devel/setup.bash

在这里插入图片描述

二十八、输入roslaunch wpr_simulation wpb_simple.launch,打开机器人仿真环境

在这里插入图片描述

二十九、机器人仿真环境打开成功

在这里插入图片描述

三十、再打开一个终端,输入source ./devel/setup.bash

在这里插入图片描述

三十一、输入rosrun lidar_pkg lidar_node启动刚才编写的lidar_node节点,可以看到机器人前方测距值为2.6米左右,

在这里插入图片描述

三十二、点击移动图标,再点击书柜,再点击红色坐标轴移动书柜

在这里插入图片描述

三十三、发现测距值发生了改变,可见这个测距值就是机器人正前方障碍物的距离

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/319091.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【人工智能】百度智能云千帆AppBuilder,快速构建您的专属AI原生应用

大家好&#xff0c;我是全栈小5&#xff0c;欢迎来到《小5讲堂》&#xff0c;此序列是《人工智能》专栏文章。 这是2024年第5篇文章&#xff0c;此篇文章是进行人工智能相关的实践序列文章&#xff0c;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&…

聚道云软件连接器带给服装行业客户的业务革新

【客户介绍】 某服装制作企业&#xff0c;专注于设计和生产各类服饰。追求时尚与品质的完美结合&#xff0c;以满足不同消费者的需求。凭借丰富的行业经验&#xff0c;该企业不断创新&#xff0c;致力于提供优质的服装产品和服务。我们的目标是成为消费者心目中的首选品牌&…

大模型上下文长度的超强扩展:从LongLora到LongQLora

前言 本文一开始是《七月论文审稿GPT第2版&#xff1a;从Meta Nougat、GPT4审稿到Mistral、LongLora Llama》中4.3节的内容&#xff0c;但考虑到 一方面&#xff0c;LongLora的实用性较高二方面&#xff0c;为了把LongLora和LongQLora更好的写清楚&#xff0c;而不至于受篇幅…

八大算法排序@冒泡排序(C语言版本)

冒泡排序 概念 冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单直观的排序算法&#xff0c;它重复地遍历待排序序列&#xff0c;一次比较两个相邻的元素&#xff0c;如果它们的顺序错误就将它们交换过来。通过多次的遍历&#xff0c;使得最大的元素逐渐移动到待排序序…

[C#]基于deskew算法实现图像文本倾斜校正

【算法介绍】 让我们开始讨论Deskeweing算法的一般概念。我们的主要目标是将旋转的图像分成文本块&#xff0c;并确定它们的角度。为了让您详细了解我将使用的方法&#xff1a; 照常-将图像转换为灰度。应用轻微的模糊以减少图像中的噪点。现在&#xff0c;我们的目标是找到带…

关于设计模式的一点总结

一、GoF 23种设计模式 1.分类 GoF 23种设计模式可分为几类&#xff1a;创建型、结构型和行为型。如下表 分类设计模式创建型单例模式、工厂方法模式、抽象工厂模式、原型模式、建造者模式结构型代理模式、适配器模式、装饰者模式、桥接模式、组合模式、门面模式、享元模式行…

打字练习(Python代码模拟打字练习软件效果)

Python代码模拟打字练习软件效果&#xff0c;循环进行单行打字练习&#xff0c;结束时输出平均速度和综合正确率。 (笔记模板由python脚本于2024年01月03日 22:36:34创建&#xff0c;本篇笔记适合熟悉Python字符串和列表基本数据类型的coder翻阅) 【学习的细节是欢悦的历程】 P…

c++语言基础18-开房门

题目描述 假设你手里有一串钥匙&#xff0c;这串钥匙上每把钥匙都有一个编号&#xff0c;对应着一个房门的编号。现给你一个房门编号&#xff0c;你需要判断是否能够打开该房门。 输入描述 测试数据共有多组。 第一行为一个整数 s&#xff0c;表示共有多少组测试数据。 每组第一…

基于springboot智慧食堂管理系统源码和论文

随着Internet的发展&#xff0c;人们的日常生活已经离不开网络。未来人们的生活与工作将变得越来越数字化&#xff0c;网络化和电子化。网上管理&#xff0c;它将是直接管理“智慧食堂”系统的最新形式。本论文是以构建“智慧食堂”系统为目标&#xff0c;使用java技术制作&…

Spark Streaming的DStream与窗口操作

实时数据处理已经成为当今大数据时代的一个重要领域&#xff0c;而Spark Streaming是Apache Spark生态系统中的一个关键模块&#xff0c;用于处理实时数据流。本文将深入探讨Spark Streaming中的DStream&#xff08;离散流&#xff09;概念以及如何使用窗口操作来处理实时数据。…

魔棒无人直播系统有哪些优势?

随着科技的发展&#xff0c;越来越多新鲜事物的出现&#xff0c;它们代替了我们做很多的事情&#xff0c;开始解放着自己的双手&#xff0c;其中&#xff0c;无人直播的出现&#xff0c;就让直播变得更加简单。 因为是无人直播&#xff0c;所以全程不需要真人出镜&#xff0c;…

【PID精讲 13 】位置式PID和增量式PID

文章目录 位置式PID和增量式PID一、位置式PID控制算法二、增量式PID控制算法及仿真三、位置式与增量式优缺点 位置式PID和增量式PID 在计算机控制系统中&#xff0c;PID控制是通过计算机程序实现的&#xff0c;因此它的灵活性很大。一些原来在模拟PID控制器中无法实现的问题&a…