赞
踩
本文实现的是将本地生成的一系列控制指令,从csv文件中读取,并以一定的频率发布给机器人。
首先介绍cmd_vel的数据类型
http://docs.ros.org/api/geometry_msgs/html/msg/Twist.html
#This expresses velocity in free space broken into its linear and angular parts.
Vector3 linear
Vector3 angular
由三维的速度控制指令和三维的角度控制指令组成,一般就取linear.x和angular.z即可
我们需要写如下代码,才能正常使用该数据类型
from geometry_msgs.msg import Twist
接下来是读取csv文件,用csv.reader可以很方便的实现
read=csv.reader(csvfile)
for row in read:
xxx=','.join(row)
para =xxx.split(',')
vel=para[0]
ang=para[1]
xxx返回了csv文件中每行的两个数据,以逗号分隔,para则是以逗号为分隔符将两个数据分别提取出来保存到数组中,下面用vel,ang两个变量分别保存。
有了数据,还需要一步
msg = Twist() #初始化
msg.linear.x=float(vel)
msg.angular.z=float(ang)
最后我们就可以发布了
pub.publish(msg)
完整代码如下
#!/usr/bin/env python
import rospy
import csv
from geometry_msgs.msg import Twist
csvfile=file('your/csv/file.csv','r')
read=csv.reader(csvfile)
def talker():
pub = rospy.Publisher('/jackal_velocity_controller/cmd_vel', Twist,queue_size=10)
rospy.init_node('talker', anonymous=True)
rate = rospy.Rate(50)
msg = Twist()
while not rospy.is_shutdown():
for row in read:
xxx=','.join(row)
para =xxx.split(',')
vel=para[0]
ang=para[1]
msg.linear.x=float(vel)
msg.angular.z=float(ang)
pub.publish(msg)
rate.sleep()
if __name__ == '__main__':
try:
talker()
except rospy.ROSInterruptException:
pass
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。