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.hqwc.cn/news/319782.html

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

相关文章

thinkadmin安装步骤

一,先cmd运行安装命令 ### 创建项目&#xff08; 需要在英文目录下面执行 &#xff09; composer create-project zoujingli/thinkadmin二,在confing中的database.php配置数据库 三,将仓库的data复制到app目录下 https://gitee.com/zoujingli/think-plugs-data 四,在cmd运…

MySQL 8.0 开关 Redo Logging

一 前言 前几天有客户测试使用云数据库的时候提出 要禁止mydumper 关闭redo log的操作 (说白了就是导入数据时保持MySQL 实例的redo logging功能)&#xff0c; 这才想起 在 MySQL 8.0.21 版本中&#xff0c;开启了一个新特性 “Redo Logging 动态开关”。 在新实例导数据的场…

Sectigo泛域名https证书有什么用

Sectigo旗下有泛域名https证书实现了同时为多个域名网站提供安全加密服务&#xff0c;虽然将域名网站的类型限制在了域名以及域名旗下的二级子域名中。Sectigo旗下的泛域名https证书分为DV基础型和OV企业型&#xff0c;提高了https证书对各个场景的适配。今天就随SSL盾小编了解…

迅为RK3588开发板使用 FFMpeg 进行推流

Debian/Ubuntu 系统使用以下命令安装 FFMpeg &#xff0c;如下图所示&#xff1a; apt-get install ffmpeg 使用 ifconfig 查看开发板 ip 为 192.168.1.245 如下图所示&#xff1a; 使用 FFMpeg 推流一个 mp4 视频进行测试&#xff0c;作者将测试视频 test.mp4 放在了根目录下…

如何开通ChatGPT Plus:支付宝充值方法|apple store购买ChatGPT4|支付宝充值apple ID

充值方式一般有两种一种是虚拟卡&#xff0c;还有就是使用礼品卡&#xff0c;我个人 比较喜欢使用虚拟卡&#xff0c;因为有朋友使用礼品卡封号了什么也没有 但是你用虚拟卡&#xff0c;就算封号你的钱会退回到卡里面&#xff0c;这样的话自己在注册一个账号就好了&#xff0c…

并发编程下的集合:数组寻址、LinkedList、HashMap、ConcurrentHashMap

数组如何寻址 a[n]起始地址(n*字节数) 译&#xff1a;a[2]100(2*4) 2为下标、4为int类型字段占四个字节 LinkedList LinkedList为双向链表结构&#xff0c;链表结构又分为单向、双向、以及循环。 // 双向链表 private static class Node<E> {E item;Node<E> nex…

鸿蒙系列--装饰器

一、基础UI组件结构 每个UI组件需要定义为Component struct对象&#xff0c;其内部必须包含一个且只能包含一个build(){}函数&#xff0c;用于绘制UI&#xff1b;struct之内、build()函数之外的地方用于存放数据。 二、基本UI装饰器 Entry 装饰struct&#xff0c;页面的入口…

.cer格式证书文件和 .pfx格式证书文件有什么区别?

这里我们将讨论.cer和.pfx文件类型之间的差异。 什么是数字证书&#xff1f; 数字证书在电子通信中用作验证身份的密码机制。我们需要这些证书来建立安全的在线通信渠道&#xff0c;并确保数字数据的隐私、真实性和正确性。 数字证书包括主题&#xff08;实体详细信息&#xf…

MyBatis学习二:Mapper代理开发、配置文件完成增删改查、注解开发

前言 公司要求没办法&#xff0c;前端也要了解一下后端知识&#xff0c;这里记录一下自己的学习 学习教程&#xff1a;黑马mybatis教程全套视频教程&#xff0c;2天Mybatis框架从入门到精通 文档&#xff1a; https://mybatis.net.cn/index.html Mapper代理开发 目的 解决…

sql:定时执行存储过程(嵌套存储过程、使用游标)

BEGINDeclare FormNo nvarchar(20) --单号Declare Type nvarchar(50) --类型Declare PickedQty float -Declare OutQty float Declare 生产量 floatDeclare 已装箱数量 float Declare 已入库数量 floatDeclare 损耗数量 float Declare 退货品出库数量 intdeclare k c…

C#:如何产生一个临时文件

在我们实际编程中&#xff0c;经常有将内容写到一个临时文件的需要。 比如&#xff1a;将网络上的图片下载下来&#xff0c;获取到图片的一些信息。 代码如下&#xff0c;看结果可知&#xff1a; 临时文件都是保存在系统临时文件夹的目录下&#xff0c;临时文件的扩展名统一…

程序媛的mac修炼手册-- 终端shell的驾驭 zsh vs bash

进入终端(Terminal)为新下载的应用配置环境&#xff0c;是Mac生产力up up的关键一步&#xff0c;更是编程小白装大神的第一步。Fake it till you make it , 硅谷大神标准路径&#xff5e; shell的基本原理 为应用配置环境&#xff0c;相当于在应用和操作系统间架桥。由此&…