Python 2.7 如何利用ROS-python使速度与时间成线性关系
我创建了一个代码,让turtlebot 2跟随我取决于检测我的脸,并选择了一个0.2米/秒的速度值 我的问题是机器人突然消失在我的脸上时的运动,这使得turtlebot突然停止,我需要使它的速度逐渐降低,如图所示 我在罗斯时代的经历不太好 我需要它从零开始计数每丢一张脸。 我的问题在我的代码中,一旦运行代码,时间就会不断增加,无论它是不是丢了我的脸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
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
如果您能帮助我,请查看我的问题,提前谢谢[