Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 如何利用ROS-python使速度与时间成线性关系_Python 2.7_Time_Ros_Face Detection - Fatal编程技术网

Python 2.7 如何利用ROS-python使速度与时间成线性关系

Python 2.7 如何利用ROS-python使速度与时间成线性关系,python-2.7,time,ros,face-detection,Python 2.7,Time,Ros,Face Detection,我创建了一个代码,让turtlebot 2跟随我取决于检测我的脸,并选择了一个0.2米/秒的速度值 我的问题是机器人突然消失在我的脸上时的运动,这使得turtlebot突然停止,我需要使它的速度逐渐降低,如图所示 我在罗斯时代的经历不太好 我需要它从零开始计数每丢一张脸。 我的问题在我的代码中,一旦运行代码,时间就会不断增加,无论它是不是丢了我的脸 v = self.twist.linear.x = (-0.07 * t + 0.2) 我的完整代码: #!/usr/bin/env pytho

我创建了一个代码,让turtlebot 2跟随我取决于检测我的脸,并选择了一个0.2米/秒的速度值

我的问题是机器人突然消失在我的脸上时的运动,这使得turtlebot突然停止,我需要使它的速度逐渐降低,如图所示

我在罗斯时代的经历不太好

我需要它从零开始计数每丢一张脸。 我的问题在我的代码中,一旦运行代码,时间就会不断增加,无论它是不是丢了我的脸

 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()
#/usr/bin/env python
进口罗西
从传感器_msgs.msg导入图像
从几何体\u msgs.msg导入扭曲
导入cv2,cv_桥
face_cascade=cv2.CascadeClassifier('/home/redhwan/1/run webcam/face Demo by Ali master/haarcascade_frontalface_default.xml'))
类人脸检测:
定义初始化(自):
self.bridge=cv_bridge.CvBridge()
self.starting_time=rospy.get_rostime().to_sec()
self.save_time=True
self.image\u sub=rospy.Subscriber('/usb\u cam/image\u raw',image,self.image\u回调)
self.cmd_vel_pub=rospy.Publisher('/cmd_vel_mux/input/teleop',Twist,queue_size=1)
self.twist=twist()
def图像_回调(self,msg):
image=self.bridge.imgmsg\u到\u cv2(msg,所需的\u编码='bgr8')
灰色=cv2.CVT颜色(图像,cv2.COLOR\u BGR2GRAY)
faces=face\u cascade.detectMultiScale(灰色,scaleFactor=1.1,minNeighbors=5,minSize=(30,30),flags=cv2.cv2.cascade\u SCALE\u图像)
面=面\级联。检测多尺度(灰色,1.3,5)
对于面中的(x,y,w,h):
cv2.矩形(图像,(x,y),(x+w,y+h),(0,255,0),2)
自扭曲线性x=0.2
self.cmd_vel_pub.publish(self.twist)
cv2.imshow(“脸”,图像)
cv2.等待键(3)
如果(类型(面)=元组):
如果(self.save_time==False):
#self.save_time=False#仅在第一次出现条件
self.starting_time=rospy.get_rostime().to_sec()#保存当前时间
now=rospy.get_rostime().to_sec()
#self.save_time==False
t=(现在-self.start\u时间)
打印('t',t)
如果t=2.9:
v=自扭转线性x=0
印刷品
self.cmd_vel_pub.publish(self.twist)
rospy.init_节点('人脸检测')
follower=面部检测()
rospy.spin()
请帮帮我


如果您需要做的只是让turtlebot的动作更流畅,请提前感谢。您可能会发现,这将满足您的需求。 您可以通过运行以下命令进行安装:
sudo-apt安装速度平滑器

节点获取原始速度输入,并根据加速度参数对其进行过滤。因此,您可以将cmd\u velocity\u mux输出重新映射到原始cmd\u电平,并将平滑输出smooth\u cmd\u电平重新映射到turlebot的输入。

谢谢您提供此信息,我将使用它,这可能是我安装的另一个解决方案,我的系统靛蓝,
阅读软件包列表。。。已完成构建依赖关系树以读取状态信息。。。Done ros indigo yocs速度平滑器已经是最新版本。ros indigo yocs速度平滑器设置为手动安装。以下软件包已自动安装,不再需要:gir1.2-rsvg-2.0 imagemagick common libblas dev libcoin80 libcoin80 dev libdjvulibre dev libdmtx dev libdmtx 0a libexif dev libfftw3-double3 libgraphviz dev libgvc6 plugins gtk liblapack dev liblqr-1-0 liblqr-1-0-dev
但不改变不起作用,
self.cmd\u pub=rospy.Publisher(“/smooth\u cmd\u vel”,Twist,queue\u size=10)
这些主题正在和我一起工作:
/mobile\u base/commands/velocity
/cmd\u vel\u mux/input/navi
/cmd\u vel\u mux/input/safety\u controller
/cmd\u vel\u mux/input/teleop
如果您能帮助我,请查看我的问题,提前谢谢[