接下來要設法透過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 變頻器