将odometry消息转换成path消息来实现rviz的直观可视化。(功能极简版)

功能简介

将nav_msgs::odometry类型数据转换到nav_msgs::path,从而方便在rviz上查看。

例如将t265的定位信息放到rviz上进行可视化观看(类似官方那个realsense-viewer的视觉效果)。

待会附上github链接,方便不能复制的小伙伴


代码全文

这应该是功能最简版代码了,一共没几行还有注释,你们直接复制过去直接用,避免重复造轮子吧,应该也不存在看不懂什么的了。

#include<stdio.h>
#include<ros/ros.h>
#include<nav_msgs/Path.h>
#include<nav_msgs/Odometry.h>

ros::Publisher path_pub;    //发布path的节点
ros::Subscriber odom_sub;   //接收odometry的节点

nav_msgs::Path path;        //发布的路径
bool init_flag=1;             //path初始化标记位

void odomCallback(const nav_msgs::Odometry::ConstPtr& odom){
    if(init_flag){
        path.header=odom->header;
        init_flag=0;
    }

    geometry_msgs::PoseStamped pose_stamped_this;
    pose_stamped_this.header=odom->header;
    pose_stamped_this.pose=odom->pose.pose;

    path.poses.push_back(pose_stamped_this);
    path_pub.publish(path);
}


int main (int argc, char **argv)
{
    ros::init (argc, argv, "odometry2path");
    ros::NodeHandle nh;
    
 //       记得在此处更改odometry消息topic名称     //
    odom_sub  = nh.subscribe<nav_msgs::Odometry>("/camera/odom/sample", 10, odomCallback);
    path_pub = nh.advertise<nav_msgs::Path>("/path",10, true);
 

    
    ros::spin();
    // ros::Rate loop_rate(50);
    // loop_rate.sleep();
    return 0;
}

rviz文件效果预览图

懒得每次都订阅topic和改坐标系了,就保存了rviz的配置。效果图如下,喜欢的可以拿去偷懒。
单走一个6

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在 Python 中使用 ROS 发布 Twist 和 Odometry 消息类型的步骤如下: 1. 导入必要的 ROS Python 库和消息类型: ```python import rospy from geometry_msgs.msg import Twist from nav_msgs.msg import Odometry ``` 2. 初始 ROS 节点: ```python rospy.init_node('my_node') ``` 3. 创建 Twist 和 Odometry 的 Publisher: ```python twist_pub = rospy.Publisher('cmd_vel', Twist, queue_size=10) odom_pub = rospy.Publisher('odom', Odometry, queue_size=10) ``` 4. 构造 Twist 和 Odometry 消息: ```python twist_msg = Twist() twist_msg.linear.x = 0.1 twist_msg.angular.z = 0.5 odom_msg = Odometry() odom_msg.pose.pose.position.x = 1.0 odom_msg.pose.pose.position.y = 2.0 odom_msg.pose.pose.position.z = 0.0 odom_msg.pose.pose.orientation.x = 0.0 odom_msg.pose.pose.orientation.y = 0.0 odom_msg.pose.pose.orientation.z = 0.0 odom_msg.pose.pose.orientation.w = 1.0 ``` 5. 发布消息: ```python twist_pub.publish(twist_msg) odom_pub.publish(odom_msg) ``` 完整的代码示例: ```python import rospy from geometry_msgs.msg import Twist from nav_msgs.msg import Odometry rospy.init_node('my_node') twist_pub = rospy.Publisher('cmd_vel', Twist, queue_size=10) odom_pub = rospy.Publisher('odom', Odometry, queue_size=10) twist_msg = Twist() twist_msg.linear.x = 0.1 twist_msg.angular.z = 0.5 odom_msg = Odometry() odom_msg.pose.pose.position.x = 1.0 odom_msg.pose.pose.position.y = 2.0 odom_msg.pose.pose.position.z = 0.0 odom_msg.pose.pose.orientation.x = 0.0 odom_msg.pose.pose.orientation.y = 0.0 odom_msg.pose.pose.orientation.z = 0.0 odom_msg.pose.pose.orientation.w = 1.0 twist_pub.publish(twist_msg) odom_pub.publish(odom_msg) rospy.spin() ``` 这里 `rospy.spin()` 是防止程序退出的语句,它会一直等待 ROS 节点的关闭信号。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值