ros(23):接收rviz中的2D Nav Goal、2D Pose Estimate消息

2023-10-29 11:50

本文主要是介绍ros(23):接收rviz中的2D Nav Goal、2D Pose Estimate消息,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 rviz 教程

1.1 2D Nav Goal

2D Nav Goal (Keyboard shortcut: g)

This tool lets you set a goal sent on the "goal" ROS topic. Click on a location on the ground plane and drag to select the orientation:

二维导航目标(快捷键:g)
此工具允许您设置在“goal”ROS主题上发送的目标。单击地平面上的某个位置并拖动以选择方向:

即设置二维导航目标,并使用“goal”这个话题进行通讯(结合rviz的其他教程,话题名也可能是“/move_base_simple/goal”)

其消息类型为:geometry_msgs/PoseStamped

meng@meng:~/ideas/ros_ws$ rosmsg info geometry_msgs/PoseStamped
std_msgs/Header headeruint32 seqtime stampstring frame_id
geometry_msgs/Pose posegeometry_msgs/Point positionfloat64 xfloat64 yfloat64 zgeometry_msgs/Quaternion orientationfloat64 xfloat64 yfloat64 zfloat64 w

1.2 2D Pose Estimate

2D Pose Estimate (Keyboard shortcut: p)

This tool lets you set an initial pose to seed the localization system (sent on the "initialpose" ROS topic). Click on a location on the ground plane and drag to select the orientation:

二维姿势估计(键盘快捷键:p)
此工具允许您设置初始姿势以播种定位系统(发送至“initialpose”ROS主题)。单击地平面上的某个位置并拖动以选择方向:

即设置二维初始位姿并使用“initialpose”进行通讯

其消息类型为:geometry_msgs/PoseWithCovarianceStamped

meng@meng:~/ideas/ros_ws$ rosmsg info geometry_msgs/PoseWithCovarianceStamped
std_msgs/Header headeruint32 seqtime stampstring frame_id
geometry_msgs/PoseWithCovariance posegeometry_msgs/Pose posegeometry_msgs/Point positionfloat64 xfloat64 yfloat64 zgeometry_msgs/Quaternion orientationfloat64 xfloat64 yfloat64 zfloat64 wfloat64[36] covariance

1.3 打开rviz查看

Panels--Tool Properties(勾选)

 

2 订阅话题

订阅起点位姿和终点话题并打印输出的c++文件:receive_2d_nav_goal.cpp

#include "ros/ros.h"
#include "std_msgs/String.h"
#include <geometry_msgs/PoseWithCovarianceStamped.h>
#include <iostream>
#include <geometry_msgs/PoseStamped.h>void chatterCallback(const geometry_msgs::PoseWithCovarianceStamped::ConstPtr& msg)
{double x=msg->pose.pose.position.x;double y=msg->pose.pose.position.y;std::cout<<x<<y<<std::endl;
}void chatterCallback1(const geometry_msgs::PoseStamped::ConstPtr& msg)
{std::cout<<"1111"<<std::endl;double x=msg->pose.position.x;double y=msg->pose.position.y;std::cout<<x<<y<<std::endl;
}
int main(int argc, char **argv)
{ros::init(argc, argv, "reveive_rviz");ros::NodeHandle nh;ros::Subscriber sub = nh.subscribe("/initialpose", 1, chatterCallback);//队列长度:1000或1或其他ros::Subscriber sub1 = nh.subscribe("/move_base_simple/goal", 1, chatterCallback1);//队列长度:1000或1或其他while(ros::ok())
{ros::spinOnce();
}return 0;
}

启动rviz和节点程序,用 2D Nav Goal、2D Pose Estimate 在rviz中做标记,即可打印输出:

订阅起点位姿和终点,并保持发布:

#include "ros/ros.h"
#include "std_msgs/String.h"
#include <geometry_msgs/PoseWithCovarianceStamped.h>
#include <iostream>
#include <geometry_msgs/PoseStamped.h>ros::Publisher initialpose_pub,goal_pub;
geometry_msgs::PoseWithCovarianceStamped initialpose_tmp;//设置为全局变量,可以一直被发布出来
geometry_msgs::PoseStamped goal_tmp;void initialpose_handler(const geometry_msgs::PoseWithCovarianceStamped::ConstPtr& msg)
{double x=msg->pose.pose.position.x;double y=msg->pose.pose.position.y;std::cout<<"起点坐标:("<<x<<", "<<y<<")"<<std::endl;initialpose_tmp=*msg;// initialpose_tmp.header=msg->header;// initialpose_tmp.header=msg->header; initialpose_pub.publish(initialpose_tmp);
}void goal_handler(const geometry_msgs::PoseStamped::ConstPtr& msg)
{double x=msg->pose.position.x;double y=msg->pose.position.y;std::cout<<"终点坐标:("<<x<<", "<<y<<")"<<std::endl;goal_tmp=*msg;goal_pub.publish(*msg);
}int main(int argc, char **argv)
{ros::init(argc, argv, "reveive_rviz");ros::NodeHandle nh;ros::Subscriber sub = nh.subscribe("/initialpose", 1, initialpose_handler);//1000改为1ros::Subscriber sub1 = nh.subscribe("/move_base_simple/goal", 1, goal_handler);//1000改为1initialpose_pub = nh.advertise<geometry_msgs::PoseWithCovarianceStamped>("initialpose_my", 1);goal_pub = nh.advertise<geometry_msgs::PoseStamped>("goal_my", 1);while(ros::ok()){ros::spinOnce();}return 0;
}

 

