以下的Python脚本程序会监听「/head/tilt/smooth」的讯息,朝「/head/tilt」发布许多讯息,好让伺服机转到目标角度之前慢慢加速,再慢慢延迟旋转。当讯息抵达「/head/tilt/smooth」时一定会呼叫「moveServo_cb」。这个回调函式会从-90到+90度之间每10度产生1个数值,追加到角度数组当中。「sin()」会取这个角度,数值从-1到+1慢慢增加。该数值加1之后,范围就会变成0到+2,再除以2之后, 0到+1的曲线数值数组就完成了。然后再看看m数组当中,每当发布讯息时,就会稍微前进一点,范围在r之内,直到1*r或是全范围为止。A06B-6132-H002A06B-6132-H002A06B-6132-H002
#!/usr/bin/env python
from time import sleep
import numpy as np
import rospy
from std_msgs.msg import Float32
currentPosition = 0.5
pub = None
def moveServo_cb(data):
global currentPosition, pub
targetPosition = data.data
r = targetPosition - currentPosition
angles = np.array( (range(190)) [0::10]) -90
m = ( np.sin( angles * np.pi/ 180. ) + 1 )/2
for mi in np.nditer(m):
pos = currentPosition + mi*r
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」,程序就能向伺服机发出命令,而不会意识到正弦曲线的数值在变化。
SIEMENS 6AV6643-0CD01-1AX1 触摸屏
SIEMENS 6SE7024-7TD84-1HF3 电源板
SIEMENS 6DD1607-0CA1 模块
SIEMENS 6ES7315-2AH14-0AB0 CPU
SIEMENS 6ES7416-2XN05-0AB0 CPU
SIEMENS 6ES7331-7KF02-0AB0 模块
SIEMENS 6ES7031-7HG84-1JA1 电源板
SIEMENS 6ES7953-8LF20-0AA0 内存卡
SIEMENS 6ES7412-3HJ14-0AB0 模块
SIEMENS 6ES7431-1KF00-0AB0 模块
SIEMENS 6GK7443-1EX11-0xE0 模块
SIEMENS 6ES7321-1FH00-0AA0 模块
SIEMENS 6ES7307-1BA01-0AA0 模块
SIEMENS 6ES7314-6CG03-0AB0 CPU
SIEMENS 6ES7288-1SR40-0AA0 模块
SIEMENS 6AV6643-0BA01-1AX0 触摸屏
SIEMENS 6SN1123-1AB00-0BA1 驱动器
SIEMENS 6SL3120-2TE21-0AA3 驱动器
SIEMENS 6FC5611-0CA01-0AA1 IO板
SIEMENS 6EP1437-3BA00 电源
SIEMENS 321-1BH02-0AA0 模块
SIEMENS 6ES7 972-0AA01-0xA0 模块
SIEMENS N014S5W-550 面板
SIEMENS 6ED1052-1MD00-0BA6 模块
SIEMENS 6SE7027-2TD84-1HF3 板卡
SIEMENS 6EP1332-1SH43 电源
SIEMENS 6EP1332-1SH51 电源
SIEMENS 6EP352-1SH01 电源
SIEMENS 6SN1123-1AB00-0BA1 驱动器
SIEMENS 3TX7144-4E9 继电器
SIEMENS 3TX7117-5PC03 继电器
SIEMENS 6ES7134-0KH01-0xB0 模块
SIEMENS 6ES7135-4FB01-0AB0 模块
SIEMENS 6ES7216-2BD23-0xB0 模块
SIEMENS 6EP1 331-1SH01 模块
SIEMENS 6AV6 545-0BA15-2AX0 触摸屏
SIEMENS 332-5HF00-0AB0 模块
Siemens 331-7KF02-0AB0 模块
SIEMENS ED63B080 断路器
SIEMENS 6ES7312-5AC02-0AB0 模块
SIEMENS 6ES7322-1BL00-0AA0 模块
SIEMENS 6ES7321-1BL00-0AA0 模块
SIEMENS 6ES7 972-0AB01-0xA0 模块
SIEMENS 6FC5211-0AA10-0AA0 模块
SIEMENS C98043-A7004-L1-7 励磁板
Siemens 6AV6645-0BB01-0AX0 控制面板
SIEMENS 6ES7038-6GL84-1JA1 电源板
SIEMENS ED63B030/30A 断路器
SIEMENS ED63B080/80A 断路器
Siemens 6ES7 972-0BA50-0xA0 接头