print “pos: “, pos
pub.publish(pos)
sleep(0.05)
currentPosition = targetPosition
print “pos-e: “, currentPosition
pub.publish(currentPosition)
def listener():
global pub
rospy.init_node(‘servoencoder’,anonymous=True)
rospy.Subscriber(‘/head/tilt/smooth’,Float32, moveServo_cb)
pub = rospy.Publisher(‘/head/tilt’,Float32, queue_size=10)
rospy.spin()
if __name__ == ‘__main__’:
listener()
想要测试伺服机顺畅的动作,就要启动Python脚本,将讯息发布到「/head/tilt/smooth」,这样一来即可检视顺畅的动作。
$ ./servoencoder.py
$ rostopic pub -1 /head/tilt/smoothstd_msgs/Float32 1
$ rostopic pub -1 /head/tilt/smoothstd_msgs/Float32 0
ROS当中的名称也可以重新测绘。只要将「/head/tilt/smooth」重新测绘为「/head/tilt」,程序就能向伺服机发出命令,而不会意识到正弦曲线的数值在变化。
迎向未来
虽然这里只说明了简单的伺服机控制,ROS却有更多功能。假如想要知道妨碍机器人的东西是什么,不妨使用已经支持ROS的Kinect。就算导航堆栈使用这项数据测绘,也可以馈送简短的Python脚本,让伺服机动起来,命令机器人追踪附近的物体。没错,眼睛真的会追逐物体。
Terry是室内用机器人,搭载2个Kinect。一个专门用来导航,另一个则用于深度测绘。Terry使用6个Arduinos,能够从用了ROS的网络接口或PS3遥控器直接操作。
Houndbot是设计成要在户外使用。里头有遥控器、GPS、罗盘和ROS耳形控制器。后续计划要搭载导航用的PS4双镜头摄影机,因为Kinect不能在阳光下使用。这台机器人重量为20公斤。还可以追加了悬吊系统,为此需要自行制造铝合金客制化零件。
A06B-0148-B575 A06B-0572-B006 A06B-6091-H130
A06B-0151-B075 A06B-0572-B077 A06B-6091-H145
A06B-0151-B077 A06B-0583-B010 A06B-6091-H175
A06B-0152-B075 A06B-0583-B065 A06B-6093-H002
A06B-0152-B175 A06B-0583-B372 A06B-6093-H101
A06B-0153-B075 A06B-0590-B205 A06B-6093-H102
A06B-0153-B077 A06B-0602-B226 A06B-6093-H111
A06B-0153-B175 A06B-0602-B232 A06B-6093-H112
A06B-0153-B676 A06B-0603-B021 A06B-6093-H113
A06B-0157-B076 A06B-0615-B383 A06B-6093-H151
A06B-0157-B077 A06B-0642-B011 A06B-6093-H152
A06B-0158-B175 A06B-0651-B012 A06B-6093-K001
A06B-0158-B177 A06B-0652-B012 A06B-6096-H101
A06B-0163-B075 A06B-0653-B303 A06B-6096-H103IC200UDR120完整IC200UDR120完整IC200UDR120完整
A06B-0163-B175 A06B-0656-B005 A06B-6096-H104
A06B-0169-B176 A06B-0705-B001 A06B-6096-H106
A06B-0172-B577 A06B-0725-B203 A06B-6097-H206
A06B-0176-B077 A06B-0727-B102 A06B-6102-H122
A06B-0177-B075 A06B-0727-B192
A06B-0183-B777 A06B-0727-B202 A06B-6102-H206