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小課堂官網

人臉跟蹤底層固件代碼教程文章

人臉追蹤平臺代碼

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