接下来要设法透过Arduino在ROS的世界说话。简单的方法是使用机器人启动档。虽然以下的档案内容非常简单,但是这里要追加启动档,如此一来即使是非常复杂的机器人,也能用一个指令启动。
$ 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_msgs/Float32 0.4
$ rostopic pub -1 /head/tilt std_msgs/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_msgs.msg import Float32
currentPosition = 0.5
pub = None
def moveServo_cb(data):
global currentPosition, pub
targetPosition = data.data
r = targetPosition - currentPosition
SIEMENS 6SE6440-2AD33-7EA1 变频器
SIEMENS 6SE7038-6EK84-1JC2 模块
SIEMENS 6SN1123-1AA00-0DA2 驱动
SIEMENS 6ES7090-0XX84-0AB0 主板
SIEMENS 6SX7010-0KC00 EB2板
SIEMENS 6ES7090-0XX84-0FF5 通讯板
SIEMENS 6GK1561-1AA01 模块
SIEMENS 6AV6643-0CD01-1AX1 触摸屏
SIEMENS 6AV6648-0BC11-3AX0 显示屏
SIEMENS 6AV6648-0BC11-3AX0 显示屏
SIEMENS A5E00282044(二手) 板子
SIEMENS 6ES7-153-2BA82-0XB0 模块
Siemens 6GK1105-2AA10 工控机
SIEMENS 6ES7 321-1BH02-0AA0 模块
SIEMENS 6ES7 322-1BH01-0AA0 模块
SIEMENS 6ES7 315-2AG10-0AB0 模块
SIEMENS 6ES7 972-0BA12-0XA0 DP接头
SIEMENS 6ES7 153-1AA03-0XB0 模块
SIEMENS 6ES7 972-0CB20-0XA0 数据线
SIEMENS 6SN1123-1AA00-0DA2 驱动器
SIEMENS 214-1AD23-0XB8 模块
SIEMENS 6ES7314-1AF11-0AB0 模块
SIEMENS 6SN1145-1BA01-0BA1 驱动
SIEMENS 6SN1118-0DK23-0AA2 板卡
SIEMENS 6SN1118-1NH01-0AA1 驱动
SIEMENS 6GK7343-1EX20-0XE0 模块
Siemens A5E00151091-0 板卡
SIEMENS 6ES7214-2BD23-0XB0 模块
SIEMENS 6ES7216-2BD23-0XB0 模块
SIEMENS 6ES7231-0HF22-0XA0 模块
SIEMENS 6ES7277-0AA22-0XA0 模块
SIEMENS 6GK7243-1EX01-0XE0 模块
SIEMENS 6ES7313-6CG04-0AB0 模块
SIEMENS 6ES7314-6CH04-0AB0 模块
SIEMENS 6ES7953-8LJ30-0AA0 模块
SIEMENS 6ES7365-0BA01-0AA0 模块140ESI06210配件140ESI06210配件140ESI06210配件
SIEMENS 6GK7343-1CX00-0XE0 模块
SIEMENS 214-1BD23-0XB8 模块
SIEMENS 307-1EA01-0AA0 模块
SIEMENS 6SE6430-2UD31-5CA0 变频器