# ROSのグラフィックスと視覚化 --- ## グラフィカルインターフェイス rqt Qtライブラリに基づいたユーザーインターフェイス(GUI) - インターフェースはカスタマイズおよび拡張できます - 多くのプラグインがあります - 独自のプラグインの作成は可能 - 一部のプラグインは`rqt`を起動せず、別のコマンドで直接実行できます(例えば、先週学習した`rqt_graph`や以下の`rqt_image_view`など) 使い方 ```bash rosrun rqt_gui rqt_gui ``` あるいは単に ```bash rqt ``` --- ### 例:画像の表示 ```bash rqt_image_view ``` <img src="./v2_media/rqt_image_view.png" alt="" style="width: 30%;"/> --- ### 例:メッセージ値を経時的にプロットする(2時限プロット) ```bash rqt_plot ``` <img src="./v2_media/rqt_plot.png" alt="" style="width: 40%;"/> --- #### turtlesimで試してみよう まず、turtlesimを起動してください。 ```bash roscore ``` ```bash rosrun turtlesim turtlesim_node ``` ```bash rosrun turtlesim turtle_teleop_key ``` 次、`rqt_plot` を開いて、亀ロボットの位置のプロットを追加してください(Topicのところに /turtle1/pose と書いて、エンターを押す) --- ## RViz 多機能の3D視覚化ツール - トピックを購読し、メッセージの内容を視覚化する - インタラクティブツールを使用して情報を公開できる - 構成を保存して再読み込みできる - アドオンを作成することで拡張可能 実行方法 ```bash rosrun rviz rviz ``` あるいは単に ```bash rviz ``` --- ### レイアウト <img src="./v2_media/rviz.png" alt="" style="width: 90%;"/> --- ### 表示したいトピックを追加する <img src="./v2_media/rviz_add.png" alt="" style="width: 100%;"/> Addボタンを押して、現れたメニューからトピックタイプが選択可能 「By topic」タブでは現存のトピックの一覧がある(RVizで表示可能なものだけ) --- # シミュレーション --- ## Gazeboシミュレータについて 3Dシミュレーションツール - 独立したアプリケーションだが、ROSと接続可能 - 物理的シミュレーション - 3Dグラフィックディスプレイ - ロボットのセンサやアクチュエータのシミュレーション - ユーザーとのインタラクション - 事前定義されたロボットと環境が含まれています --- > まず、Gazeboのための環境変数を設定してください > > 以下のコマンドを一度だけ実行してください ```bash echo "export GAZEBO_RESOURCE_PATH=/usr/share/gazebo-11/" >> ~/.bashrc ``` > その後、全てのコンソールを一回閉じましょう --- ## Gazeboの実行 ### スタンドアロンアプリケーションとして ```bash gazebo ``` --- ### ROSから - 基本パッケージは `gazebo_ros` - 主なアプリケーション(ノード)とコマンド: - `gzserver` → シミュレータ自体 - `gzclient` → グラフィカルインターフェイスと視覚化 - `gazebo` = `gzserver` +` gzclient` - コマンド`spawn_model` → シミュレーション内にモデルの導入(以下で説明する) - 例えば ```bash rosrun gazebo_ros gazebo ``` https://gazebosim.org/tutorials?tut=ros_overview --- より簡単 → launchファイルを使用 (`empty_world.launch`) empty_world.launchの重要な引数: - `world_name` → シミュレーションするワールドまでのパス - `gui` → グラフィックインターフェイスを起動するか 例 ```bash roslaunch gazebo_ros empty_world.launch world_name:=worlds/pioneer2dx.world gui:=true ``` **注意**:ワールドを始めて開くときに、Gazeboが追加ファイルをダウンロードすることがあります。時々結構時間がかかります。起動するまで待ってください。 https://gazebosim.org/tutorials?tut=ros_roslaunch --- ## ワールド内にロボットを追加 主に以下の2つの方法があります。 1. ワールドファイル(.world)の中に含める - 上記の例のpioneer2dx.worldファイルはこの方法を使っています。Pioneer 2DX というロボットのシミュレーションです。 2. ロボットの形状の定義に基づいて、既存のシミュレーション内で作成 - コマンド`spawn_model`を使用する - 形状ファイルはいわゆるURDF形式を使っています `spawn_model`の使用例:先週の課題で使っていたturtlebot3ロボットのミュレーション ラウンチファイル turtlebot3_empty_world.launch の中身: ```xml <launch> <arg name="model" default="$(env TURTLEBOT3_MODEL)" doc="model type [burger, waffle, waffle_pi]"/> <arg name="x_pos" default="0.0"/> <arg name="y_pos" default="0.0"/> <arg name="z_pos" default="0.0"/> <include file="$(find gazebo_ros)/launch/empty_world.launch"> <arg name="world_name" value="$(find turtlebot3_gazebo)/worlds/empty.world"/> <arg name="paused" value="false"/> <arg name="use_sim_time" value="true"/> <arg name="gui" value="true"/> <arg name="headless" value="false"/> <arg name="debug" value="false"/> </include> <param name="robot_description" command="$(find xacro)/xacro --inorder $(find turtlebot3_description)/urdf/turtlebot3_$(arg model).urdf.xacro" /> <node pkg="gazebo_ros" type="spawn_model" name="spawn_urdf" args="-urdf -model turtlebot3_$(arg model) -x $(arg x_pos) -y $(arg y_pos) -z $(arg z_pos) -param robot_description" /> </launch> ``` → コマンド`spawn_model`の使い方に注目してください - include を使って gazebo_ros パッケージの empty_world.launch を含めている - turtlebot3_burger.urdf.xacro → ロボット形状の定義(URDF形式) # シミュレーションようのロボットモデル(任意) --- ## URDF *Unified Robot Description Format* - ロボットモデルを記述するためのXML形式: - 見た目 - 運動モデル(キネマティクスやダイナミクス)の定義 - 衝突検出モデル 例:視覚化のための3Dモデル <img src="./v2_media/urdf_visual.png" alt="" style="width: 35%;"/> 例:衝突検出モデル <img src="./v2_media/urdf_colision.png" alt="" style="width: 35%;"/> 詳細: https://wiki.ros.org/urdf https://wiki.ros.org/xacro --- → [実習その2](v2_2.html) ← [イントロ](v2_intro.html) ↑ [ホームページ](index.html)