ROS--geometry_msgs/PoseStanped消息解读

2023-05-16

http://wiki.ros.org/geometry_msgs
可以看到不同类型的消息,点击PoseStamped进入PoseStamped message 页面

在这里插入图片描述
1、通过包含头文件可以调用该类型的消息

#include "geometry_msgs/PoseStamped.h"

2、通过定义msg对象调用数据类型为std_msgs/Header,geometry_msgs/Pose的两个成员header, pose

geometry_msgs::PoseStamped msg
msg.header  ,   msg.pose

点击浅蓝色字体链接进入std_msgs/Header页面
在这里插入图片描述
通过Compact Message Definition可以知道,我们通过std_msgs::Header msg_header创建了msg_header类型的对象,就可以通过msg_header.seq调用类型为unit32的成员seq进行赋值或者赋值给其他变量。

int n;
msgs_header.seq = 1; 
//or
n = msg_header.seq;

同理可以给msg_header.frame_id赋值string类型的变量
msg_header.stamp.sec得到从epoch开始的秒为单位的时间,msg_header.stamp.nsec得到从stamp_sec开始的纳秒时间
msgs_heder.stamp调用stamp,stamp.sec调用sec得到epoch的时间,那么msgs_header.stamp.sec就可以获取当前的时间,秒为单位
nsec的单位是纳秒,我们要乘以1e-9才能转换为秒,第二行得到的是时间以秒为单位.第四行得到的时间是以ns为单位.

double store_time;
store_time = msg_header.stamp.sec + 1e-9*msg_header.stamp.nsec; //unit s
//or
store_time = msgs_header.stamp.sec * 1e9 + msg_header.stamp.nsec; //unit ns

例 记录时间

geometry_msgs::PoseStamped msg
msg.header.stamp = ros::Time::now()

double store_time;
store_time = msg.header.stamp.sec + 1e-9*msg.header.stamp.nsec; //unit s 
//or
store_time =  msg.header.stamp.sec * 1e9 +  msg.header.stamp.nsec; //unit ns

msg包含数据成员header,而header作为std_msgs/Header的数据成员包含stamp,那么我们可以通过msg.header.stamp调用数据类型为time的成员stamp。ROS可以很方便获取当前时间ros::Time::now(),返回的是time类型的变量.所以可以把当前时间存储在这个message中。

点击浅蓝色字体链接geometry_msgs/Pose
在这里插入图片描述
Pose的数据成员是位置和方向position和orientation,geometry_msgs/Point类型的position,含三个float64的变量x,y,z
在这里插入图片描述
geometry_msgs/Quaternion类型的’oreintation’,包含四个float64的变量x,y,z,w
在这里插入图片描述
和msg.header.stamp.sec调用int32类型的成员sec一样,可以用msg.pose.position.x调用或者赋值float64的成员x

创建一个名字叫pub_poseStamped.cpp的文件
#include "ros/ros.h"
#include "geometry_msgs/PoseStamped.h"  
#include <cmath>//for sqrt() function
 
int main(int argc, char **argv)
{
    ros::init(argc, argv, "talker");
 
    ros::NodeHandle n;
 
    ros::Publisher chatter_pub = n.advertise<geometry_msgs::PoseStamped>("chatter", 10); //initialize chatter
 
    ros::Rate loop_rate(10);
 
    //generate pose by ourselves.
    double positionX, positionY, positionZ;
    double orientationX, orientationY, orientationZ, orientationW;
 
    //We just make the robot has fixed orientation. Normally quaternion needs to be normalized, which means x^2 + y^2 + z^2 +w^2 = 1
    double fixedOrientation = 0.1;
    orientationX = fixedOrientation ;
    orientationY = fixedOrientation ;
    orientationZ = fixedOrientation ;
    orientationW = sqrt(1.0 - 3.0*fixedOrientation*fixedOrientation); 
 
    double count = 0.0;
    while (ros::ok())
    {
        //We just make the position x,y,z all the same. The X,Y,Z increase linearly
        positionX = count;
        positionY = count;
        positionZ = count;
 
        geometry_msgs::PoseStamped msg; 
 
        //assign value to poseStamped
 
            //First assign value to "header".
        ros::Time currentTime = ros::Time::now();
        msg.header.stamp = currentTime;
 
            //Then assign value to "pose", which has member position and orientation
        msg.pose.position.x = positionX;
        msg.pose.position.y = positionY;
        msg.pose.position.z = positionY;
 
        msg.pose.orientation.x = orientationX;
        msg.pose.orientation.y = orientationY;
        msg.pose.orientation.z = orientationZ;
        msg.pose.orientation.w = orientationW;
 
        ROS_INFO("we publish the robot's position and orientaion"); 
        ROS_INFO("the position(x,y,z) is %f , %f, %f", msg.pose.position.x, msg.pose.position.y, msg.pose.position.z);
        ROS_INFO("the orientation(x,y,z,w) is %f , %f, %f, %f", msg.pose.orientation.x, msg.pose.orientation.y, msg.pose.orientation.z, msg.pose.orientation.w);
        ROS_INFO("the time we get the pose is %f",  msg.header.stamp.sec + 1e-9*msg.header.stamp.nsec);
 
        std::cout<<"\n \n"<<std::endl; //add two more blank row so that we can see the message more clearly
 
        chatter_pub.publish(msg);
 
        ros::spinOnce();
 
        loop_rate.sleep();
 
        ++count;
    }
 
 
  return 0;
}

