ROS学習ノート12:gazeboを使用してROSでシミュレーション

10722 ワード

ROSシステムで私たちのロボットをシミュレーションするにはgazeboが必要です.
gazeboは複雑な室内マルチロボットと屋外環境に適したシミュレーション環境である.3 D環境で複数のロボット、センサ、および物体をシミュレーションし、実際のセンサフィードバックと物体間の物理的応答を生成することができる.
本稿では、以前に作成したロボットモデルをどのように使用するか、レーザレーダーセンサとカメラをロードし、ロボットモデルを本物のロボットのように移動するかを学びます.
一、gazeboでURDF 3 Dモデルを使用する
Gazeboが動作する前に、ROS機能パッケージをインストールしてgazeboと対話する必要があります.
$ sudo apt-get install ros-indigo-gazebo-ros-pkgs ros-indigo-ros-control

Gazeboにロボットモデルをインポートするには、まずURDFモデルを完了する必要があります.ここでは.xacroファイルを使用します.これはもっと複雑かもしれませんが、コード開発にとって非常に強力です.chapter 7でtutorials/robot1_description/urdf/robot1_base_01.xacro修正後のファイルを見つけました:(コードが多すぎるため、完全に貼られていません.以下はコードの一部にすぎません)

    
        
            
        
        
        
            
        
    
    
        
            
        
    
    

これはロボットシャーシbase_linkの新しいコード.ロボットの物理的応答を計算するには、collisionセクションとinertialセクションがgazeboでモデルを実行するために必要であることに注意してください.
これを起動するには、gazebo.launchという起動ファイルをchapter 7に作成します.tutorials/robot1_gazebo/launchフォルダの下に、次のコードを追加します.



  
  
  
  
  
  

  
    
     
    
    
    
    
    
  

  
  
  

  
    


ファイルを起動するには、次のコマンドを使用します.
$ roslaunch robot1_gazebo gazebo.launch model:="`rospack find robot1_description`/urdf/robot1_base_01.xacro"

そしてgazeboでロボットが見えます.シミュレーションの初期状態は一時停止しており、palyをクリックして実行できます.(ただしロボットは動かない)
ご覧のように、モデルにはテクスチャレンダリングはありません.rvizではURDFファイルで宣言されたテクスチャが表示されます.しかしgazeboでは見えませんgazeboに可視テクスチャを追加するには、.gazeboモデルファイルにrobot.gazeboファイルを作成する必要があります.robot 1_description/urdf/robot1_base_01.xacroファイルをrobot 1_として保存base_02.xacro、robot.gazeboファイルを作成するには、次のコードを追加します.

この新しいファイルを起動すると、ロボットは同じですが、テクスチャが付いています.
$ roslaunch robot1_gazebo gazebo.launch model:="`rospack find robot1_description`/urdf/robot1_base_02.xacro"

次の出力が表示されます.
二、gazeboにセンサーを追加する
gazeboでは、ロボットの物理的な動きをシミュレーションすることができます.同じようにセンサーをシミュレートすることができます
このセクションでは、モデルにカメラとレーザレーダセンサを追加します.
ガゼボからros_demos機能パケットでレーザレーダを呼び出す.これはROSの不思議な点で、他の機能パッケージからコードを多重化して開発を簡素化することができます.
私たちが唯一しなければならないのはrobot 1_base_02.xacroファイルにこれらの行を追加し、ロボットにHokuyoレーザレーダー3 Dモデルを追加し、robot 1_として保存するbase_03.xacroファイル:
  
  
    
      
      
    
      
    

    
      
      
        
      
    

    
      
      
      
    
  

robot.gazeboファイルにlibgazeboを追加します.ros_Laserプラグインは,Hokuyoレーザ測距レーダの挙動をシミュレートできる.
  
  
    
      0 0 0 0 0 0
      false
      40
      
        
          
            720
            1
            -1.570796
            1.570796
          
        
        
          0.10
          30.0
          0.01
        
        
          gaussian
          
          0.0
          0.01
        
      
      
        /scan
        hokuyo_link
      
    
  

次のコマンドを使用して、新しいモデルを起動します.
$ roslaunch robot1_gazebo gazebo.launch model:="`rospack find robot1_description`/urdf/robot1_base_03.xacro"

レーザーレーダーモジュール付きロボットが見えます.
同じ方法でrobot.gazeboとrobot 1_にbase_03.xacroは、別のセンサ(カメラ)を追加するために数行のコードを追加します.
次のコマンドを使用して、カメラを追加したモデルを起動します.
$ roslaunch robot1_gazebo gazebo.launch model:="`rospack find robot1_description`/urdf/robot1_base_04.xacro"

このレーザレーダーは、実際のレーダーのように「真実」のセンサデータを生成します.rostopic echoコマンドでこれらのデータを見ることができます.
$ rostopic echo /robot/laser/scan

