订阅底盘odom数据,转换为path数据;

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <ros/ros.h>
#include <ros/console.h>
#include <nav_msgs/Path.h>
#include <std_msgs/String.h>#include <nav_msgs/Odometry.h>#include <geometry_msgs/Quaternion.h>
#include <geometry_msgs/PoseStamped.h>
#include <tf/transform_broadcaster.h>
#include <tf/tf.h>nav_msgs::Path  path;ros::Publisher  path_pub;
ros::Subscriber odomSub;
ros::Subscriber odom_raw_Sub;void odomCallback(const nav_msgs::Odometry::ConstPtr& odom){geometry_msgs::PoseStamped this_pose_stamped;this_pose_stamped.pose.position.x = odom->pose.pose.position.x;this_pose_stamped.pose.position.y = odom->pose.pose.position.y;this_pose_stamped.pose.orientation = odom->pose.pose.orientation;this_pose_stamped.header.stamp = ros::Time::now();this_pose_stamped.header.frame_id = "odom";path.poses.push_back(this_pose_stamped);path.header.stamp = ros::Time::now();path.header.frame_id="odom";path_pub.publish(path);printf("path_pub ");printf("odom %.3lf %.3lf\n",odom->pose.pose.position.x,odom->pose.pose.position.y);}int main (int argc, char **argv)
{ros::init (argc, argv, "showpath");ros::NodeHandle ph;path_pub = ph.advertise<nav_msgs::Path>("trajectory",10, true);odomSub  = ph.subscribe<nav_msgs::Odometry>("/odom", 10, odomCallback);odom_raw_Sub  = ph.subscribe<nav_msgs::Odometry>("/odom_raw", 10, odomCallback);ros::Rate loop_rate(50);while (ros::ok()){ros::spinOnce();               // check for incoming messagesloop_rate.sleep();}return 0;
}int trajectory_test (void )
{ros::NodeHandle ph;ros::Publisher path_pub = ph.advertise<nav_msgs::Path>("trajectory_test",1, true);ros::Time current_time, last_time;current_time = ros::Time::now();last_time = ros::Time::now();nav_msgs::Path path;//nav_msgs::Path path;// path.header.stamp=current_time;// path.header.frame_id="odom";double x = 0.0;double y = 0.0;double th = 0.0;double vx = 0.1;double vy = -0.1;double vth = 0.1;ros::Rate loop_rate(1);while (ros::ok()){current_time = ros::Time::now();//compute odometry in a typical way given the velocities of the robotdouble dt = (current_time - last_time).toSec();double delta_x = (vx * cos(th) - vy * sin(th)) * dt;double delta_y = (vx * sin(th) + vy * cos(th)) * dt;double delta_th = vth * dt;x += delta_x;y += delta_y;th += delta_th;geometry_msgs::PoseStamped this_pose_stamped;this_pose_stamped.pose.position.x = x;this_pose_stamped.pose.position.y = y;geometry_msgs::Quaternion goal_quat = tf::createQuaternionMsgFromYaw(th);this_pose_stamped.pose.orientation.x = goal_quat.x;this_pose_stamped.pose.orientation.y = goal_quat.y;this_pose_stamped.pose.orientation.z = goal_quat.z;this_pose_stamped.pose.orientation.w = goal_quat.w;this_pose_stamped.header.stamp=current_time;this_pose_stamped.header.frame_id="odom";path.poses.push_back(this_pose_stamped);path.header.stamp=current_time;path.header.frame_id="odom";path_pub.publish(path);ros::spinOnce();               // check for incoming messageslast_time = current_time;loop_rate.sleep();}return 0;
}

【ROS】将odom里程计数据转换为path路径消息相关推荐

  1. 底盘编码数据解算ROS的odom数据

    参考:读取编码器的计数脉冲转化成ROS的odom数据 对这些式子没理解,如何由底盘速度数据发布odom数据. dx = cos(dth) * dxy_avedy = -sin(dth) * dxy_a ...

  2. ros之odom发布

    ros之odom的发布 odom就是所谓的里程计,是根据你所获得的线速度,角速度,积分获得机器人实际走的距离,里程计存在累计误差,用于后面多传感器输入,为建图,导航提供参数. odom最重要的是积分和 ...

  3. odom 里程计轨迹的代码

    在 C++ 中预测 odom 里程计轨迹的代码可能需要使用一些库来帮助处理数据和进行计算.以下是一个示例,它使用 Eigen 库来表示和操作矩阵和向量,以及使用 ROS (Robot Operatin ...

  4. Java把科学计数法转换为字符串

    为什么80%的码农都做不了架构师?>>>    /*** 把科学计数法转换为字符串* 1.64607507E8(转化为164607507).1.6.0.0.0* @param str ...

  5. 卡尔曼滤波器 预测 odom 里程计轨迹的代码

    卡尔曼滤波器  预测 odom 里程计轨迹的代码 首先,你需要包含必要的头文件,包括 Eigen 库,这是一个线性代数库,你可以使用它来表示矩阵和向量,以及 cmath 库,它包含数学函数. #inc ...

  6. ASP.NET根路径的获取和将Web站点下的绝对路径转换为虚拟路径的两种方案

    ASP.NET 根路径的获取         private string _ApplicationPath;           /// <summary>           /// ...

  7. ASP.net 1.1 中相对路径转换为绝对路径

    It's just a code snippet of mine. /// <summary> /// 将相对路径转换为绝对路径 /// 注:最终得到任何场合都可以正常链接的路径(不论将应 ...

  8. Python将绝对路径转换为相对路径方法实例

    本篇文章主要讲解,python绝对路径转换为相对路径的方法 作者:任聪聪 通过python转换为相对路径,实际上是有多种方法的,一般可以通过正则替换盘符,replace进行替换等等. 本次主要讲解利用 ...

  9. sudo找不到命令:修改sudo的PATH路径

    sudo有时候会出现找不到命令,而明明PATH路径下包含该命令,让人疑惑.其实出现这种情况的原因,主要是因为当 sudo以管理权限执行命令的时候,linux将PATH环境变量进行了重置,当然这主要是因 ...

最新文章

  1. rtsp发送主流和辅流
  2. 高效的scrum敏捷研发工具--Leangoo
  3. 自动化运维工具之puppet简单实用
  4. oracle 一张表插入另外一张表 存储过程
  5. Inndb和Memory
  6. java 枚举内嵌枚举_Java枚举益智游戏
  7. 本地连不上远程服务器mysql_mysql本地连不上远程
  8. 组件:参数验证、组件:事件传递
  9. java calendar类_Java世界最常用的工具类库
  10. Redis教程:事件、客户端和服务器
  11. 深度学习自学(九):Alexnet解读
  12. vivado ip xdc 和user xdc 编译顺序
  13. 向右键添加新建脚本菜单
  14. string类用法Java_Java中String类的用法
  15. 利用adobe x pro批量合并pdf
  16. matlab 音频fftshift,matlab使用杂谈5-fftshift函数的使用
  17. 华为员工:表面光鲜 工作十年买不起房
  18. centos桌面显示计算机图标,Centos 桌面图标
  19. 计算思维是运用计算机科学的什么进行,什么是计算思维?
  20. 第七天 位置参数 变量运算if case || find locate compress

热门文章

  1. windows同时代服务器系统,从Win95到Win10:那些年让你痴迷的系统特性大盘点
  2. 我的Qt作品(7)使用Qt+OpenCV实现图像轮廓提取,再用三阶贝塞尔曲线拟合成光滑线条/多边形拟合
  3. 服务器和应用服务器迁移方案,服务器和应用统迁移方案.doc
  4. 某高速小程序获取sign
  5. itext html转换pdf,使用iText-2.0.8将Html转换为pdf,带图片功能
  6. EXCELVBA: 中国热力图 HeatMap of China
  7. python爬取pubmed的文献_爬虫获取pubmed中文献的标题和摘要
  8. 前端开发和html5,Web前端和HTML5前端相同吗 有区别吗
  9. win10给鼠标右键添加快捷功能
  10. mac 备份文件 太大 时间机器_如何在Mac OS X中设置时间机器备份 | MOS86