程序员

ROS Rviz 显示轨迹 Python

作者:admin 2021-04-06 我要评论

ROS Rviz 显示轨迹 Python 1. 缘由 2. Python实现 3. 效果 1. 缘由 3月一直在调试设备还要持续一段时间没空余时间 工作上也遇到很多非技术问题 同事的帮忙最近状...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)


1. 缘由

3月一直在调试设备,还要持续一段时间,没空余时间
工作上也遇到很多非技术问题
同事的帮忙,最近状态才调整过来,看淡了

最近也有人来私信来问 ROS Rviz 怎么显示轨迹
在网上的资料基本都是C++版本的
“你行,我也行”,这里就补一下Python版本


2. Python实现

#!/usr/bin/env python3


import rospy
from nav_msgs.msg import Path
from geometry_msgs.msg import PoseStamped, Quaternion
import tf
import math

# 起始运动状态
x, y, th = 0, 0, 0


def DataUpdating(path_pub, path_record):
    """
    数据更新函数
    """
    global x, y, th

    # 时间戳
    current_time = rospy.Time.now()

    # 发布tf
    br = tf.TransformBroadcaster()
    br.sendTransform((0.0, 0.0, 0.0), (0.0, 0.0, 0.0, 1.0),
                     rospy.Time.now(), "odom", "map")

    # 配置运动
    dt = 1 / 50
    vx = 0.25
    vy = 0.25
    vth = 0.2
    delta_x = (vx * math.cos(th) - vy * math.sin(th)) * dt
    delta_y = (vx * math.sin(th) + vy * math.cos(th)) * dt
    delta_th = vth * dt
    x += delta_x
    y += delta_y
    th += delta_th

    # 四元素转换
    quat = tf.transformations.quaternion_from_euler(0, 0, th)

    # 配置姿态
    pose = PoseStamped()
    pose.header.stamp = current_time
    pose.header.frame_id = 'odom'
    pose.pose.position.x = x
    pose.pose.position.y = y
    pose.pose.orientation.x = quat[0]
    pose.pose.orientation.y = quat[1]
    pose.pose.orientation.z = quat[2]
    pose.pose.orientation.w = quat[3]

    # 配置路径
    path_record.header.stamp = current_time
    path_record.header.frame_id = 'odom'
    path_record.poses.append(pose)

    # 路径数量限制
    if len(path_record.poses) > 1000:
        path_record.poses.pop(0)

    # 发布路径
    path_pub.publish(path_record)


def node():
    """
    节点启动函数
    """
    try:

        # 初始化节点path
        rospy.init_node('PathRecord')

        # 定义发布器 path_pub 发布 trajectory
        path_pub = rospy.Publisher('trajectory', Path, queue_size=50)

        # 初始化循环频率
        rate = rospy.Rate(50)

        # 定义路径记录
        path_record = Path()

        # 在程序没退出的情况下
        while not rospy.is_shutdown():
            # 数据更新函数
            DataUpdating(path_pub, path_record)

            # 休眠
            rate.sleep()

    except rospy.ROSInterruptException:
        pass


if __name__ == '__main__':
    node()


3. 效果

怎么启动上述文件就不再描述了
直接上图看效果
Rviz 显示轨迹

;原文链接:https://blog.csdn.net/qq_32618327/article/details/115408569

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • Vue SPA 首屏优化方案

    Vue SPA 首屏优化方案

  • vue 动态添加的路由页面刷新时失效的原

    vue 动态添加的路由页面刷新时失效的原

  • vue项目配置 webpack-obfuscator 进行

    vue项目配置 webpack-obfuscator 进行

  • JavaScript 中的执行上下文和执行栈实

    JavaScript 中的执行上下文和执行栈实

腾讯云代理商
海外云服务器