ROS Rviz 显示地图 Python

其他 专栏收录该内容
4 篇文章 0 订阅

ROS Rviz 显示地图 Python


1. 缘由

地图在自主移动机器人这个行业里是非常重要的
第一步需要可视化地图来感官了解一下

在网上的资料基本都是C++版本的
“你行,我也行”,这里就补一下Python版本


2. Python实现

关于 栅格地图OccupancyGrid 可以在 ROS说明 查看

#!/usr/bin/env python3


import rospy
from nav_msgs.msg import OccupancyGrid


def DataUpdating(map_pub, local_map):
    """
    数据更新函数
    """

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

    local_map.info.map_load_time = current_time
    local_map.header.frame_id = "map"
    local_map.info.resolution = 0.01 # 分辨率 1cm
    local_map.info.height = 300 # 长和宽
    local_map.info.width = 200
    local_map.info.origin.position.x = 0 # 原点位置
    local_map.info.origin.position.y = 0
    local_map.info.origin.position.z = 0
    local_map.info.origin.orientation.x = 0 # 原点姿态
    local_map.info.origin.orientation.y = 0
    local_map.info.origin.orientation.z = 0
    local_map.info.origin.orientation.w = 1

    # 默认全部未知区域
    local_map.data = [-1] * local_map.info.width * local_map.info.height

    # 设置障碍区域
    boundary = 20
    for x in [boundary, local_map.info.height - boundary]:
        for y in range(boundary, local_map.info.width - boundary + 1):
            local_map.data[x * local_map.info.width + y] = 100

    for y in [boundary, local_map.info.width - boundary]:
        for x in range(boundary, local_map.info.height - boundary + 1):
            local_map.data[x * local_map.info.width + y] = 100

    # 设置可行区域
    for x in range(boundary + 1, local_map.info.height - boundary):
        for y in range(boundary + 1, local_map.info.width - boundary):
            local_map.data[x * local_map.info.width + y] = 0

    # 发布地图
    map_pub.publish(local_map)


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

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

        # 定义发布器 map_pub 发布 local_map
        map_pub = rospy.Publisher('local_map', OccupancyGrid, queue_size=1)

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

        # 定义地图
        local_map = OccupancyGrid()

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

            # 休眠
            rate.sleep()

    except rospy.ROSInterruptException:
        pass


if __name__ == '__main__':
    node()

3. 效果

怎么启动上述文件就不再描述了
直接上图看效果
在这里插入图片描述


谢谢

  • 3
    点赞
  • 2
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
相关推荐
©️2020 CSDN 皮肤主题: 我行我“速” 设计师:Amelia_0503 返回首页

打赏

氢键H-H

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值