ROSとRaspberry Piとタミヤのカムロボットでラジコンを作ろう[モータ駆動編]

ROS

2020/03/11 に記事の内容を変更しました.

  • pigpio.yamlの廃止
  • wheels_listenerの追加
  • L298NとTB6612の両タイプのモータドライバに対応
  • test_run の廃止
  • rostopic pub での操作を追加

前回はモータを動かすための回路を組みました. 今回はROSを立ち上げてモータを動かします.

Build (catkin_make)

Raspberry Piを起動し, 本プロジェクトをcatkin_wsにダウンロードしビルドします.

cd ~/catkin_ws/src
git clone git@github.com:botamochi6277/tamiya_cam_robot.git
cd ~/catkin_ws
catkin_make

続いて, GPIOを操作するためにpigpioというライブラリをインストールします, 次のコマンドを実行してください.

sudo apt-get update
sudo apt-get install pigpio python-pigpio python3-pigpio

ROSは基本的にrootで実行できません. 一方で, Raspberry PiのGPIOはrootでないと操作できません.
そこで, rootでpigpiodというデーモンを次のコマンドで立ち上げてRaspberry PiのGPIOの操作をお任せします.

sudo pigpiod

Establish Listener

クローラーを動かすためのrosnodeとしてwheels_listenerを立ち上げます. Maker Driveの配線を変えていない場合は次のコマンドを実行してください.

  • Maker Drive (L298N), 初期配線 ( _AIN1:=17 _AIN2:=18 _BIN1:=27 _BIN2:=22)
rosrun tamiya_cam_robot wheels_listener
  • Maker Drive (L298N), 配線の変更

配線を変更した場合は次のようにwheels_listenerに新しい接続先を渡してください.

rosrun tamiya_cam_robot wheels_listener _AIN1:=17 _AIN2:=18 _BIN1:=27 _BIN2:=21
  • TB6612

TB6612を使用する場合はwheels_listenerに接続先を渡してください.wheels_listener_PWMA, _PWMBの有無でモータードライバを切り替えています.

rosrun tamiya_cam_robot wheels_listener _AIN1:=22 _AIN2:=27 _PWMA:=17 _BIN1:=13 _BIN2:=19 _PWMB:=26

wheels_listenergeometry_msgs/Twistという型の /tamiya1/cmd_vel という名前のトピックをSubscribeしています.turtle_simを使ったことのある人なら馴染みのある形式です.wheels_listener ではTwist.linear.xとTwist.angular.zがそれぞれ並進方向と旋回方向のモーターのパワー (-1.0 — 1.0)を表しています.

Publish Motor Command

wheels_listenerにトピックを送ってモーターを動かします.新しいターミナルを開いて,次のコマンドのどれかを実行してください.「前進のコマンドを打ったのに右旋回した」といったことが起こった場合は配線を間違えている可能性が高いので,再チェックしてください.

  • Forward,前進
rostopic pub -1 /tamiya1/cmd_vel geometry_msgs/Twist  '{linear:  {x: 0.5, y: 0.0, z: 0.0}, angular: {x: 0.0,y: 0.0,z: 0.0}}'
  • Backward,後退
rostopic pub -1 /tamiya1/cmd_vel geometry_msgs/Twist  '{linear:  {x: -0.5, y: 0.0, z: 0.0}, angular: {x: 0.0,y: 0.0,z: 0.0}}'
  • Turn Right (Clockwise),右旋回
rostopic pub -1 /tamiya1/cmd_vel geometry_msgs/Twist  '{linear:  {x: 0.0, y: 0.0, z: 0.0}, angular: {x: 0.0,y: 0.0,z: -0.5}}'
  • Turn Left (Counterclockwise),左旋回
rostopic pub -1 /tamiya1/cmd_vel geometry_msgs/Twist  '{linear:  {x: 0.0, y: 0.0, z: 0.0}, angular: {x: 0.0,y: 0.0,z: 0.5}}'
  • Stop
rostopic pub -1 /tamiya1/cmd_vel geometry_msgs/Twist  '{linear:  {x: 0.0, y: 0.0, z: 0.0}, angular: {x: 0.0,y: 0.0,z: 0.0}}'

モータが正常に動いたら, ロボットを組み立てていきましょう.
組み立て例は次の通りです.

ロボットを組み立てた状態でモータを動かすと下の動画のようになります.

次は, カムロボにカメラを取り付けて遠隔操作できるように組み立てていきます.

コメント

  1. 通りすがりの質問者 より:

    ubiquityのrosイメージを使い、pigpioを使っているのですがGPIOを使うとconnection closed by remote hostのエラーが出るのですが心当たりはありませんか?

    • botamochi6277 より:

      私の場合はこちらのエラーが出たことはありませんが, pigpioでよくあるのは sudo pigpiod を実行し忘れていることですね.
      ただ, “connection closed by remote host”はsshで”sudo shutdown”した時に出てくるメッセージです.
      したがってsshでログインしているのであれば, sshを使わずに直接操作してみるのもいいと思います.