做為ROS的入門篇我們來看看如何控制伺服機(jī)。伺服機(jī)的缺點(diǎn)是會(huì)盡快遵照指令運(yùn)轉(zhuǎn),因此頭部常常會(huì)突然活動(dòng),以至于失去平衡。不過使用ROS之后,就可以進(jìn)行正弦曲線運(yùn)動(dòng),讓機(jī)器人保持穩(wěn)定。由于可以在ROS當(dāng)中進(jìn)行這項(xiàng)操作,因此無須改寫控制用的程序代碼。另外,連接伺服機(jī)和ROS的程序代碼,以及伺服機(jī)的硬件都無須變更。再者,程序代碼還可以任意使用。
ROS很適合用在Ubuntu或Debian上,無須編譯。建置時(shí)要在Linux機(jī)器上執(zhí)行Ubuntu,使用業(yè)余用伺服機(jī)、Arduino和普通的導(dǎo)線。ROS要在Ubuntu機(jī)器上啟動(dòng),訊息則透過USB傳送到Arduino。只要安裝二進(jìn)制的ROS套件,就會(huì)在主控臺程序(像是gnome-terminal或konsole)追加以下指令,這樣Arduino系統(tǒng)就能辨識ROS函式庫。
cd~/sketchbook/libraries
rm-rf ros_lib
rosrunrosserial_arduino make_l ibraries.py .
Arduino的程序
接下來要將程序代碼上傳到Arduino當(dāng)中,執(zhí)行低階的伺服機(jī)控制,以便能從Linux機(jī)器操作。這時(shí)要以限制范圍內(nèi)的百分比(0.0~1.0)伺服機(jī)的位置。之所以使用百分比而不是寫明角度,是因?yàn)锳rduino的程序代碼限制了正確的角度,要避免在角度時(shí)發(fā)生沖突。
就如各位所見,使用ROS之后,一般的循環(huán)函數(shù)就會(huì)變得相當(dāng)簡單。循環(huán)函數(shù)只會(huì)訂閱(subscribe)數(shù)據(jù),任何Arduino循環(huán)都一樣。設(shè)定時(shí)要將ROS初始化,將各個(gè)ROS訊息訂閱者的訂閱叫出來。每個(gè)訂閱者會(huì)占據(jù)Arduino的RAM,數(shù)量取決于要用程序代碼做什么,以6個(gè)到12個(gè)為限。
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;
if( v < 0 ) v = 0;
float angle = min + (range * v);
servo.write(angle);
}
ros::Subscriber
ros::NodeHandle nh;
void setup()
{
servo.attach(SERVOPIN);
nh.initNode();
nh.subscribe(sub);
}
void loop()
{
nh.spinOnce();
delay(1); }
西門子 6ES7214-1BD23-0XB8 繼電器
西門子 6ES7133-1BL01-0XB0 模塊
西門子 6FC5203-0AF22-0AA2 控制面板
西門子 3NE1820-0 熔斷器
西門子 6ES7134-4NB51-0AB0 模塊
西門子 6SE6430-2UD33-7EB0 變頻器
西門子 6SE6430-2UD33-0DB0 變頻器
西門子 6SE6430-2UD32-2DB0 變頻器
西門子 6SE6430-2UD31-5CA0 變頻器
西門子 6ES7 315-2AG10-0AB0 CPU
西門子 6ES7 321-1BH02-0AA0 模塊
西門子 6ES7 322-1BH01-0AA0 模塊
西門子 6SE6420 2AD24 0BA1 變頻器
西門子 6AV6647-0AF11-3AX0 觸摸屏
西門子 6SL3120-2TE21-0AA3 驅(qū)動(dòng)器
西門子 6SL3120-1TE23-0AA3 驅(qū)動(dòng)器
西門子 6SL3130-6TE23-6AA3 模塊
西門子 6ES7131-4BD01-0AA0 模塊
西門子 6ES7132-4BD02-0AA0 模塊
西門子 6ES7315-6TH13-0AB0 CPU
西門子 6ES7901-3CB30-0XA0 線纜
西門子 3RW3046-1AB14 軟啟動(dòng)器
西門子 6ES7212-1BB23-0XB8 模塊
西門子 6SN1123-1AB00-0BA1 驅(qū)動(dòng)器
西門子 6ES7307-1EA00-0AA0 電源模塊
西門子 6EP1331-1SL11 電源模塊
西門子 6AV6648-0BC11-3AX0 觸摸屏
西門子 6ESS7 331-7PF01-0AB0 模塊
西門子 6EP1436-3BA10 電源
SIEMENS 6SE6440-2UD21-1AA1 變頻器
SIEMENS 6ES7 331-1KF01-0AB0 模塊
SIEMENS 6ES7 321-1BL00-0AA0 模塊
SIEMENS 6ES7 322-1BL00-0AA0 模塊
SIEMENS 6SN1114-0NB01-0AA1 通訊版
SIEMENS 6ES7214-1AD23-0XB0 模塊
SIEMENS C98043-A7600-L5 電源板
SIEMENS RWD62 控制器
SIEMENS 6EP1332-1SH71 模塊
SIEMENS 3RX9503-0BA00 電源
SIEMENS 6ES7-153-2BA82-0XB0 模塊
SIEMENS 6ES7414-4HM14-0AB0 模塊
SIEMENS 6ES7414-4HJ04-0AB0 模塊
SIEMENS 6ES7407-0KR02-0AA0 模塊
SIEMENS 6AV6643-0DD01-1AX1 觸摸屏140ACO02000配件140ACO02000配件140ACO02000配件
SIEMENS 6ES7 331-7KF02-0AB0 模塊
SIEMENS 6ES7 322-1BL00-0AA0 模塊
SIEMENS 6AV6648-0BC11-3AX0 顯示屏
Siemens 6ES7 214-2AD23-0XB8 模塊
SIEMENS 6EP1336-3BA00 電源
SIEMENS SQM56.687A2 電機(jī)