参考链接:

2D Nav Goal和2D Pose Estimate功能介绍:rviz/UserGuide - ROS Wiki

2D Nav Goal和2D Pose Estimate的消息类型:navigation/Tutorials/Using rviz with the Navigation Stack - ROS Wiki 

这篇关于ros(23):接收rviz中的2D Nav Goal、2D Pose Estimate消息的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/300452

相关文章

解决Maven项目报错:failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.13.0的问题

《解决Maven项目报错:failedtoexecutegoalorg.apache.maven.plugins:maven-compiler-plugin:3.13.0的问题》这篇文章主要介... 目录Maven项目报错:failed to execute goal org.apache.maven.pl

一文带你搞懂Redis Stream的6种消息处理模式

《一文带你搞懂RedisStream的6种消息处理模式》Redis5.0版本引入的Stream数据类型,为Redis生态带来了强大而灵活的消息队列功能,本文将为大家详细介绍RedisStream的6... 目录1. 简单消费模式(Simple Consumption)基本概念核心命令实现示例使用场景优缺点2

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置

Redis消息队列实现异步秒杀功能

《Redis消息队列实现异步秒杀功能》在高并发场景下,为了提高秒杀业务的性能,可将部分工作交给Redis处理,并通过异步方式执行,Redis提供了多种数据结构来实现消息队列,总结三种,本文详细介绍Re... 目录1 Redis消息队列1.1 List 结构1.2 Pub/Sub 模式1.3 Stream 结

在Android平台上实现消息推送功能

《在Android平台上实现消息推送功能》随着移动互联网应用的飞速发展,消息推送已成为移动应用中不可或缺的功能,在Android平台上,实现消息推送涉及到服务端的消息发送、客户端的消息接收、通知渠道(... 目录一、项目概述二、相关知识介绍2.1 消息推送的基本原理2.2 Firebase Cloud Me

SpringKafka消息发布之KafkaTemplate与事务支持功能

《SpringKafka消息发布之KafkaTemplate与事务支持功能》通过本文介绍的基本用法、序列化选项、事务支持、错误处理和性能优化技术,开发者可以构建高效可靠的Kafka消息发布系统,事务支... 目录引言一、KafkaTemplate基础二、消息序列化三、事务支持机制四、错误处理与重试五、性能优

SpringIntegration消息路由之Router的条件路由与过滤功能

《SpringIntegration消息路由之Router的条件路由与过滤功能》本文详细介绍了Router的基础概念、条件路由实现、基于消息头的路由、动态路由与路由表、消息过滤与选择性路由以及错误处理... 目录引言一、Router基础概念二、条件路由实现三、基于消息头的路由四、动态路由与路由表五、消息过滤

Python实现自动化接收与处理手机验证码

《Python实现自动化接收与处理手机验证码》在移动互联网时代,短信验证码已成为身份验证、账号注册等环节的重要安全手段,本文将介绍如何利用Python实现验证码的自动接收,识别与转发,需要的可以参考下... 目录引言一、准备工作1.1 硬件与软件需求1.2 环境配置二、核心功能实现2.1 短信监听与获取2.

如何使用C#串口通讯实现数据的发送和接收

《如何使用C#串口通讯实现数据的发送和接收》本文详细介绍了如何使用C#实现基于串口通讯的数据发送和接收,通过SerialPort类,我们可以轻松实现串口通讯,并结合事件机制实现数据的传递和处理,感兴趣... 目录1. 概述2. 关键技术点2.1 SerialPort类2.2 异步接收数据2.3 数据解析2.

SpringBoot接收JSON类型的参数方式

《SpringBoot接收JSON类型的参数方式》:本文主要介绍SpringBoot接收JSON类型的参数方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、jsON二、代码准备三、Apifox操作总结一、JSON在学习前端技术时,我们有讲到过JSON,而在