カメラに同じコマンドを発行できますが、カメラが見たgazeboシミュレーション画像を観察したい場合は、端末に次のコマンドを書き込むことができます.
$ rosrun image_view image_view image:=/robot/camera1/image_raw

以下は「プレイ」をクリックしてカメラで撮影できる画像です.
三、gazeboに地図をロードして使用する
このセクションでは、柳の車庫会社(Willow Garage)のオフィスの地図を使用します.この地図は、ROSソフトウェアでデフォルトでインストールされ、gazebo_worlds機能パッケージに保存されているはずです.
モデルを確認するには、次のコマンドを使用して.launchファイルを起動します.
$ roslaunch gazebo_ros willowgarage_world.launch

gazeboには3 Dのオフィスが見えます.このオフィスには壁しかありません.テーブル、椅子、他の追加したいものを追加することができます.
地図とロボットを同時にロードする新しい.launchファイルを作成します.この機能を実現するために、robot 1_gazebo/launchフォルダの下にgazebo_wg.launchというファイルを作成し、次のコードを追加します.


  
  

  
  
  

  
   


ロボット付きの地図モデルファイルを実行します(注意:ソフトウェアのクラッシュが発生する場合があります.何回か実行してみてください):
$ roslaunch robot1_gazebo gazebo_wg.launch 

ロボットと地図がgazeboに表示されます.次は、シミュレーション仮想環境でロボットにセンサのシミュレーション読み取りを移動および受け入れるように命令します.
四、gazeboでロボットを移動する
スライドステアリングロボットは、機体の両側車輪をそれぞれ駆動する移動ロボットで、両側車輪を異なる回転数(発生した回転数差)に制御することによってステアリングを行い、車輪のステアリング行動を必要としない.
前述したように、gazeboではロボット、関節、センサーなどの動作をプログラミングする必要があります.前のレーザーレーダーと同様に、gazebもskid駆動の実装があり、ロボットを直接動かすことができます.この走行コントローラを使用するには、モデルファイル(robot 1_base_04.xacro)に以下のコードを追加するだけです.
  

  
    100.0
    /
    base_to_wheel1
    base_to_wheel3
    base_to_wheel2
    base_to_wheel4
    4
    0.1
    base_link
    1
    cmd_vel
    0
  

コードに表示されるパラメータは、このコントローラが4つのホイールのロボット動作をサポートできるように簡単な構成です.たとえば、base_to_wheel 1、base_to_wheel 2、base_to_wheel 3、base_to_wheel 4ジョイントをロボットの駆動ホイールとして選択します.
もう1つの興味深いパラメータはtopicNameです.このパラメータという名前でコマンドを発行してロボットを制御する必要があります.この場合、sensor_msgs/Twistトピックコール/cmd_velを発行すると、ロボットが移動します.ホイールジョイントを正しく配置する方向は非常に重要で、xacroファイルの現在の方向に従ってロボットが上下に移動するため、4つの変更が必要ですホイールの初期rpyは、次のコードのbase linkおよびwheel 1ジョイントなどです.
 
   
   
   
   
 

すべての変更はchapter 7_tutorials/robot 1_description/urdf/robot 1_base_04.xacroファイルに保存されます.コントローラ、ロボット、地図を持つモデルを起動するには、次のコマンドを使用します.
$ roslaunch robot1_gazebo gazebo_wg.launch

Gazebo画面にロボットが地図上に表示されます.キーボードを使用して地図内のロボットを移動します.このノードはteleop_twist_keyboardパッケージで/cmd_velトピックをパブリッシュします.次のコマンドを実行して、このパッケージに従います.
$ sudo apt-get install ros-indigo-teleop-twist-keyboard
$ rosstack profile
$ rospack profile

次に、実行ノードは次のようになります.
$ rosrun teleop_twist_keyboard teleop_twist_keyboard.py 

多くの説明がある新しいコマンドラインウィンドウが表示されます.(u,i,o,j,k,l,m,",,,,".")ボタンを使用してロボットを移動し、最大速度を設定できます.(現在、uキーは加速、jキーは左折、kキーは減速、lキーは右折)
うまくいけば、ロボットを運転してWillow Garageのオフィスを通り抜けることができます.レーザーレーダーのデータとカメラに表示される画像を観察することができます.
五、小節
本稿では、独自の3 Dロボットモデルを作成する方法を学びました.これには、テクスチャの追加、ジョイントの作成、ノードを使用してロボットを移動する方法などの詳細な説明が含まれています.
概要としては、他のロボットの部品を多重化して独自のロボットを設計する方法を見ました.特に、レーザレーダーやカメラなどのセンサを搭載しています.
そのため、シミュレーションではロボットを完全に無から有に構築する必要はありません.コミュニティでは多くのロボットが開発されています.コードをダウンロードしてROSやgazeboで実行することができます.必要に応じて修正することもできます.
転載先:https://www.cnblogs.com/linuxAndMcu/p/10876005.html