roa_arduino_bridge控制舵机(未完)

好久以前我写过这么一篇博客,当时是为了单独控制机械臂夹爪。前些天突然发现我一直都弄错了,我以为我用的是ros_arduino_bridge,事实上我用的是rosserial_arduino。

这是当初的标题,现在已经改掉了,文章链接在此。 

这篇博客会先提一下在ros中使用ros_arduino_bridge和rosserial_arduino控制舵机的区别,在写一个ros_arduino_bridge控制舵机的例子。


目录

正文

一、ros_arduino_bridge和rosserial_arduino控制舵机的区别

二、arduino部分

三、ros部分

1.下载ros_arduino_bridge包


正文

github连接:https://github.com/zhangjiali1201/ros_arduino_servo(未完)

一、ros_arduino_bridge和rosserial_arduino控制舵机的区别

最主要的区别就是rosserial_arduino将控制舵机这件事视为一个话题,通过往话题发消息来控制舵机,这种方法易操作,也不需要获知通信协议。

ros_arduino_bridge如其名所言,在ros和arduino直接搭建了一座桥梁,可以直接从ros通过串口和arduino通信,稳定性高。如果下位机代码都是自己写的,知道通信协议,用这种方式更好。然后用服务,或者用话题都可以控制舵机。

二、arduino部分

arduino部分代码主要参考了ROS小课堂人脸追踪云台的开源代码。具体链接我会全部列在参考2里。

ROS小课堂使用的是DFROBOT的arduino uno+拓展版,我们这里就简单一些,直接使用arduino uno接个小舵机。接线方式还是老样子,舵机的红线接5V,黑线接地,数据线(棕色或者橙色居多)接9或10。

在arduino主程序代码中,增加了一个z指令方便控制舵机,在串口监视器输入z 1舵机旋转到45°,输入z 2旋转到90°,以此类推。

case SERVO_TEST:  // 'z'
      if (serialObj.arg1 == 0)
      {
        myServos[0].setTargetPos(0, 10);
      }
      else if (serialObj.arg1 == 1)
      {
        myServos[0].setTargetPos(45, 10);
      }
      else if (serialObj.arg1 == 2)
      {
        myServos[0].setTargetPos(90, 10);
      }
      else if (serialObj.arg1 == 3)
      {
        myServos[0].setTargetPos(120, 10);
      }
      Serial.println("Done");
      break; 

在servos.h文件中根据实际情况,把舵机引脚设为9、10.

//Define All Servos's Pins
byte myServoPins[N_SERVOS] = {9, 10};

三、ros部分

1.下载ros_arduino_bridge包

ros_arduino_bridge的wiki界面:http://wiki.ros.org/ros_arduino_bridge

$ cd ~/catkin_ws/src
$ git clone https://github.com/hbrobotics/ros_arduino_bridge.git

参考:

1.ROS技巧系列 - ROS与Arduino进行高效稳定的串口通信(两种通信方式对比)

2.ROS小课堂官网

人脸跟踪底层固件代码教程文章

人脸追踪平台代码

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章