ROS · 机器人笔记

从零开始的ROS机械臂,边做边学01-arduino篇

2018-10-20  本文已影响729人  DIO哒

1随便画画的设计图

第一版设计,总感觉有点不对劲,先试试看。
第二版设计
最终结果大概是想设计成上面这样。
第一个问题是如何使用ROS控制舵机转动一定角度。
首先是arduino,安装好rosserial后确保一切正常,下面这个是详细且成功率高的安装方法。
https://www.intorobotics.com/installing-and-setting-up-arduino-with-ros-kinetic-raspberry-pi-3/
但是这种方法在Ubuntu18.04下有bug
另一种方法是从arduino官网上下载,解压出来后运行install.sh
之后再从Library Manager中安装rosserial库。

安装好之后可以先试试example里的控制舵机的程序(用第二种方法没有这段代码)

#if (ARDUINO >= 100)
 #include <Arduino.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);
}

上述代码的主要内容是订阅“servo”这个话题获取一个int值,然后用它操作舵机旋转的角度。

然后使用rosserial,安装好rosserial之后,在终端运行
rosrun rosserial_python serial_node.py

Screenshot from 2018-10-20 10-46-03.png
之后在终端输入
rostopic list

检查是否有servo话题


Screenshot from 2018-10-20 11-00-04.png

然后在servo话题下手动发布消息进行测试,把“servo”打出来后不停按tab就行了,然后改一下data的值。

rostopic pub /servo std_msgs/UInt16 "data: 0"

如果成功的话舵机就会旋转到设定的那个角度。

下一章的内容应该是urdf

上一篇 下一篇

猜你喜欢

热点阅读