как сделать связь между скоростью и временем линейной с помощью ROS-python - PullRequest
0 голосов
/ 11 марта 2019

Я создал код, согласно которому Turtlebot 2, следующий за мной, зависит от обнаружения моего лица, и выбрал значение скорости 0,2 м / с.

Моя проблема заключается в движении робота при внезапном исчезновении моего лица, которое делает Turtlebotвнезапно останавливается, мне нужно постепенно уменьшать скорость, как показано на рисунке введите описание ссылки здесь

мой опыт не очень хорош в ROS'time

Мне нужно, чтобы счет началсясекунды с нуля каждый раз терял мое лицо.моя проблема в моем коде: после запуска кода время непрерывно увеличивается независимо от того, потеряно оно моего лица или нет. в этой строке

 v = self.twist.linear.x = (-0.07 * t + 0.2)

мой полный код:

#!/usr/bin/env python



import rospy
from sensor_msgs.msg import Image
from geometry_msgs.msg import Twist
import cv2, cv_bridge


face_cascade = cv2.CascadeClassifier('/home/redhwan/1/run-webcam/Face-Detect-Demo-by-Ali-master/haarcascade_frontalface_default.xml' )


class Face_detection:
    def __init__(self):
        self.bridge = cv_bridge.CvBridge()
        self.starting_time = rospy.get_rostime().to_sec()
        self.save_time = True


        self.image_sub = rospy.Subscriber('/usb_cam/image_raw',Image, self.image_callback)
        self.cmd_vel_pub = rospy.Publisher('/cmd_vel_mux/input/teleop',Twist, queue_size=1)
        self.twist = Twist()


    def image_callback(self, msg):
        image = self.bridge.imgmsg_to_cv2(msg,desired_encoding='bgr8')

        gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
        faces = face_cascade.detectMultiScale( gray,scaleFactor=1.1,minNeighbors=5,minSize=(30, 30),flags=cv2.cv2.CASCADE_SCALE_IMAGE)
        faces = face_cascade.detectMultiScale(gray, 1.3, 5)

        for (x, y, w, h) in faces:
            cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2)


            self.twist.linear.x = 0.2

            self.cmd_vel_pub.publish(self.twist)


        cv2.imshow('face ', image)


        cv2.waitKey(3)




        if(type(faces) == tuple):

            if(self.save_time == False):
#                self.save_time = False  #Condition only the first time
                self.starting_time = rospy.get_rostime().to_sec() #save the current time
            now = rospy.get_rostime().to_sec()
#                self.save_time == False
            t = (now - self.starting_time)
            print ('t',t)
            if t <2.9:

                v = self.twist.linear.x = (-0.07 * t + 0.2)
                print v
                self.cmd_vel_pub.publish(self.twist)


            if t >= 2.9:
                v = self.twist.linear.x = 0
                print v
                self.cmd_vel_pub.publish(self.twist)


rospy.init_node('face_detection')
follower = Face_detection()
rospy.spin()

пожалуйстапомогите мне

Заранее спасибо

1 Ответ

0 голосов
/ 11 марта 2019

Если все, что вам нужно, это сделать движения черепахи более плавными.Возможно, вы обнаружите, что пакет сглаживания скорости удовлетворит ваши потребности.Вы можете установить его, запустив: sudo apt install ros-kinetic-yocs-velocity-smoother Узел принимает необработанные данные о скорости и фильтрует их по параметрам ускорения.Таким образом, вы можете переназначить свой вывод cmd_velocity_mux в raw_cmd_vel и переназначить сглаженный вывод smooth_cmd_vel на вход, идущий в turlebot.

...