ROS+arduino串口通信控制舵机
ROS+arduino串口通信控制舵机在此我假设各位读者已经装好了ROS,笔者使用的Ubuntu16.04+ROS(Kinetic),如果读者使用的是Ubuntu18.04+ROS(Melodic)可能出现一些其他问题。安装arduinoADEarduino具有支持Linux的官方ADE:arduino官网下载Linux版ADE 选择你所使用版本Linux对应的ADE下载完之后在DO...
·
ROS+arduino串口通信控制舵机
在此我假设各位读者已经装好了ROS,笔者使用的Ubuntu16.04+ROS(Kinetic),如果读者使用的是Ubuntu18.04+ROS(Melodic)可能出现一些其他问题。
安装arduinoADE
arduino具有支持Linux的官方ADE:
- arduino官网下载Linux版ADE 选择你所使用版本Linux对应的ADE
- 下载完之后在DOWNLOADS文件夹中将其解压*
- 在所下载版本的arduino文件夹中新建终端,输入 ./install.sh
安装rosserial arduino
sudo apt-get install ros-kinetic-rosserial-arduino
sudo apt-get install ros-kinetic-rosserial
rospack profile
将ros_lib添加到ADE中
cd Downloads
cd arduino-1.8.8
./ arduino
ADE运行后可在Sketch栏中找到Include Library再选择Manage Libraries(可通过快捷键Ctrl+shift+I打开) 搜索Rosserial Arduino Library并添加。完成后在File栏中的Examples便可以看到Rosserial Arduino Library的例程。
硬件
在此笔者使用的是arduino UNO控制板和一个RC遥控车的舵机(舵机转动角度被限制在了60°之内)
代码
#include <ros.h>
#include <std_msgs/UInt16.h>
#include <Servo.h>
ros::NodeHandle nh;
Servo myservo;
int servoPin=9;
void messageCb(std_msgs::UInt16 servo_msg)
{
myservo.write(servo_msg.data);
delay(15);
}
ros::Subscriber<std_msgs::UInt16> sub("servo_control", &messageCb );
void setup()
{
myservo.attach(servoPin);
nh.initNode();
nh.subscribe(sub);
}
void loop()
{
nh.spinOnce();
delay(1);
}
运行
打开终端1
sudo chmod 777 /dev/ttyACM0
运行roscore
roscore
打开另一个终端2
rosrun rosserial_python serial_node.py /dev/ttyACM0
打开终端3
rostopic pub -1 /servo_control std_msgs/UInt16 <POS>
例如:rostopic pub -1 /servo_led std_msgs/UInt16 180 即转动180度(本文使用的舵机的输入被限制在50度开始到110度结束)
更多推荐
已为社区贡献1条内容
所有评论(0)