适用于UNO/2560/DUE/ESP8266/ESP32,2021年之前使用版本。
5.1 实践目的
5.2 实践设备
5.3 实践原理
示意图
原理图
使用主题servo消息控制舵机角度。
#if (Arduino[ESP32] >= 100)
#include <Arduino[ESP32].h>
#else
#include <WProgram.h>
#endif
#include <Servo.h>
#include <ros.h>
#include <std_msgs/UInt16.h>
ros::NodeHandle nh;
Servo servo;
void servo_cb( const std_msgs::UInt16& cmd_msg){
servo.write(cmd_msg.data); //set servo angle, should be from 0-180
digitalWrite(13, HIGH-digitalRead(13)); //toggle led
}
ros::Subscriber<std_msgs::UInt16> sub("servo", servo_cb);
void setup(){
pinMode(13, OUTPUT);
nh.initNode();
nh.subscribe(sub);
servo.attach(9); //attach it to pin 9
}
void loop(){
nh.spinOnce();
delay(1);
}
5.4 实践内容
阅读5.3中示意图、原理图和代码,在Arduino[ESP32]平台上完成实践。
5.5 实践问题
5.5.1 舵机角度如何调节?
控制信号是一种脉宽调制(PWM)信号。脉冲的高电平持续1到2毫秒(ms),也就是1000到2000微秒(µs)。在1000µs时,舵机左满舵。在2000µs时,右满舵。不过你可以通过调整脉宽来实现更大或者更小范围内的运动。控制脉冲的低电平持续20毫秒。每经过20毫秒(50次每秒),就要再次跳变为高电平,否则舵机就可能罢工,难以保持稳定。
5.5.2 舵机相应速度和转角精度能否调节?
舵机用PWM信号控制速度和转角,从而实现易控制、精度高和速度快的目的.
5.6 实践总结
回顾本次实践,遇到哪些问题,如何解决,经验和启发有哪些?
舵机可以在微机电系统和航模中作为基本的输出执行机构,其简单的控制和输出使得单片机系统非常容易与之接口。舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。