教程 | 阿克曼结构移动机器人的gazebo仿真(七)

本教程详细介绍了如何在Gazebo环境中配置阿克曼结构移动机器人的里程计,并使用gmapping进行二维地图构建。通过订阅/gazebo/link_states话题获取数据,发布里程计信息,然后安装并运行gmapping进行建图。最后,保存地图并设置rviz以便后续导航使用。
摘要由CSDN通过智能技术生成

第七章、配置小车里程计并用gmapping建图

1 前言

上一节写了用键盘控制节点控制仿真小车运动,这一节需要配置小车的里程计,并且在room_mini这个world中进行gmapping建图。

2 配置小车里程计

通过gazebo节点获取odom

从/gazebo/link_states话题中读取gazebo_msgs/LinKStates消息,再从msg.name.index中提取racebot::base_footprint位姿数据,将数据整理打包发布为里程计信息,在racebot_control/scripts中新建文件gazebo_odometry.py,代码如下:

#!/usr/bin/env python
'''
This script makes Gazebo less fail by translating gazebo status messages to odometry data.
Since Gazebo also publishes data faster than normal odom data, this script caps the update to 20hz.
Winter Guerra
'''
import rospy
from nav_msgs.msg import Odometry
from geometry_msgs.msg import Pose, Twist, Transform, TransformStamped
from gazebo_msgs.msg import LinkStates
from std_msgs.msg import Header
import numpy as np
import math
import tf2_ros
class OdometryNode:
    # Set publishers
    pub_odom = rospy.Publisher('/odom', Odometry, queue_size=1)
    def __init__(self):
        # init internals
        self.last_received_pose = Pose()
        self.last_received_twist = Twist()
        self.last_recieved_stamp = None
        # Set the update rate
        rospy.Timer(rospy.Duration(.05), self.timer_callback) # 20hz
        self.tf_pub = tf2_ros.TransformBroadcaster()
        # Set subscribers
        rospy.Subscriber('/gazebo/link_states', LinkStates, self.sub_robot_pose_update)
    def sub_robot_pose_update(self, msg):
        # Find the index of the racecar
        try:
            arrayIndex = msg.name.index('racebot::base_footprint')
        except ValueError as e:
            # Wait for Gazebo to startup
            pass
        else:
            # Extract our current position information
            self.last_received_pose = msg.pose[arrayIndex]
            self.last_received_twist = msg.twist[arrayIndex]
  
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值