ROS学习记录:在ROS中用C++实现激光雷达避障

前言

本文建立在成功获取激光雷达数据的基础上,详细参考

在ROS中用C++实现获取激光雷达的数据

一、实现思路

在这里插入图片描述

二、在VScode中打开之前编写好的lidar_node.cpp

在这里插入图片描述

三、在lidar_node.cpp中写入如下代码

#include <ros/ros.h>
#include <std_msgs/String.h>
#include <sensor_msgs/LaserScan.h>
#include <geometry_msgs/Twist.h>ros::Publisher vel_pub;
static int nCount = 0;void LidarCallback(const sensor_msgs::LaserScan msg)
{int nNum = msg.ranges.size();int nMid = nNum/2;float fMidDist = msg.ranges[nMid];ROS_INFO("前方测距 ranges[%d] = %f 米", nMid, fMidDist); if(nCount > 0){nCount--;return;}geometry_msgs::Twist vel_cmd;if(fMidDist < 1.5f){vel_cmd.angular.z = 0.3;nCount = 50;}else{vel_cmd.linear.x = 0.05;}vel_pub.publish(vel_cmd);
}int main(int argc, char** argv)
{setlocale(LC_ALL,"");ros::init(argc,argv,"demo_lidar_behavior");ros::NodeHandle n;ros::Subscriber lidar_sub = n.subscribe("/scan", 10, &LidarCallback);vel_pub = n.advertise<geometry_msgs::Twist>("/cmd_vel",10);ros::spin();
}

四、保存后,输入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

在这里插入图片描述

十二、查看仿真环境中的机器人,可以看到机器人向前运动

在这里插入图片描述

十三、在机器人将要碰到书柜时,机器人成功转向再向前运动,避障成功

在这里插入图片描述

十四、给机器人添加上一些圆柱体障碍物,看它能不能也成功避障

在这里插入图片描述

十五、重新运行节点

在这里插入图片描述

十六、测试发现,机器人能够连续避障,不过只有当障碍物在机器人的正前方才会避障成功,因为在代码里我们只判断了机器人正前方的距离,机器人还是有可能会发生侧边碰撞,所以要想机器人做全方位避障,还需对代码进行进一步优化,需要对各方向的距离值做进一步处理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

Mysql的四大引擎,账号管理,数据库的建立

数据库存储引擎查看 Support字段说明 default的为默认引擎 YES表示可以使用 NO表示不能使用 命令 SHOW ENGINES 四大引擎 MEMORY 使用场景&#xff1a;由于易失性&#xff0c;可以用于存储在分析中产生的中间表 特点 所有的数据都保存在内存中&#xff0c;一旦服务器重启&…

[每周一更]-(第55期):Go的interface

参考地址 https://juejin.cn/post/6978322067775029261https://gobyexample.com/interfaceshttps://go.dev/tour/methods/9 介绍下Go的interface 在Go语言中&#xff0c;interface是一种特殊的数据类型&#xff0c;用于定义一组方法的规范。它描述了一个对象可以具备的行为&…

ElasticSearch自定义算分排序(Function Score Query)

使用 function score query&#xff0c;可以修改文档的相关性算分 (query score)&#xff0c;根据新得到的算分排序。 目录 Function Score Query 案例 Function Score Query 几种默认的计算分值的函数&#xff1a; Weight:为每一个文档设置一个简单而不被规范化的权重Fie…

Centos8破解Root密码

注&#xff1a;Centos7同理。 1.重启Centos8系统后&#xff0c;在启动页面中选中第一行&#xff0c;按【e】键进入界面。 2.找到linux开头所在行的找到“ro”改为上“rw init/sysroot/bin/bash”&#xff0c;同时按下【Ctrl】【X】跳转到紧急模式。 3.在紧急模式下&#xff0c…

UniversalTransformer with Adaptive Computation Time(ACT)

原论文链接&#xff1a;https://arxiv.org/abs/1807.03819 Main code import torch import numpy as npclass PositionTimestepEmbedding(torch.nn.Module):def forward(self, x, t):device x.devicesequence_length x.size(1)d_model x.size(2)position_embedding np.arr…

Qt界面篇:Qt停靠控件QDockWidget、树控件QTreeWidget及属性控件QtTreePropertyBrowser的使用

1、功能介绍 本篇主要使用Qt停靠控件QDockWidget、树控件QTreeWidget及Qt属性控件QtTreePropertyBrowser来搭建一个简单实用的主界面布局。效果如下所示。 2、控件使用详解 2.1 停靠控件QDockWidget QDockWidget可以停靠在 QMainWindow 内或作为桌面上的顶级窗口浮动。默认值…

基于OpenCV的透视变化

基本概念 透视变换(Perspective Transformation)是仿射变换的一种非线性扩展,是将图片投影到一个新的视平面(Viewing Plane)&#xff0c;也称作投影映射(Projective Mapping)。 原理&#xff1a;将二维的图片投影到一个三维视平面上&#xff0c;然后再转换到二维坐标下&#…

everything 本地文件搜索工具 完胜WIndows搜索 速度99% 超级给力

