$ cat rosservo.launch $ roslaunch ./rosservo.lanch rostopic指令可以看出ROS讯息传送到机器人的哪个部位。看了下面的程序代码就会发现,「/head/tilt」可以透过Arduino使用。讯息要使用「rostopic」传送。-1的选项只会发布(publish)讯息一次,通知/head/tilt传送一个浮点数。 $ rostopic list /diagnostics /head/tilt /rosout /rosout_agg $ rostopic pub -1 /head/tiltstd_m***/Float32 0.4 $ rostopic pub -1 /head/tilt std_m***/Float320.9 这个阶段当中,能够将所有发布数值到ROS的已知方法用在控制伺服机上。假如从0改成1,伺服机就会全速运行。这本来并没有问题,但实际上我们想要逐渐加速以达到全速,然后再逐渐减速,停在目标角度上。假如伺服机骤然运转,机器人的动作就会变得僵硬,让周围的人吓一跳。 Terry和Houndbot都是ROS机器人,以6061个铝合金零件制造而成。项目的目标是要尽量让这些机器人自主运动。 以下的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或是全范围为止。 #!/usr/bin/env python from time import sleep import numpy as np import rospy from std_m***.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):SIEMENS 6ES7214-1BE30-0XB0 模块 SIEMENS 6ES7 322-1BL00-0AA0 模块 SIEMENS 6RA7095-4GV62-0 调速器 SIEMENS 6ES7131-4BF00-0AA0 模块 SIEMENS 6ES7151-1BA02-0AB0 模块 SIEMENS 6ES7321-1BL00-0AA0 模块 SIEMENS 6ES7972-0AA02-0XA0 模块 SIEMENS 6SE7307-1EA01-0AA0 模块 SIEMENS 6ES7134-4MB02-0AB0 模块 SIEMENS 6ES7135-4GB01-0AB0 模块 SIEMENS 6ES7138-4FB04-0AB0 模块 SIEMENS 6ES7132-4BF00-0AA0 模块 SIEMENS 6ES7138-4CB11-0AB0 模块 SIEMENS 6ES7138-4FA05-0AB0 模块 SIEMENS 6ES7416-2XN05-0AB0 模块 SIEMENS 6SE7024-7TD84-1HF5 主板 SIEMENS 6FC5370-0AA00-2BA0 802DSL系统 SIEMENS 6SL3210-5BE31-8UV0 变频器 SIEMENS 6FC5303-0DT12-1AA1 按键板 Siemens 6AV6 542-0BB15-2AX0 显示器 SIEMENS SKM200GAL176D 模块 SIEMENS 6SE6420-2AB21-1BA1 变频器 SIEMENS 6SE6420-2AD24-0BA1 变频器 1756-EN3TR特殊1756-EN3TR特殊1756-EN3TR特殊 SIEMENS 6ES7 322-1BL00-0AA0 模块 SIEMENS 6ES7 321-1BL00-0AA0 模块 SIEMENS 6ES7 315-2AH14-0AB0 模块 SIEMENS 6GK5101-1BB00-2AA3 交换机 SIEMENS 6GK5208-0BA10-2AA3 交换机 SIEMENS 6GK5204-2BB10-2AA3 交换机 SIEMENS 6GK5612-0BA10-2AA3 交换机 SIEMENS 6GK5212-2BB00-2AA3 交换机 SIEMENS 6GK1503-2CB00 模块 SIEMENS 6ES7288-1SR60-0AA0 模块