当前位置: 首页 > news >正文

《Ubuntu20.04环境下的ROS进阶学习7》

一、使用nav_msgs消息包显示小车轨迹

        在我们跑实验的时候通常希望看到小车的轨迹,在ROS1中可以将小车的路径存储在nav_msgs::Path 这种消息类型里,发布出来后使用rviz来显示小车轨迹。

二、了解nav_msgs消息包

        那么首先我们要来了解一下nav_msgs这个消息包了。这里可以下载common_interfaces这个功能包,里面有常用的很多种消息包可供选择。

使用  git clone https://github.com/ros2/common_interfaces.git

其中nav_msgs消息包中有四种消息格式分别是:

①  GridCells.msg  :一般用于显示网格单元的状态,通常用于显示区域中的障碍和自用空间。

②  MapMetaData.msg  :提供关于栅格地图的元数据,通常与①一起用。

③  OccupancyGrid.msg  :表示一个二维栅格地图,用于描述环境的占用状态。

④  Odometry.msg  :提供有关机器人位姿和速度的信息,通常用于定位和导航。

⑤  Path.msg  :表示一条路径,通常用于导航算法中的路径规划和跟踪。

这里我们选择第五种消息包,显示一条路径。

这里如果你直接去查看这些消息格式是比较麻烦的,因为他们通常会递归很久才会找到终止条件,即基例,我们可以使用 rosmsg show nav_msgs/Path.msg 来查看这个消息格式。

通过观察缩进可以看到消息的子父类关系。

三、使用nav_msgs::Path.h操作一把

a、编写程序

/*
本文件由jk编辑,本文件主要目的是通过一个小例程了解nav_msgs的使用*///C++库相关
#include <iostream>
#include <cmath>//ROS库相关
#include <ros/ros.h>
#include <nav_msgs/Path.h>using namespace std;int main(int argc , char ** argv)
{//初始化rosros::init(argc , argv , "nav_path_pub");ros::NodeHandle node;//创建一个路径的发布者ros::Publisher Path_pub_car0 = node.advertise<nav_msgs::Path>("/path_car0" , 10);//创建路径的消息存储数据nav_msgs::Path nav_path_msgs_car0;//设置发布频率ros::Rate loop_rate(10);//从传感器获取的位置信息 x , y , z 这里我们不关心z轴信息,则忽视它double path_x = 0;double path_y = 0.2;//从传感器获取的角度double roll = 0.0;double pitch = 0.0;double yaw = 0.0;cout << "i will go while" << endl;while(ros::ok()){//退出循环条件if(path_x > 10){cout << "i will break" << endl;break;}//获取路径 , 这里大概率是从您的传感器获得的数据path_x = path_x + 0.1;path_y = path_y * (-1);cout << "path_x = " << path_x << endl;cout << "path_y = " << path_y << endl;//获取角度 , 这里大概率是从您的传感器获得的数据double Quaternion_w = cos(0.5*roll)*cos(0.5*pitch)*cos(0.5*yaw) + sin(0.5*roll)*sin(0.5*pitch)*sin(0.5*yaw);double Quaternion_x = sin(0.5*roll)*cos(0.5*pitch)*cos(0.5*yaw) - cos(0.5*roll)*sin(0.5*pitch)*sin(0.5*yaw);double Quaternion_y = cos(0.5*roll)*sin(0.5*pitch)*cos(0.5*yaw) + sin(0.5*roll)*cos(0.5*pitch)*sin(0.5*yaw);double Quaternion_z = cos(0.5*roll)*cos(0.5*pitch)*sin(0.5*yaw) - sin(0.5*roll)*sin(0.5*pitch)*cos(0.5*yaw);//这里创建一个临时的变量存储位置和姿态信息geometry_msgs::PoseStamped this_pose_stamped;//创建一个存储时间的临时变量,用于给header.stamp赋值 获得当前的时间ros::Time current_time = ros::Time::now();//下面是存储要发布的数据	注意这里的frame_id 可能会需要修改 nav_path_msgs_car0.header.stamp = current_time;nav_path_msgs_car0.header.frame_id = "map";this_pose_stamped.header.stamp = current_time;this_pose_stamped.header.frame_id = "map";this_pose_stamped.pose.position.x = path_x;this_pose_stamped.pose.position.y = path_y;this_pose_stamped.pose.position.z = 0.0;this_pose_stamped.pose.orientation.w = Quaternion_w;this_pose_stamped.pose.orientation.x = Quaternion_x;this_pose_stamped.pose.orientation.y = Quaternion_y;this_pose_stamped.pose.orientation.z = Quaternion_z;nav_path_msgs_car0.poses.push_back(this_pose_stamped);//将上面的数据发布出去Path_pub_car0.publish(nav_path_msgs_car0);//设置发布频率loop_rate.sleep();}return 0;
}

