cd~/sketchbook/libraries
rm-rf ros_lib
rosrunrosserial_arduino make_l ibraries.py .
Arduino的程序
接下來要將程序代碼上傳到Arduino當中,執行低階的伺服機控制,以便能從Linux機器操作。這時要以限制范圍內的百分比(0.0~1.0)指定伺服機的位置。之所以使用百分比而不是寫明角度,是因為Arduino的程序代碼限制了正確的角度,要避免在指定角度時發生沖突。
就如各位所見,使用ROS之后,一般的循環函數就會變得相當簡單。循環函數只會訂閱(subscribe)數據,任何Arduino循環都一樣。設定時要將ROS初始化,將各個ROS訊息訂閱者的訂閱叫出來。每個訂閱者會占據Arduino的RAM,數量取決于要用程序代碼做什么,以6個到12個為限。
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); }
接下來要設法透過Arduino在ROS的世界說話。簡單的方法是使用機器人啟動檔。雖然以下的檔案內容非常簡單,但是這里要追加啟動檔,如此一來即使是非常復雜的機器人,也能用一個指令啟動。
$ cat rosservo.launch
$ roslaunch ./rosservo.lanch
rostopic指令可以看出ROS訊息傳送到機器人的哪個部位??戳讼旅娴某绦虼a就會發現,「/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.9SIEMENS
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
模塊
SIEMENS
6GK7343-1CX00-0XE0
模塊
SIEMENS
214-1BD23-0XB8
模塊
SIEMENS
307-1EA01-0AA0
模塊
SIEMENS
6SE6430-2UD31-5CA0
變頻器
SIEMENS
6ES7038-6GL84-1BG2
板卡A06B-0077-B203A06B-0077-B203A06B-0077-B203SIEMENS
C-A5E00282044(FBG PSU2)
板卡
SIEMENS
6SN1123-1AB00-0CA3
驅動器
SIEMENS
1FK7042-5AF71-1SA0
電機