接下來(lái)要設(shè)法透過(guò)Arduino在ROS的世界說(shuō)話。簡(jiǎn)單的方法是使用機(jī)器人啟動(dòng)檔。雖然以下的檔案內(nèi)容非常簡(jiǎn)單,但是這里要追加啟動(dòng)檔,如此一來(lái)即使是非常復(fù)雜的機(jī)器人,也能用一個(gè)指令啟動(dòng)。
$ cat rosservo.launch
$ roslaunch ./rosservo.lanch
rostopic指令可以看出ROS訊息傳送到機(jī)器人的哪個(gè)部位??戳讼旅娴某绦虼a就會(huì)發(fā)現(xiàn),「/head/tilt」可以透過(guò)Arduino使用。訊息要使用「rostopic」傳送。-1的選項(xiàng)只會(huì)發(fā)布(publish)訊息一次,通知/head/tilt傳送一個(gè)浮點(diǎn)數(shù)。
$ 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
這個(gè)階段當(dāng)中,能夠?qū)⑺邪l(fā)布數(shù)值到ROS的已知方法用在控制伺服機(jī)上。假如從0改成1,伺服機(jī)就會(huì)全速運(yùn)行。這本來(lái)并沒(méi)有問(wèn)題,但實(shí)際上我們想要逐漸加速以達(dá)到全速,然后再逐漸減速,停在目標(biāo)角度上。假如伺服機(jī)驟然運(yùn)轉(zhuǎn),機(jī)器人的動(dòng)作就會(huì)變得僵硬,讓周?chē)娜藝樢惶?/p>
Terry和Houndbot都是ROS機(jī)器人,以6061個(gè)鋁合金零件制造而成。項(xiàng)目的目標(biāo)是要盡量讓這些機(jī)器人自主運(yùn)動(dòng)。
以下的Python腳本程序會(huì)監(jiān)聽(tīng)「/head/tilt/smooth」的訊息,朝「/head/tilt」發(fā)布許多訊息,好讓伺服機(jī)轉(zhuǎn)到目標(biāo)角度之前慢慢加速,再慢慢延遲旋轉(zhuǎn)。當(dāng)訊息抵達(dá)「/head/tilt/smooth」時(shí)一定會(huì)呼叫「moveServo_cb」。這個(gè)回調(diào)函式會(huì)從-90到+90度之間每10度產(chǎn)生1個(gè)數(shù)值,追加到角度數(shù)組當(dāng)中。「sin()」會(huì)取這個(gè)角度,數(shù)值從-1到+1慢慢增加。該數(shù)值加1之后,范圍就會(huì)變成0到+2,再除以2之后, 0到+1的曲線數(shù)值數(shù)組就完成了。然后再看看m數(shù)組當(dāng)中,每當(dāng)發(fā)布訊息時(shí),就會(huì)稍微前進(jìn)一點(diǎn),范圍在r之內(nèi),直到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 驅(qū)動(dòng)
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 工控機(jī)
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 數(shù)據(jù)線
SIEMENS 6SN1123-1AA00-0DA2 驅(qū)動(dòng)器
SIEMENS 214-1AD23-0XB8 模塊
SIEMENS 6ES7314-1AF11-0AB0 模塊
SIEMENS 6SN1145-1BA01-0BA1 驅(qū)動(dòng)
SIEMENS 6SN1118-0DK23-0AA2 板卡
SIEMENS 6SN1118-1NH01-0AA1 驅(qū)動(dòng)
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 變頻器