ROS + gazebo環境でオムニホイールロボットを動かしてみる

Robot

前回の記事で,gazebo環境でのオムニホイールロボットのシミュレーションを行いました.本記事では,ROS + gazebo環境でシミュレーションを行っていきます!

それにしてもROSの基本動作の理解にかなり時間がかかりました.このチュートリアルが結構参考になりました.

ROS上でオムニホイールロボットのシミュレーション環境を構築

私の環境は以下です.

  • OS: Ubuntu 18.04
  • ROS: Melodic
  • Gazebo: gazebo 9

例によって,このサイトのオムニホイールロボットのソースコードを使用させていただきます.MIT Licenseでライセンスフリーです.

まずは上記サイトのリポジトリをクローンします.

$ mkdir -p ~/work
$ cd ~/work
$ git clone https://github.com/GuiRitter/OpenBase.git

つぎに,ワークスペースを作成します.catkinのインストールの仕方はこちらを参照していただければと思います.

$ mkdir -p ~/catkin_ws
$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/src
$ catkin_init_workspace

open_baseのソースコードをcatkin_ws/srcに移動してから,ビルドとsourceコマンドを実行してください.

$ cp -r ~/work/OpenBase/ROS/open_base ~/catkin_ws/src/
$ cd ~/catkin_ws
$ catkin_make
$ source devel/setup.bash

最後に,以下のROSのパッケージをインストールします.<version>の部分は適宜使っているROSのバージョンに変えてください.私の場合は,melodicに変更しました.

sudo apt-get install ros-<version>-effort-controllers
sudo apt-get install ros-<version>-joint-state-controller
sudo apt-get install ros-<version>-position-controllers

後述するトラブルシューティングで,effort-controllersのインストールに失敗した話を書いておきました.

ROS + gazebo環境でオムニホイールを動かしてみる

では,実際に動かしてみます.

ターミナルを2つ開き,両方のターミナルで以下を実行してください.

$ source ~/catkin_ws/devel/setup.bash

片方のターミナルで以下を実行します.

$ roslaunch open_base velocity\ controller.launch

左下の三角ボタン(Playボタン)を押します.

もう片方のターミナルで以下のようなコマンドを実行します.rostopic pub /open/commandまで入力したらタブ補完して,必要なパラメータを変えるようにしましょう.

$ rostopic pub /open_base/command open_base/Movement "movement: 0
wheel:
v_left: 0.0
v_back: 0.0
v_right: 0.0
generic:
type: 0
frame: 0
target:
x: 0.0
y: 0.0
theta: 0.0
bezier:
frame: 0
targetTranslation:
{x: 0.5, y: 0.5, theta: 0.0}
targetRotation: [0]
step: 0.0
offsetTraslation: false
offsetRotation: false"

(x, y) = (0.5, 0.5) の座標にオムニホイールロボットが移動しました.

動作させたときの動画は以下です.(x, y) = (0.5, 0.5) あたりに移動しています.

ちなみに,上記のコマンド群は以下のように設定するようです.

movement0ベジェ曲線
1generic movement
3車輪の回転スピード
generic – type0絶対位置
1相対位置
2速度
generic – frame0hybrid
1mobile (機械座標系)
2raw mobile
3world (ワールド座標系)
generic – target目標位置 or 目標速度

あんまりgeneric – frameの設定方法がわかりませんが…(hybridって何?).以下,原文です.

・movement: 0 for Bézier curve; 1 for generic movement (see below); 2 for none; 3 for wheel speed.
 ・generic:
  ・type: 0 for absolute position; 1 for relative position; 2 for velocity (linear and angular).
  ・frame: 0 for hybrid; 1 for mobile; 2 for raw mobile; 3 for world.
  ・target: desired position in (x, y, θ) or desired velocity in (vx, vy, vθ).

https://github.com/GuiRitter/OpenBase

他にもいくつかの動かし方があるらしく,本家のサイトで紹介されているので.そちらもご覧いただければと思います.

トラブルシューティング

effort controllersのインストールに失敗した

Before using it, you’ll need to install some packages. These are more than you need, but it doesn’t hurt to install them all. Replace <version> by your ROS version, e.g. indigo, kinetic, lunar, etc.

sudo apt-get install ros-<version>-effort-controllers
sudo apt-get install ros-<version>-joint-state-controller
sudo apt-get install ros-<version>-position-controllers

https://github.com/GuiRitter/OpenBase

上記手順で,effort controllersがインストールできなかったので,このサイトの方法を参考に以下を実行してからインストールするとうまくいきました.

$ sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
$ sudo apt update

turtlebotをROS環境で動かしてみたら,anacondaと競合してエラーした

※本節は自分用のメモであり,表題の内容とはあまり関係ありません.

turtlebotを使ったROS環境の構築を参考にしてみようと思い,このサイトを参考にやってみることにしました.rvizでturtlebotを表示しようとして以下のようなエラーが発生したのでググってみると,anacondaをインストールしていると,うまくいかないみたいです.

$ roslaunch turtlebot3_fake turtlebot3_fake.launch
… logging to /home/renma/.ros/log/e24c9e60-2be1-11eb-b37a-f48c50b871f8/roslaunch-renma-ThinkPad-T460s-32357.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

xacro: in-order processing became default in ROS Melodic. You can drop the option.
substitution args not supported: No module named 'rospkg'
when processing file: /home/renma/catkin_ws/src/turtlebot3/turtlebot3_description/urdf/turtlebot3_burger.urdf.xacro
RLException: while processing /home/renma/catkin_ws/src/turtlebot3/turtlebot3_bringup/launch/includes/description.launch.xml:
Invalid tag: Cannot load command parameter [robot_description]: command [/opt/ros/melodic/lib/xacro/xacro --inorder '/home/renma/catkin_ws/src/turtlebot3/turtlebot3_description/urdf/turtlebot3_burger.urdf.xacro'] returned with code [2].
Param xml is

The traceback for the exception was written to the log file

このサイトを参考に以下を実行したところ,うまく動くようになりました.

$ conda install -c conda-forge rospkg

無事turtlebotが表示されました.

/opt/ros/melodic/share/turtle_tfの中にturtlebot関連のファイルが入っていたことから,/opt/ros/melodic/share/配下にopen_baseディレクトリを置けばよいと推測し,上記パスにopen_baseを置いたところ一応動作しました.
(catkin_ws環境下でopen_baseをビルドをしなくても,/opt/ros/melodic/share/に移動すれば,たとえば以下のコマンドは動きました.)

rostopic pub /open_base/right_joint_velocy_controller/command std_msgs/Float64 "data: 5.0"

コメント