ROS地图表示的起源

时间:2018-03-30 20:51:21

标签: datagrid maps ros robot

我正在使用ROS及其map_server节点。

我不明白地图的原始元数据信息是什么意思(概念上)。根据官方文件:

  

原点:地图中左下角像素的二维姿势,如(x,y,   偏航),偏航为逆时针旋转(偏航= 0表示无旋转)。   系统的许多部分目前忽略了偏航。

这不是机器人的最初姿势?但它建立了占领网的一些感兴趣的领域?

为什么这个值对导航堆栈如此重要?

你能给我一个不同来源的同一张地图的简单例子吗?

2 个答案:

答案 0 :(得分:0)

原点通常是机器人在程序开始时的位置。所以是的,机器人的初始姿势。当我使用它时,它可以用作机器人的原始位置。通常,使用原点时,您会创建当前位置的深层副本。

def initPose(self):
    origin = copy.deepcopy(self._current)

    q = [origin.orientation.x,
        origin.orientation.y,
        origin.orientation.z,
        origin.orientation.w]  # quaternion nonsense

    (roll, pitch, yaw) = euler_from_quaternion(q)
    return (self._current.position.x, self._current.position.y, yaw)

    # self._odom_list.waitForTransform('YOUR_STRING_HERE', 'YOUR_STRING_HERE', rospy.Time(0), rospy.Duration(1.0))

但是我也使用origin作为函数的起源。

def navToPose(self, goal):
# self._odom_list.waitForTransform('map', 'base_footprint', rospy.Time(0), rospy.Duration(1.0))
# transGoal = self._odom_list.transformPose('base_footprint', goal) # transform the nav goal from the global coordinate system to the robot's coordinate system
    origin = copy.deepcopy(self._current)

    q = [origin.orientation.x,
         origin.orientation.y,
         origin.orientation.z,
         origin.orientation.w]  # quaternion nonsense

    (roll, pitch, yaw) = euler_from_quaternion(q)
     qc = [self._current.orientation.x,
           self._current.orientation.y,
           self._current.orientation.z,
           self._current.orientation.w]
    (rollc, pitchc, yawc) = euler_from_quaternion(qc)
    x = goal.pose.position.x
    y = goal.pose.position.y
    cx = origin.position.x
    cy = self._current.position.y

    print('current', cx, cy)
    print(x, y)
    theta = math.atan2(y-cy, x-cx)
    print ('angle is ', theta)
    self.rotate(theta)
    distance = (((x - cx) ** 2) + ((y - cy) ** 2)) ** .5
    print ('distance is ', distance)
    self.driveStraight(0.5, distance)

因此,通常,我将它更多地用作另一个变量。

取决于“占用”网格的完成方式。有时原点将指代它在网格上的起始位置。允许程序知道它是否仍在地图上。这可能会造成以下问题:https://answers.ros.org/question/285602/static-map-corner-at-origin-for-navigation-stack/(至少根据我的经验)

有关导航堆栈的更多信息,请访问:http://wiki.ros.org/navigation 此处:https://www.dis.uniroma1.it/~nardi/Didattica/CAI/matdid/robot-programming-ROS-introduction-to-navigation.pdf

答案 1 :(得分:0)

根据ros消息定义(http://docs.ros.org/api/nav_msgs/html/msg/MapMetaData.html):

 # The origin of the map [m, m, rad].  This is the real-world pose of the
 # cell (0,0) in the map.

这是地图在参考框架中的左下角的坐标

机器人及其位置与地图原点无关。

这里有一些细节和精美的插图:https://answers.ros.org/question/205521/robot-coordinates-in-map/