ROSとRaspberry Piとタミヤのカムロボットでラジコンを作ろう[遠隔操作編]

ROS

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

  • pigpio.yamlの廃止
  • wheels_listenerの追加
  • L298NとTB6612の両タイプのモータドライバに対応
  • teleop.launchの廃止
  • teleop.html から teleop_twist.html へ変更 (暫定的, 旧teleop.htmlを削除する可能性あり)

前回はROSを使ったモータのテストを行いました. 今回はいよいよロボットを遠隔操作していきます.

Obtain Camera Image with Web Browser

遠隔操作をする前に, カメラのテストを行います.
初めにカメラ用(+遠隔操作用)のパッケージをダウンロードしてビルドします.

cd ~/catkin_ws/src
sudo apt-get install ros-kinetic-uvc-camera
sudo apt-get install ros-kinetic-roswww
sudo apt-get install ros-kinetic-rosbridge-suite
git clone https://github.com/RobotWebTools/web_video_server.git
git clone https://github.com/GT-RAIL/async_web_server_cpp.git
cd ../
catkin_make

次にカメラ画像のトピックを飛ばします.

rosrun uvc_camera uvc_camera_node

別のターミナルを開いてトピックの一覧を見ます.

rostopic list

この時,次のようにトピック一覧が出てきます.

/camera_info
/image_raw
/image_raw/compressed
/image_raw/compressed/parameter_descriptions
/image_raw/compressed/parameter_updates
/image_raw/compressedDepth
/image_raw/compressedDepth/parameter_descriptions
/image_raw/compressedDepth/parameter_updates
/image_raw/theora
/image_raw/theora/parameter_descriptions
/image_raw/theora/parameter_updates

ここでは/image_rawをブラウザに表示させるために,配信サーバを立ち上げます.
別のターミナルを開いて, 次のコマンドを実行してください.

rosrun web_video_server web_video_server

この状態で
http://[RaspberryPiのIPアドレス]:8080/stream?topic=/image_rawにブラウザでアクセスすると画像を確認できます.

RaspberryPi自身からはhttp://localhost:8080/stream?topic=/image_rawからもアクセスできます.

Teleoperation

ここまでで, 遠隔操作をする準備ができました.モータードライバに合わせて,launchファイルを起動します.電気回路編の配線から変更している場合は,それぞれのlaunchファイルを編集して,ピンを指定してください.

  • L298N の場合
roslaunch tamiya_cam_robot teleop_L298N.launch
  • TB6612 の場合
roslaunch tamiya_cam_robot teleop_tb6612.launch

teleop_L298N.launchteleop_tb6612.launchはROSと連携するWebサーバーを立ち上げます.

この状態でhttp://[RaspberryPiのIPアドレス]:8085/tamiya_cam_robot/teleop_twist.htmlにブラウザからアクセスします.
すると, 下の画面のように遠隔操作用のページが表示されます. 左側がカメラが取得した画像,右が操作用の十字キーもどきです. 右下の画像は後から合成したロボットの様子になります(時間的には完全に同期していません,動画は旧ノードを使った時のものですが,操作は変わっていません).
ボタンを押すと tamiya1/cmd_velwheels_listenerへPublishされます.

コメント

タイトルとURLをコピーしました