前回の記事で,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) あたりに移動しています.
ちなみに,上記のコマンド群は以下のように設定するようです.
movement | 0 | ベジェ曲線 |
1 | generic movement | |
3 | 車輪の回転スピード | |
generic – type | 0 | 絶対位置 |
1 | 相対位置 | |
2 | 速度 | |
generic – frame | 0 | hybrid |
1 | mobile (機械座標系) | |
2 | raw mobile | |
3 | world (ワールド座標系) | |
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.
https://github.com/GuiRitter/OpenBase
・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θ).
他にもいくつかの動かし方があるらしく,本家のサイトで紹介されているので.そちらもご覧いただければと思います.
トラブルシューティング
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
https://github.com/GuiRitter/OpenBase
sudo apt-get install ros-<version>-joint-state-controller
sudo apt-get install ros-<version>-position-controllers
上記手順で,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"
コメント