b、修改CMakeList.txt 和 package.xml文件

        这里就不多展示了,之前的文章都有过详细说明。

c、使用rviz展示效果

        这里需要添加Path,选择合适的话题和坐标系就可以显示路径了。

相关文章:

《Ubuntu20.04环境下的ROS进阶学习7》

一、使用nav_msgs消息包显示小车轨迹 在我们跑实验的时候通常希望看到小车的轨迹&#xff0c;在ROS1中可以将小车的路径存储在nav_msgs::Path 这种消息类型里&#xff0c;发布出来后使用rviz来显示小车轨迹。 二、了解nav_msgs消息包 那么首先我们要来了解一下nav_msgs这个消息…...

免费视频无损压缩工具+预览视频生成工具

视频无损压缩工具 功能与作用 &#xff1a;视频无损压缩工具是一种能够减少视频文件大小&#xff0c;但同时保持视频质量的工具。它通过先进的编码技术和算法&#xff0c;有效降低视频文件的存储空间&#xff0c;同时保证视频的清晰度和观感。这对于需要分享或存储大量视频内容…...

OIDC9-OIDC集成登录功能(SpringBoot3.0)

1.项目依赖 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <…...

使用Vue.extend( ) 模仿 elementui 创建一个类似 message 消息提示框

提示&#xff1a;记录工作中遇到的需求及解决办法 文章目录 前言一、目录结构二、代码1. 创建 m-Toast.vue 文件2. 创建 global.js 文件3. 在 main.js 文件中导入 global.js 文件4. 在 App.vue 文件中使用 全局方法创建的 组件 前言 在此之前一直不明白Vue.extend( )干什么用的…...

ansible部署二进制mysql 8

1、配置文件 ll /ansible -rw-r--r-- 1 root root 836 Sep 22 12:09 my.cnf -rw-r--r-- 1 root root 810 Sep 22 07:21 mysql.service -rw-r--r-- 1 root root 2731 Sep 22 12:32 mysql.yam2、my.cnf内容 rootbole:/ansible# cat my.cnf [mysql] #设置m…...

【2023工业3D异常检测文献】基于混合融合的多模态工业异常检测方法Multi-3D-Memory (M3DM)

Multimodal Industrial Anomaly Detection via Hybrid Fusion 1、Background 随着3D传感器的发展&#xff0c;最近发布了具有2D图像和3D点云数据的MVTec-3D AD数据集&#xff0c;促进了多模态工业异常检测的研究。 无监督异常检测的核心思想是找出正常表示与异常之间的差异。…...

基于微信小程序的宿舍报修系统的设计与实现(lw+演示+源码+运行)

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对成果信息管理混乱&#xff0c;出错率高&#xff0c;信息安全性差&am…...

前端练习总结(1)

前端实习练习题 前端实习笔试题0920 visibility:hidden display:none把鼠标移到按钮并点击时 hover active focus的顺序代码输出结果1代码输出结果2CSS中哪些属性可以继承cookie sessionStorage localstorage区别面向对象基本特征有哪些,请具体说明下列关于v-model的说法,哪项…...

计算机网络自顶向下(1)---网络基础

目录 1.网络的分类 2.网络协议 3.网络分层结构 1.OSI七层模型 2.TCP/IP四层模型 3.网络与OS的关系 4.网络传输基本流程 1.协议报头 5.网络中的地址管理 1.IP地址 2.端口号 6.传输层协议 1.TCP协议 2.UDP协议 3.网络字节序 7.socket 1.网络的分类 局域网&…...

Pandas -----------------------基础知识(五)

索引和列操作函数缺失值 索引和列操作 # 1 加载数据 # 1.1 从链家租房数据集中获取天通苑租房区域的所有数据存储在df2中 # 1.2 从df2中获取价格列存储在df2_price对象 import pandas as pd df pd.read_csv(/root/pandas_code_ling/data/b_LJdata.csv) df2 df[df[区域] 天通苑…...

RabbitMQ 高级特性——重试机制

文章目录 前言重试机制配置文件设置生命交换机、队列和绑定关系生产者发送消息消费消息 前言 前面我们学习了 RabbitMQ 保证消息传递可靠性的机制——消息确认、持久化和发送发确认&#xff0c;那么对于消息确认和发送方确认&#xff0c;如果接收方没有收到消息&#xff0c;那…...

每天一道面试题(20):锁的发生原因和避免措施

