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 https://github.com/botamochi6277/tamiya_cam_robot.git
cd ~/catkin_ws
catkin_make
続いて, GPIOを操作するためにpigpioというライブラリをインストールします, 次のコマンドを実行してください.
sudo apt update sudo apt install pigpio python-pigpio python3-pigpio
Ubuntu 18.04LTS, 20.04LTS では apt で 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_listener
はgeometry_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}}'
モータが正常に動いたら, ロボットを組み立てていきましょう.
組み立て例は次の通りです.
ロボットを組み立てた状態でモータを動かすと下の動画のようになります.
次は, カムロボにカメラを取り付けて遠隔操作できるように組み立てていきます.
コメント
ubiquityのrosイメージを使い、pigpioを使っているのですがGPIOを使うとconnection closed by remote hostのエラーが出るのですが心当たりはありませんか?
私の場合はこちらのエラーが出たことはありませんが, pigpioでよくあるのは sudo pigpiod を実行し忘れていることですね.
ただ, “connection closed by remote host”はsshで”sudo shutdown”した時に出てくるメッセージです.
したがってsshでログインしているのであれば, sshを使わずに直接操作してみるのもいいと思います.