Лазерный сканер ROS TurtleBot 2, кажется, сканирует сторону - PullRequest
0 голосов
/ 21 ноября 2018

Я новичок в 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 голосов
/ 21 ноября 2018

Вы должны быть в состоянии выбрать интересующие вас углы.-90 и +90 градусов - это только конечные точки, измеряемые лазерным сканером.Таким образом, вы получите набор данных с большим количеством расстояний под разными углами.Чтобы обнаружить препятствия перед роботом, вам нужно выбрать (или несколько) измерений в середине набора данных (мои знания ржавые, я предполагаю, что диапазоны отсортированы от -90 ° до 90 °, поэтому 0 ° находится в серединемассива).Таким образом, вы можете не захотеть перебирать все расстояния в msg.ranges, а только в подмножестве.

Я нашел это руководство , которое показывает, как считывать данные и получать доступ к значениюпод разными углами.

...