ROS TurtleBot 2激光扫描仪似乎在扫描侧面

时间:2018-11-21 12:52:22

标签: python ros robotics

我是ROS的新手,我的任务是开发一种算法,该算法可以 只要机器人在前方没有障碍物就可以向前移动 他,但它一直陷在凉亭模拟中我摆在他面前的障碍之中。 当我深入检查它时,我发现我的机器人似乎扫描到侧面而不是前面。当我检查扫描仪激光的规格时 它说扫描的角度应在-90度到90度之间最大,最好远小于此角度。因此,由于“硬件”问题,我似乎无法完成任务,但对我来说似乎很奇怪。 谁能帮忙吗?

这是我的代码:

#!/usr/bin/python
#
# stopper.py
#
#  Created on:
#      Author:
#

import rospy
import math
from geometry_msgs.msg import Twist
from sensor_msgs.msg import LaserScan

class Stopper(object):

    def __init__(self, forward_speed):
        self.forward_speed = forward_speed
        self.min_scan_angle = -10/180*math.pi
        self.max_scan_angle = 10 / 180 * math.pi
        self.min_dist_from_obstacle = 0.5
        self.keep_moving = True
        self.command_pub = rospy.Publisher("/cmd_vel_mux/input/teleop", Twist, queue_size=10)
        self.laser_subscriber = rospy.Subscriber("scan",LaserScan, self.scan_callback, queue_size=1)

    def start_moving(self):
        rate = rospy.Rate(10)
        rospy.loginfo("Starting to move")
        while not rospy.is_shutdown() and self.keep_moving:
            self.move_forward()
            rate.sleep()


    def move_forward(self):
        move_msg = Twist()
        move_msg.linear.x = self.forward_speed
        self.command_pub.publish(move_msg)

    def scan_callback(self, scan_msg):
        for dist in scan_msg.ranges:
            if dist < self.min_dist_from_obstacle:
                self.keep_moving = False
                break

1 个答案:

答案 0 :(得分:1)

您应该能够选择自己感兴趣的角度。 -90度和+90度只是激光扫描仪测量的端点。因此,您将获得一个具有许多不同角度距离的数据集。要检测机器人前面的障碍物,您需要在数据集的中间选择一个(或多个)测量值(我的知识很生锈,我假设范围是从-90°到90°排序的,所以0°在中间数组)。因此,您可能不想只遍历msg.ranges中的所有距离,而只需遍历一个子集。

我发现this tutorial展示了如何从不同角度读取数据和访问值。

相关问题