時間:2019-01-21 11:05:09來源:Ben Martin
ROS(RobotOperatingSystem)是開源的機器人系統(tǒng)平臺。使用這個之后,機器人就可以看見東西、測繪、導航,或是以最新的算法作用于周圍的環(huán)境當中。假如想要制造復雜的機器人,已經(jīng)準備好的ROS程序代碼就能派上用場。ROS能在最低限度下運用。這可以透過RaspberryPi等級的計算機安裝。
做為ROS的入門篇我們來看看如何控制伺服機。伺服機的缺點是會盡快遵照指令運轉,因此頭部常常會突然活動,以至于失去平衡。不過使用ROS之后,就可以進行正弦曲線運動,讓機器人保持穩(wěn)定。由于可以在ROS當中進行這項操作,因此無須改寫控制用的程序代碼。另外,連接伺服機和ROS的程序代碼,以及伺服機的硬件都無須變更。再者,程序代碼還可以任意使用。
ROS很適合用在Ubuntu或Debian上,無須編譯。建置時要在Linux機器上執(zhí)行Ubuntu,使用業(yè)余用伺服機、Arduino和普通的導線。ROS要在Ubuntu機器上啟動,訊息則透過USB傳送到Arduino。只要安裝二進制的ROS套件,就會在主控臺程序(像是gnome-terminal或konsole)追加以下指令,這樣Arduino系統(tǒng)就能辨識ROS函式庫。
cd~/sketchbook/libraries
rm-rfros_lib
rosrunrosserial_arduinomake_libraries.py.
Arduino的程序
接下來要將程序代碼上傳到Arduino當中,執(zhí)行低階的伺服機控制,以便能從Linux機器操作。這時要以限制范圍內的百分比(0.0~1.0)指定伺服機的位置。之所以使用百分比而不是寫明角度,是因為Arduino的程序代碼限制了正確的角度,要避免在指定角度時發(fā)生沖突。
就如各位所見,使用ROS之后,一般的循環(huán)函數(shù)就會變得相當簡單。循環(huán)函數(shù)只會訂閱(subscribe)數(shù)據(jù),任何Arduino循環(huán)都一樣。設定時要將ROS初始化,將各個ROS訊息訂閱者的訂閱叫出來。每個訂閱者會占據(jù)Arduino的RAM,數(shù)量取決于要用程序代碼做什么,以6個到12個為限。
#include
#include
#include
#include
#defineSERVOPIN3
Servoservo;
voidservo_cb(conststd_msgs::Float32&msg)
{
constfloatmin=45;
constfloatrange=90;
floatv=msg.data;
if(v>1)v=1;
if(v<0)v=0;
floatangle=min+(range*v);
servo.write(angle);
}
ros::Subscriber
ros::NodeHandlenh;
voidsetup()
{
servo.attach(SERVOPIN);
nh.initNode();
nh.subscribe(sub);
}
voidloop()
{
nh.spinOnce();
delay(1);}
接下來要設法透過Arduino在ROS的世界說話。最簡單的方法是使用機器人啟動檔。雖然以下的檔案內容非常簡單,但是這里要追加啟動檔,如此一來即使是非常復雜的機器人,也能用一個指令啟動。
$catrosservo.launch
$roslaunch./rosservo.lanch
rostopic指令可以看出ROS訊息傳送到機器人的哪個部位??戳讼旅娴某绦虼a就會發(fā)現(xiàn),「/head/tilt」可以透過Arduino使用。訊息要使用「rostopic」傳送。-1的選項只會發(fā)布(publish)訊息一次,通知/head/tilt傳送一個浮點數(shù)。
$rostopiclist
/diagnostics
/head/tilt
/rosout
/rosout_agg
$rostopicpub-1/head/tiltstd_msgs/Float320.4
$rostopicpub-1/head/tiltstd_msgs/Float320.9
這個階段當中,能夠將所有發(fā)布數(shù)值到ROS的已知方法用在控制伺服機上。假如從0改成1,伺服機就會全速運行。這本來并沒有問題,但實際上我們想要逐漸加速以達到全速,然后再逐漸減速,停在目標角度上。假如伺服機驟然運轉,機器人的動作就會變得僵硬,讓周圍的人嚇一跳。
用另一個節(jié)點平滑運動
Houndbot
Terry
Terry和Houndbot都是ROS機器人,以6061個鋁合金零件制造而成。項目的目標是要盡量讓這些機器人自主運動。
以下的Python腳本程序會監(jiān)聽「/head/tilt/smooth」的訊息,朝「/head/tilt」發(fā)布許多訊息,好讓伺服機轉到目標角度之前慢慢加速,再慢慢延遲旋轉。當訊息抵達「/head/tilt/smooth」時一定會呼叫「moveServo_cb」。這個回調函式會從-90到+90度之間每10度產(chǎn)生1個數(shù)值,追加到角度數(shù)組當中。「sin()」會取這個角度,數(shù)值從-1到+1慢慢增加。該數(shù)值加1之后,范圍就會變成0到+2,再除以2之后,0到+1的曲線數(shù)值數(shù)組就完成了。然后再看看m數(shù)組當中,每當發(fā)布訊息時,就會稍微前進一點,范圍在r之內,直到1*r或是全范圍為止。
#!/usr/bin/envpython
fromtimeimportsleep
importnumpyasnp
importrospy
fromstd_msgs.msgimportFloat32
currentPosition=0.5
pub=None
defmoveServo_cb(data):
globalcurrentPosition,pub
targetPosition=data.data
r=targetPosition-currentPosition
angles=np.array((range(190))[0::10])-90
m=(np.sin(angles*np.pi/180.)+1)/2
formiinnp.nditer(m):
pos=currentPosition+mi*r
print“pos:“,pos
pub.publish(pos)
sleep(0.05)
currentPosition=targetPosition
print“pos-e:“,currentPosition
pub.publish(currentPosition)
deflistener():
globalpub
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腳本,將訊息發(fā)布到「/head/tilt/smooth」,這樣一來即可檢視順暢的動作。
$./servoencoder.py
$rostopicpub-1/head/tilt/smoothstd_msgs/Float321
$rostopicpub-1/head/tilt/smoothstd_msgs/Float320
ROS當中的名稱也可以重新測繪。只要將「/head/tilt/smooth」重新測繪為「/head/tilt」,程序就能向伺服機發(fā)出命令,而不會意識到正弦曲線的數(shù)值在變化。
迎向未來
雖然這里只說明了簡單的伺服機控制,ROS卻有更多功能。假如想要知道妨礙機器人的東西是什么,不妨使用已經(jīng)支持ROS的Kinect。就算導航堆棧使用這項數(shù)據(jù)測繪,也可以饋送簡短的Python腳本,讓伺服機動起來,命令機器人追蹤附近的物體。沒錯,眼睛真的會追逐物體。
Terry是室內用機器人,搭載2個Kinect。一個專門用來導航,另一個則用于深度測繪。Terry使用6個Arduinos,能夠從用了ROS的網(wǎng)絡接口或PS3遙控器直接操作。
Houndbot是設計成要在戶外使用。里頭有遙控器、GPS、羅盤和ROS耳形控制器。后續(xù)計劃要搭載導航用的PS4雙鏡頭攝影機,因為Kinect不能在陽光下使用。這臺機器人重量為20公斤。還可以追加了懸吊系統(tǒng),為此需要自行制造鋁合金客制化零件。
聲明:本文為轉載類文章,如涉及版權問題,請及時聯(lián)系我們刪除(QQ: 2737591964),不便之處,敬請諒解!
標簽:
上一篇:變頻器影響電機的因素有哪些?
下一篇:一文了解熱電阻參數(shù)選型
中國傳動網(wǎng)版權與免責聲明:凡本網(wǎng)注明[來源:中國傳動網(wǎng)]的所有文字、圖片、音視和視頻文件,版權均為中國傳動網(wǎng)(www.surachana.com)獨家所有。如需轉載請與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個人轉載使用時須注明來源“中國傳動網(wǎng)”,違反者本網(wǎng)將追究其法律責任。
本網(wǎng)轉載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內投稿人士,版權屬于原版權人。轉載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。
產(chǎn)品新聞
更多>性能躍升20%!維宏NK300CX Plus數(shù)控系統(tǒng)...
2025-04-11
2025-04-08
【產(chǎn)品解讀】全面提升精密制造檢測節(jié)拍...
2025-03-31
應用案例 | 使用宏集TELE監(jiān)控繼電器監(jiān)控...
2025-03-26
2025-03-20
2025-03-13