给pose的orientation赋值相同的数,机器人就没用旋转
给position赋值相同的递增值,机器人沿着坐标轴对角线匀速直线行驶

再创建一个sub_poseStamped.cpp
#include "ros/ros.h"
#include "geometry_msgs/PoseStamped.h" 
 
void chatterCallback(const geometry_msgs::PoseStamped::ConstPtr& msg) //Note it is geometry_msgs::PoseStamped, not std_msgs::PoseStamped
{
    ROS_INFO("I heard the pose from the robot"); 
    ROS_INFO("the position(x,y,z) is %f , %f, %f", msg->pose.position.x, msg->pose.position.y, msg->pose.position.z);
    ROS_INFO("the orientation(x,y,z,w) is %f , %f, %f, %f", msg->pose.orientation.x, msg->pose.orientation.y, msg->pose.orientation.z, msg->pose.orientation.w);
    ROS_INFO("the time we get the pose is %f",  msg->header.stamp.sec + 1e-9*msg->header.stamp.nsec);
 
    std::cout<<"\n \n"<<std::endl; //add two more blank row so that we can see the message more clearly
}
 
int main(int argc, char **argv)
{
    ros::init(argc, argv, "listener");
 
    ros::NodeHandle n;
 
    ros::Subscriber sub = n.subscribe("chatter", 10, chatterCallback);
 
    ros::spin();
 
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ROS--geometry_msgs/PoseStanped消息解读 的相关文章

  • 在jframe中创建java的正方形,矩形,三角形[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个 Java 问题 据我了解 无法在 Java 中绘制几何图形 代码和以下内容您可以帮助我吗 这是代码 public class
  • 无法在 Ubuntu 20.04 上安装 ROS Melodic

    我正在尝试使用这些命令在 Ubuntu 20 04 上安装 ROS Melodic sudo sh c echo deb http packages ros org ros ubuntu lsb release sc main gt etc
  • 这段用于确定圆和线段是否相交的代码正确吗?

    显然很难找到一条线是否存在的答案segment和圆相交 例如 如果你用谷歌搜索 你会发现这个问题 https stackoverflow com questions 1073336 circle line segment collision
  • 如何为浏览器生成CMY三角形? (CSS、SVG、画布?)

    我正在尝试为一个项目生成一个 CMY 三角形 我希望能够使用 css svg 或 canvas 直接在网络上渲染它 根据 Amelia 的评论 我尝试构建一个 CSS SASS 类来用线性渐变渲染三角形 triangle include b
  • 基于正方形瓷砖直角三角形象限的坐标系中的边界框

    我正在为游戏创建一个基于图块的 2D 地形系统 然而 我还使用游戏中的坐标 需要能够将边界框映射到 图块坐标 中 并点击边界框接触的每个图块 不用担心 有一个 kd 树和所有工作 美好的 使用定点 真实世界 坐标 我可以将每个图块计为 2
  • 用渐变色绘制一个 D3 圆

    如何用渐变颜色画一个圆 比如说 从黄色到蓝色的渐变 通常 要创建黄色圆圈 我们可以使用以下代码 var cdata 50 40 var xscale 40 var xspace 50 var yscale 70 var svg d3 sel
  • ROS中spin和rate.sleep的区别

    我是 ROS 新手 正在尝试了解这个强大的工具 我很困惑spin and rate sleep功能 谁能帮助我了解这两个功能之间的区别以及何时使用每个功能 ros spin and ros spinOnce 负责处理通信事件 例如到达的消息
  • 边界椭圆约束于水平/垂直轴

    背景 我正在尝试将地形图裁剪成围绕多个风力涡轮机的最小尺寸椭圆 以最小化地图的尺寸 执行此地图裁剪的程序可以裁剪椭圆 但仅限轴沿 x 轴和 y 轴对齐的椭圆 我知道边界椭圆问题的算法 https stackoverflow com ques
  • 投影 3D 网格的 2D 轮廓算法

    给定 一个 3D 网格 由一组顶点和三角形定义 并用这些点构建网格 问题 找到任意平面上投影的任意旋转网格的二维轮廓 投影很容易 挑战在于找到平面中投影三角形边的 外壳 我需要一些有关研究该算法的输入 指针的帮助 为简单起见 我们可以假设
  • 我怎样才能找到圆的所有点? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 给定半径和圆心坐标 如何找到圆的所有
  • 使用 boost 几何检查两条线是否有交点

    是否可以使用 boost geometry 检查两条线段 每条线段由二维中的两个点给出 是否彼此相交 如果可能的话 boost geometry 是否还允许检查特殊情况 例如另一条线上只有一个点 数字上 或者两条线相等 如果你具体谈论Boo
  • 合并空间上接近的路径/线段的算法

    我正在寻找一种用于街道地图制图概括的几何算法 名称 在我的地图数据中 我有许多路径 点的有序列表 由线段连接 这些路径彼此靠近且几乎平行 我如何 1 识别这些 相邻路径 即如何找到比某个阈值更接近的路径 以及 2 将它们合并成一条路径 即如
  • 优雅的折线“左移”测试

    Given X Y 坐标 即车辆的位置 X Y 数组 它们是折线中的顶点 请注意 折线仅由直线段组成 没有圆弧 我想要的是 计算车辆是在折线的左侧还是右侧 当然还是在顶部 我的做法 迭代所有线段 并计算到每个线段的距离 然后 对于最近的段
  • 通过非 sf 列内连接两个 sf 对象

    我尝试使用内连接或左连接连接两个 sf 数据帧 这些数据框内部都有几何列 我不断收到错误 check join x y 中的错误 y 应该是一个数据框 对于空间连接 请使用 st joinFALSE 下面的可重现示例 df1 lt data
  • 以一定角度遍历二维数组

    通常我们按行或列遍历数组 但这里我想以角度遍历它 我会尝试解释我的意思 因此 假设角度是 45 度 那么它会搜索为 0 0 then 0 1 1 0 then 0 2 1 1 2 0 等等 抱歉 无法上传图像 因为我是新用户 不允许这样做
  • 按度数在圆上找到一个点?

    假设我们有一个 100x100 坐标系 如下所示 0 0 是它的左上角 50 50 是它的中心点 100 100 是它的右下角 等等 现在我们需要从中心向外画一条线 我们知道线的角度 但需要计算其终点的坐标 您认为最好的方法是什么 例如 如
  • 找出圆周上像素坐标的算法

    如果我知道圆心 圆半径和垂直角的像素坐标 如何找出圆圆周上一定角度的像素值 基本上 我试图在不同的时间绘制时钟的指针 1点 2点等 Let h是浮点数形式的小时 h 2 25将是 02 15 等 在 0 到 12 之间 cX cY 是中心的
  • 黑色左/右三角形大小不同

    我使用黑色左指三角形 右左指三角形几何形状作为网站上的链接 并使用它们的 HTML 代码 和 9664 9654 由于某种原因 即使我在没有其他元素的空白页面上使用三角形 它们也不会以相同的大小显示 在 Chrome 上 向左指向的位置比向
  • 谷歌地图颤动检查点是否在多边形内

    我正在使用 google maps flutter 插件开发 flutter 项目 我想检查用户位置是否位于我在地图上创建的多边形内 有一个简单的方法使用 JavaScript api con tainsLocation 方法 但对于 fl
  • WPF - 路径几何...有没有办法绑定数据属性?

    我有一个ControlTemplate作为 气泡 弹出窗口AdornerLayer给定的控制 它工作正常 但我需要能够计算它应该显示的位置 中间 底部 代替

随机推荐

  • 我与AI的相识

    AI人工智能 xff0c 作为一名程序员竟然不懂AI xff0c 好吧 xff01 我就是不懂 xff0c 最开始是听老师在帮助我们分析自己所学的专业行情时 xff0c 老师提到了AI xff0c 这时我是懵逼的状态什么是AI xff0c
  • <PHP 输出九九乘法表 for循环 递归>《正三角》《倒三角》

    lt php header 34 content type text html charset 61 utf 8 34 九九乘法表 正三角 64 var integer for i 61 1 i lt 61 9 i 43 43 for j
  • TP5+七牛云文件上传

    利用七牛云作为图片服务器来使用 xff0c 为什么使用七牛云 xff0c 使用七牛云的好处有很多 xff0c 节省自己的服务器空间 xff0c 七牛云的使用方便 xff0c 便宜 好了下面就说下TP5使用七牛云进行文件上传 第一步 xff0
  • 七牛云图片的预览

    上一个博客写了如何将本地图片上传到七牛云 xff0c 那么问题来了 xff0c 上传完毕后 xff0c 我们怎么才能在本地进行展示查看呢 xff1f 按照我们以前的思路那就是 xff0c 七牛云的域名 43 图片的名字 xff0c 但是呢
  • 时间序列预测比赛小结

    一 时间序列基础 1 什么是时间序列 xff1f 表面上 xff0c 时间序列就是按照时间的先后顺序排列的一串数值数学意义上 xff0c 时间序列是一串随机变量 2 研究时间序列的目的 xff1f 点预测区间预测 3 什么样子的时间序列可预
  • Ubuntu下使用ECM上网介绍

    1 背景 为了验证展锐原厂的USB CDC EMC xff08 Ethernet Control Model xff09 驱动的上网功能 xff0c 需要搭建Linux系统 现将整个流程整理如下 2 环境搭建 安装虚拟机 VMware wo
  • 如何将本地代码上传到远程库main分支中

    1 本地代码上传到github 1 1 首先修改默认分支 在2020年10月1起 xff0c github默认主分支从master更名为main xff0c 以上提交方式会默认创建一个master分支 xff0c 为保持一致性 xff0c
  • 如何在putty终端上打开图形化管理工具

    有时候需要在putty这样的图形终端中打开图形化的管理工具会出现下面的错误 xff1a root 64 node2 Traceback most recent call last File 34 usr share virt manager
  • IMU/光电鼠标/轮式编码器的多传感器融合(非线性卡尔曼滤波)

    各传感器分析 imu 对于平面移动机器人 xff08 如扫地机器人 xff09 xff0c IMU只需要一般只需要使用陀螺仪的偏航角 xff08 YAW xff09 xff0c 陀螺仪的偏航角有时间漂移的误差存在 xff0c 一般分为系统漂
  • IMU/电子罗盘/轮式编码器的多传感器融合(非线性卡尔曼滤波)

    传感器分析 电子罗盘 xff08 Compass magnetometer xff09 对于平面运动机器人而言 xff0c 只需要xy平面上的数据即可求出来绝对角度 xff0c 这里电子罗盘需要做椭圆 gt 圆的传感器标定 电子罗盘上车的标
  • kalibr使用笔记

    官网 GitHub ethz asl kalibr The Kalibr visual inertial calibration toolbox The Kalibr visual inertial calibration toolbox
  • Python上传文件到百度网盘(一)

    前言 最近由于突发奇想要下载某网站电影 xff0c 当然资源也是爬来的 xff0c 然后是一堆M3u8格式的URL xff0c 为了保证防止资源后续失效的情况 xff0c 打算先下载下来 xff0c 然后加密压缩 xff08 xff5e x
  • Python上传文件到百度网盘(二)之文件切割

    前言 继续上文提到的使用Python上传文件到百度网盘的伟大事业 接口分析 上文我们完成了百度网盘上传的api的封装 xff0c 通过分析api我得出 xff0c 需要完成上传4m以上的文件的话 xff0c 是需要分片上传滴 xff0c 具
  • This指向及改变,DOM节点操作、获取,删除,各种节点

    这里写目录标题 DOM节点自定义获取元素节点方法操作元素节点的属性这是dataset的进一步理解 操作元素的类名操作元素节点中的内容函数的执行顺序this 重要 this全局变量中指向windowthis在对象的方法中指向调用者this在事
  • 使用策略模式优化IF ELSE

    使用传统的if else扩展性不强 xff0c 代码量越多阅读起来越困难 如果后期又要扩展条件语句维护起来就会变得非常的麻烦 传统的If else 不容易扩展 代码量大的情况下代码阅读性不高 64 param args public sta
  • 业务常见面试题 (数据分析)

    1 某APP近期上线了一个拉新活动 xff0c 并在各个渠道进行了推广投放 xff0c 活动结束后 xff0c 作为数据分析师 xff0c 你如何评估这场活动的效果 xff1f 活动关键核心指标达成情况 xff0c 比如拉新多少用户 xff
  • Matlab提速方法-转

    用过Matlab的人都知道 xff0c Matlab是一种解释性语言 xff0c 存在计算速度慢的问题 xff0c 为了提高程序的运行效率 xff0c matlab提供了多种实用工具及编码技巧 循环矢量化 Matlab是为矢量和矩阵操作而设
  • 自用笔记-机载计算机与PX4系列的配合

    机载计算机与Pixhawk系列的配合 Pixhawk与配套计算机 span class token punctuation span Raspberry Pi xff0c Odroid xff0c Tegra K1 span class t
  • QGC-TX2-PX4

    span class token number 1 span 安装mavros sudo apt install ros span class token operator span melodic span class token ope
  • ROS--geometry_msgs/PoseStanped消息解读

    http wiki ros org geometry msgs 可以看到不同类型的消息 xff0c 点击PoseStamped进入PoseStamped message 页面 1 通过包含头文件可以调用该类型的消息 span class t