接下来要将程序代码上传到Arduino当中,执行低阶的伺服机控制,以便能从Linux机器操作。这时要以限制范围内的百分比(0.0~1.0)*伺服机的位置。之所以使用百分比而不是写明角度,是因为Arduino的程序代码限制了正确的角度,要避免在*角度时发生冲突。 就如各位所见,使用ROS之后,一般的循环函数就会变得相当简单。循环函数只会订阅(subscribe)数据,任何Arduino循环都一样。设定时要将ROS初始化,将各个ROS讯息订阅者的订阅叫出来。每个订阅者会占据Arduino的RAM,数量取决于要用程序代码做什么,以6个到12个为限。 Servo servo; void servo_cb( const std_m***::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的世界说话。较简单的方法是使用机器人启动档。虽然以下的档案内容非常简单,但是这里要追加启动档,如此一来即使是非常复杂的机器人,也能用一个指令启动。 SIEMENS 6ES7414-4HM14-0AB0 模块 SIEMENS 6ES7414-4HJ04-0AB0 模块 SIEMENS 6ES7407-0KR02-0AA0 模块 SIEMENS 6AV6643-0DD01-1AX1 触摸屏 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 电机 SIEMENS 6SE6440-2AD33-7EA1 变频器 SIEMENS 6SE7038-6EK84-1JC2 模块 SIEMENS 6SN1123-1AA00-0DA2 驱动 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 工控机 SIEMENS 6ES7 321-1BH02-0AA0 模块IC640HWC716常规IC640HWC716常规IC640HWC716常规 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 模块