做為ROS的入門篇我們來看看如何控制伺服機。伺服機的缺點是會盡快遵照指令運轉(zhuǎn),因此頭部常常會突然活動,以至于失去平衡。不過使用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函式庫。
接下來要將程序代碼上傳到Arduino當中,執(zhí)行低階的伺服機控制,以便能從Linux機器操作。這時要以限制范圍內(nèi)的百分比(0.0~1.0)指定伺服機的位置。之所以使用百分比而不是寫明角度,是因為Arduino的程序代碼限制了正確的角度,要避免在指定角度時發(fā)生沖突。
就如各位所見,使用ROS之后,一般的循環(huán)函數(shù)就會變得相當簡單。循環(huán)函數(shù)只會訂閱(subscribe)數(shù)據(jù),任何Arduino循環(huán)都一樣。設(shè)定時要將ROS初始化,將各個ROS訊息訂閱者的訂閱叫出來。每個訂閱者會占據(jù)Arduino的RAM,數(shù)量取決于要用程序代碼做什么,以6個到12個為限。
#include
#include
#include
#include
#define SERVOPIN 3
Servo servo;
void servo_cb( const std_msgs::Float32& msg )
{
const float min = 45;
const float range = 90;
float v = msg.data;
if( v > 1 ) v = 1;
接下來要設(shè)法透過Arduino在ROS的世界說話。最簡單的方法是使用機器人啟動檔。雖然以下的檔案內(nèi)容非常簡單,但是這里要追加啟動檔,如此一來即使是非常復雜的機器人,也能用一個指令啟動。
$ cat rosservo.launch
$ roslaunch ./rosservo.lanch
rostopic指令可以看出ROS訊息傳送到機器人的哪個部位??戳讼旅娴某绦虼a就會發(fā)現(xiàn),「/head/tilt」可以透過Arduino使用。訊息要使用「rostopic」傳送。-1的選項只會發(fā)布(publish)訊息一次,通知/head/tilt傳送一個浮點數(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
Terry和Houndbot都是ROS
機器人,以6061個鋁合金零件制造而成。項目的目標是要盡量讓這些機器人自主運動。
Spang 83469 E7524 P02101818-001 PCB module Power E7524
Bryant BRY5269NC Plug Connector Nylon 2 pole 3 prong 15
Omron E3S-AT11-L Photoelectric Switch Sensor
Glass Metering Tube R8M25-2 R8M-25-2 S925J151WAA
Allen Bradley 193-TAB16 Thermal Overload Relay 1-1.6a
Euchner Safety Switch NZ1VZ-538E interlock
Mahle Pi1030MIC25 PI-1030-MIC-25 DMD0030D20B Filter
Ametek Thermometer 20-200f 142024 us gauge fahrenheit f
Fairchild 65742 65A Pressure Regulator 1-60psi 22scfm
Omron S3200-COCF62F-2?562
Omron S3200-COCF62F-2?662
Astec LPS23 power supply 12v 3.4a 12vdc
SMC Air Catch sensor ISA15 pressure DIN
Milacron Cimform Grinding Wheel Pink 12A60-K6-VFM 5X1-1
Keyence NX-C03R cable wire bar code laser scanner RF-50
Ingersoll IMC SNH-34-001 IN2040 5820252 Carbide Insert
Ingersoll Carbide Insert LNE324-0A2 IN6510 5803753 0700
Gems LS-1700 Float Level Switch Sensor pilot duty tank
AutoTran Auto Tran Pressure Transducer model 600D-237
Panasonic PCB ZUEP1190
Burndy KA26U Ferraz Shawmut 62162 392010 Distribution W
GE Fanuc Reset Emergency Stop Button red pendant
INA DRS35110 001501089 11-0270 seal carrie k05.122.0003
Bag of 5 SMC NAQ3000-N03 NAQA61 Quick Exhaust Valve
Hubbell Killark GEC T GECTT-2 3/4" .75 Hazardous Outlet
IFM Efector IZ5035 IZB30 proximity switch sensor
IFM Efector 0G5056 OG5056 OGTLFPKG photoelectric sensor
Efector Proximity Sensor IF0303 IFA2002-ABOW
2 SMC CH2F63B-PS hydraulic cyclinder repair rebuild kit