ROS + 神器 Arduino / 以控制 Servo 為例!

玩 ROS 就是要跟物體世界互動阿 ~ 不然要幹嘛!

雖然我是用 Nvidia Jetson tk1 開發版!看起來有很多 GPIO ports ,

BUT … 我不熟它!且似乎很多是綁在特定應用上(顯示面板、Camera … )

SO … 讓 Arduino 透過 USB 執行他的命令 ~

讓 Arduino 當 SLAVE 是目前最方便的 !

  • 可使用廣大的 Arduino Library
  • 簡化主機底層控制 ( 如馬達PID控速… )

如何使用 ?

準備動作

  1. Install Arduino <ref : Arduino playground >
    • $ sudo apt-get update && sudo apt-get install arduino arduino-core
  2. 安裝 ROS rosserial_arduino Package <參 ros wiki> … 注意 ROS 版本!
    • $ sudo apt-get install ros-indigo-rosserial-arduino
    • $ sudo apt-get install ros-indigo-rosserial
  3.  將 Terminal 開到你的 Arduino Libraries 資料夾
    • 先把這個名子空出來!
      • $ rm -rf ros_lib
    • 跑指令自動安裝 (理論上 roscore 要先啟動!)
      • $ rosrun rosserial_arduino make_libraries.py .
  4. 接下來就是修改燒進去的程式碼!概念上來說是把 Arduino 當作一個 Node @@"

以 Servo Motor 為例!

參考教材 <ROS WIKI>

What’s Difference !

  1. SLAVE 守則:#include <ros.h>
  2. 暗號要懂:#include <std_msgs/UInt16.h>
  3. 告訴大家我也是 Slave 之一
    • $ ros::NodeHandle nh;
  4. 講清楚你要啥?做啥的!
    • $ ros::Subscriber<std_msgs::UInt16> sub(“servo", servo_cb);
    • 申請 Topic “sub" 回來存成 “servo" 丟給 “servo_cb" 處理
  5. 配合 Arduino 語法設定
    1. Setup
      • $ nh.initNode();
      • $ nh.subscribe(sub);
    2. Loop 加入 ROS 指令確保持續運作 Node
      • nh.spinOnce();

TEST:

$ roscore

$ rosrun rosserial_python serial_node.py _port:=/dev/ttyACM0

$ rostopic pub servo std_msgs/UInt16 <angle>

廣告
本篇發表於 未分類 並標籤為 , , 。將永久鏈結加入書籤。

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

w

連結到 %s