"Everything" 是一个 Windows 平台上的免费软件&#xff0c;它是一款功能强大的本地文件搜索工具。它允许用户在计算机上快速而准确地搜索文件和文件夹。以下是一些 "Everything" 的主要特点&#xff1a; 实时搜索&#xff1a; "Everything" 提供…

【小沐学NLP】Python实现TF-IDF算法(nltk、sklearn、jieba)

文章目录 1、简介1.1 TF1.2 IDF1.3 TF-IDF2.1 TF-IDF(sklearn)2.2 TF-IDF(nltk)2.3 TF-IDF(Jieba)2.4 TF-IDF(python) 结语 1、简介 TF-IDF&#xff08;term frequency–inverse document frequency&#xff09;是一种用于信息检索与数据挖掘的常用加权技术。TF是词频(Term Fr…

多台西门子PLC对接Oracle数据库,实现PLC与数据库双向数据通讯

智能网关IGT-DSER方便实现多台PLC与数据库之间的数据通讯&#xff0c;既可以读取PLC的数据上报到数据库&#xff0c;也可以从数据库查询数据后写入到PLC的寄存器。 网关安装在设备侧&#xff0c;与设备同时起停&#xff0c;不担心数据丢失&#xff1b;在断网、服务器维护上报数…

霹雳吧啦Wz《pytorch图像分类》-p5ResNet网络

《pytorch图像分类》p5ResNet网络结构 1 网络中的亮点1.1 超深的网络结构1.2 residual模块1.3 Batch Normalization1.4 迁移学习简介 2 模块类代码2.1 BasicBlock&#xff08;18 & 32 layers&#xff09;2.2 Bottleneck&#xff08;50 & 101 & 152layers&#xff0…

爬虫如何获取免费代理IP(二)

89ip代理爬取代码实现 一、代码实现 import requests import time import random from fake_useragent import UserAgent from lxml import etree import os import csv""" 89ip代理爬取 """class IPSipder(object):def __init__(self):self.u…

Python 操作 JMeter 探索:pymeter 实操指南

概要 JMeter 是一个流行的性能测试工具&#xff0c;用于测试 Web 应用程序的性能和负载。它通常与 GUI 一起使用&#xff0c;但如果您想在自动化测试中集成 JMeter&#xff0c;或者以编程方式创建和运行测试计划&#xff0c;那么 pymeter 库将是一个强大的工具。本文将介绍如何…

2023-12-26分割回文串和子集以及子集II

131. 分割回文串 思想&#xff1a;回溯三步骤&#xff01;① 传入参数 ② 回溯结束条件 ③ 单层搜索逻辑&#xff01;抽象成回溯树&#xff0c;树枝上是每次从头部穷举切分出的子串&#xff0c;节点上是待切分的剩余字符串【从头开始每次往后加一】 class Solution:def partiti…

JavaScript中实现页面跳转的多种方法【通俗易懂】

✨前言✨   本篇文章主要在于如何使用JavaScript中的各种实现页面跳转的方式 &#x1f352;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; &#x1f352;博主将持续更新学习记录收获&#xff0c;友友们有任何问题可以在评论区留言 在JavaScr…

Fortify漏洞之Sql Injection(sql注入)

Fortify漏洞之Sql Injection&#xff08;sql注入&#xff09; 前言 本篇先对Fortify做个简单的认识&#xff0c;同时总结一下sql注入的漏洞&#xff01; 一、Fortify软件介绍 Fortify是一款能扫描分析代码漏洞的强大工具&#xff0c;是由一家加州软件安全厂商开发而成&#…

为什么要为IP地址申请SSL证书?

在不断发展的互联网世界中&#xff0c;网络安全越来越受到重视&#xff0c;这不仅是因为相关法律法规政策的实施&#xff0c;还因为确保网络安全可以为企业减少财产损失。而确保企业在线业务安全的关键一点&#xff0c;就是SSL证书的部署&#xff0c;SSL证书不仅可以加密数据&a…

Unity中Shader雾效在场景中的调节技巧

文章目录 前言一、修改棋盘格Shader的Cull可以在属性面板控制1、在属性面板定义CullMode2、在SubShader中&#xff0c;使用CullMode3、这样就可以在不同剔除情况下使用棋盘格场景了 二、调节天际线颜色和雾融为一体1、在摄像机设置不渲染天空盒&#xff0c;渲染单一颜色2、采样…

如何解决大模型的「幻觉」问题?

如何解决大模型的「幻觉」问题&#xff1f; 如何解决大模型的「幻觉」问题&#xff1f;幻觉产生原因&#xff1f;模型原因数据层面 幻觉怎么评估&#xff1f;Reference-based&#xff08;基于参考信息&#xff09;基于模型的输入、预先定义的目标输出基于模型的输入 Reference-…

Elasticsearch基本操作之索引操作

本文说下Elasticsearch基本操作之索引操作 文章目录 概述创建索引创建索引示例重复创建索引示例 查看索引查看所有索引查看单个索引 删除索引删除索引 概述 由于是使用命令来操作Elasticsearch&#xff0c;可以使用kibana&#xff0c;postman和apifox等工具 我使用了apifox来执…