死锁的发生原因和避免措施 一、概述 在多线程编程中&#xff0c;死锁是一个常见的问题。理解死锁的成因和避免策略是提升程序稳定性和性能的重要能力。 二、普通人 vs 高手的回答 普通人回答&#xff1a; “临场发挥…” 高手回答&#xff1a; “死锁是指两个或多个线程在执…...

2024淘宝双11活动,收下这份必买好物推荐清单

双11如何真正值得购买的好物呢&#xff1f;为了帮助大家把握住这次难得的购物良机&#xff0c;我们特别推出了这份“2024淘宝双11必买好物推荐清单”。这份清单涵盖数码电子、家居生活、个护健康等多个领域的优质产品。无论你是科技爱好者&#xff0c;还是注重生活品质的消费者…...

vue-cli,element-plus,axios,proxy

一、vue-cli vue-cli俗称vue脚手架&#xff0c;是vue官方提供的快速生成vue 工程化项目的工具。 1.官网&#xff1a;https://cn.vuejs.org/ 中文官网: https://cli.vuejs.org/zh/ 特点&#xff1a;基于webpack&#xff0c;功能丰富且易于扩展&#xff0c;支持创建vue2和vu…...

《Zeotero的学习》

学习视频链接 Zeotera的安装 官网点击download&#xff0c;选择合适的版本进行下载&#xff0c;并安装插件。 下载完成之后&#xff0c;点击安装包&#xff0c;一路默认就可以。如果不想下载在C盘&#xff0c;可以在步骤中选择自定义路径。 Zeotero的注册 官网进行注册&am…...

大数据复习知识点1

1、HDFS和MapReduce的起源&#xff1a;HDFS起源于Google的GFS论文&#xff0c;它是为了解决大规模数据集的存储问题而设计的。而MapReduce则是Google为了解决大规模数据处理问题而提出的一种并行计算模型。 2、YARN的作用&#xff1a;YARN是Hadoop的资源管理器&#xff0c;它负…...

9.26 Buu俩题解

[CISCN2019 华东北赛区]Web2 看wp写完之后写的 知识点 存储型XSS与过滤绕过sql注入 题解 好几个页面&#xff0c;存在登录框可以注册&#xff0c;存在管理员页面(admin.php) ->既然存在管理员页面&#xff0c;且直接访问admin.php提示我们 说明存在身份验证&#xff0…...

Mitsuba 渲染基础

Mitsuba 渲染基础 0. Abstract1. 安装 Mitsuba21.1 下载 Mitsuba2 源码1.2 选择后端 (variants)1.3 编译 2. [Mitsuba2PointCloudRenderer](https://github.com/tolgabirdal/Mitsuba2PointCloudRenderer)2.1 Mitsuba2 渲染 XML2.2 Scene 场景的 XML 文件格式2.2.1 chair.npy to…...

深入理解 WebSocket:实时通信的利器

深入理解 WebSocket&#xff1a;实时通信的利器 1. 什么是 WebSocket&#xff1f; WebSocket 是一种网络通信协议&#xff0c;它允许服务器和客户端之间建立持久的双向通信通道&#xff0c;适用于高频率、低延迟的数据交换场景。在传统的 HTTP 通信中&#xff0c;每次请求都需…...

OpenEuler配置本地yum源

0x00 服务器版本 将本地镜像传输至服务器 操作步骤如下 # 创建一个目录用于挂载光盘映像 mkdir /media/cdrom/# 将光盘映像挂载到指定目录 mount /kvm/openeuler.iso /media/cdrom/#进入Yum仓库配置目录 cd /etc/yum.repos.d/# 备份原有的 openEuler.repo 文件 mv openEuler.…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

MySQL 部分重点知识篇

一、数据库对象 1. 主键 定义 &#xff1a;主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 &#xff1a;确保数据的完整性&#xff0c;便于数据的查询和管理。 示例 &#xff1a;在学生信息表中&#xff0c;学号可以作为主键&#xff…...

Bean 作用域有哪些?如何答出技术深度?

导语&#xff1a; Spring 面试绕不开 Bean 的作用域问题&#xff0c;这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开&#xff0c;结合典型面试题及实战场景&#xff0c;帮你厘清重点&#xff0c;打破模板式回答&#xff0c…...

【Linux】自动化构建-Make/Makefile

前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具&#xff1a;make/makfile 1.背景 在一个工程中源文件不计其数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;mak…...

uniapp 小程序 学习(一)

利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 &#xff1a;开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置&#xff0c;将微信开发者工具放入到Hbuilder中&#xff0c; 打开后出现 如下 bug 解…...