Skip to content

Simulator on Unity + AGX Dynamics communicating with ROS

License

Notifications You must be signed in to change notification settings

pwri-opera/OperaSim-AGX

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

53 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OperaSim-AGX

Simulator on Unity + AGX Dynamics communicating with ROS

概要

  • 油圧ショベル, クローラダンプ, ブルドーザと土砂の挙動を再現したシミュレータである
  • Unityを使用する. 物理エンジンはAGX Dynamicsを使用する
    • 本シミュレータを実行する場合, Unity, AGX Dynamicsライセンスが必要である
  • ROSメッセージを使って本シミュレータの建設機械を制御可能である
  • 本シミュレータから建設機械の情報(関節の角度など)を含んだROSメッセージを受信可能である
  • ROSメッセージの送受信にROS-TCP-Connectorを使用する

ソフトウェア要件

  • Unity:2022.3.16f1
  • AGX:2.37.3.0(X64 VS2022)
    • AGX (Core)
    • Particles
    • Granular
    • Terrain
    • Tracks

Unityで使用するパッケージ

初回プロジェクト読み込み時に自動的に追加される.
(もしも追加されなかった場合は手動で追加すること)

実行方法

  • Unity Hubより, 本プロジェクトファイル(OperaSim-AGX)を追加

  • 追加されたプロジェクトのタイトルを押し, Unity Editorで開く

  • 建設機械のモデルが表示されていない場合には, プロジェクトウィンドウからAssets/Scenes/MainScene.unityをダブルクリックしてロードする

  • Assets/AGXUnity/Plugins/x86_64のフォルダへAGX Dynamicsのライセンスファイルをコピー&ペースト

  • RoboticsタブからROS Settingを開き、ROS TCP Endpointで接続するPCのIPアドレスおよびポート番号を入力する

  • Playボタンを押してシミュレーションを実行

ROS通信

com3_rosで定義している独自のメッセージ型を使用している. メッセージ型の実装ははAssets/RosMessages/msgフォルダ内のソースコードに記載している.

油圧ショベル

ROS >> Unity

項目 トピック名 メッセージ型 備考
フロント
(ブーム, アーム, バケット, 旋回)
動作指令
/車体名/front_cmd com3_ros/msg/JointCmd 以下の順に指令値を格納すること
0: bucket_joint
1: arm_joint
2: boom_joint
3: swing_joint
左右クローラへの動作指令 /車体名/track_cmd com3_ros/msg/JointCmd 以下の順に指令値を格納すること
0: left_track
1: right_track
車両中心の
並進移動速度/回転速度指令
/車体名/cmd_vel Geometry_msg/msg/Twist -
非常停止 /車体名/emg_stop_cmd std_msgs/msg/Bool true: その場で停止

Unity >> ROS

項目 トピック名 メッセージ型 備考
各関節の角度, 角速度 /車体名/joint_state sensor_msgs/msg/JointState 以下の順で情報が格納される
0: bucket_joint
1: arm_joint
2: boom_joint
3: swing_joint
4: right_track_joint
5: left_track_joint
ローカル座標系における車両の中心姿勢 /車体名/odom_pose nav_msgs/msg/Odometry -
グローバル座標(平面直角座標)系における車両の中心姿勢 /車体名/global_pose nav_msgs/msg/Odometry -
油圧アクチュエータのメイン圧力 /車体名/main_fluid_pressure com3_ros/sensor_msgs/FluidPressure 以下の順で情報が格納される
0: boom_up_main_pressure
1: boom_down_main_pressure
2: arm_crowd_main_pressure
3: arm_dump_main_pressure
4: bucket_crowd_main_pressure
5: bucket_dump_main_pressure
6: swing_right_main_pressure
7: swing_left_main_pressure
8: right_track_forward_main_prs
9: right_track_backward_main_prs
10: "left_track_forward_main_prs
11: left_track_backward_main_prs
12: attachment_a_main_pressure
13: attachment_b_main_pressure
14: assist_a_main_pressure
15: assist_b_main_pressure
油圧アクチュエータのパイロット圧力 /車体名/main_fluid_pressure com3_ros/sensor_msgs/FluidPressure 以下の順で情報が格納される
0: boom_up_pilot_pressure
1: boom_down_pilot_pressure
2: arm_crowd_pilot_pressure
3: arm_dump_pilot_pressure
4: bucket_crowd_pilot_pressure
5: bucket_dump_pilot_pressure
6: swing_right_pilot_pressure
7: swing_left_pilot_pressure
8: right_track_forward_pilot_prs
9: right_track_backward_pilot_prs
10: "left_track_forward_pilot_prs
11: left_track_backward_pilot_prs
12: attachment_a_pilot_pressure
13: attachment_b_pilot_pressure
14: assist_a_pilot_pressure
15: assist_b_pilot_pressure
上部構造体の旋回角度 /車体名/upper_body_rot sensor_msggs/msg/Imu -
バケット内土量 /車体名/soil_volume std_msg/msg/Float64 -

クローラダンプ

ROS >> Unity

項目 トピック名 メッセージ型 備考
旋回, ダンプの動作指令 /車体名/rot_dump_cmd com3_ros/msg/JointCmd 以下の順で指令値を格納すること
0: rotate_joint
1: dump_joint
左右クローラへの動作指令 /車体名/track_cmd com3_ros/msg/JointCmd 以下の順で指令値を格納すること
0: right_track
1: left_track
走行ボリュームの動作指令 /車体名/track_volume_cmd com3_ros/msg/JointCmd 以下の順で指令値を格納すること
0: forward_volume
1: turn_volume
それぞれのeffortに-1.0~1.0の値を設定する.
車両中心の
並進移動速度/回転速度指令
/車体名/cmd_vel Geometry_msg/msg/Twist -
非常停止 /車体名/emg_stop_cmd std_msgs/msg/Bool true: その場で停止

Unity >> ROS

項目 トピック名 メッセージ型 備考
各関節の角度, 角速度 /車体名/joint_state sensor_msgs/msg/JointState 以下の順で情報が格納される
0: rotate_joint
1: dump_joint
2: right_track_joint
3: left_track_joint
ローカル座標系における車両の中心姿勢 /車体名/odom_pose nav_msgs/msg/Odometry -
グローバル座標(平面直角座標)系における車両の中心姿勢 /車体名/global_pose nav_msgs/msg/Odometry -
油圧アクチュエータのメイン圧力 /車体名/main_fluid_pressure com3_ros/sensor_msgs/FluidPressure -
油圧アクチュエータのパイロット圧力 /車体名/main_fluid_pressure com3_ros/sensor_msgs/FluidPressure -
上部構造体の旋回角度 /車体名/upper_body_rot sensor_msggs/msg/Imu -
バケット内土量 /車体名/soil_volume std_msg/msg/Float64 -

ブルドーザ

ROS >> Unity

項目 トピック名 メッセージ型 備考
ブレード
(リフト, チルト, アングル)
動作指令
/車体名/blade_cmd com3_ros/msg/JointCmd 配列に以下の順に指令値を格納すること
0: lift_joint
1: tilt_joint
2: angle_joint
左右クローラへの動作指令 /車体名/track_cmd com3_ros/msg/JointCmd 配列に以下の順に指令値を格納すること
0: right_track
1: left_track
車両中心の
並進移動速度/回転速度指令
/車体名/cmd_vel Geometry_msg/msg/Twist -
非常停止 /車体名/emg_stop_cmd std_msgs/msg/Bool true: その場で停止

Unity >> ROS

項目 トピック名 メッセージ型 備考
各関節の角度, 角速度 /車体名/joint_state sensor_msgs/msg/JointState 以下の順で情報が格納される
0: lift_joint
1: tilt_joint
2: angle_joint
3: right_track_joint
4: left_track_joint
ローカル座標系における車両の中心姿勢 /車体名/odom_pose nav_msgs/msg/Odometry -
グローバル座標(平面直角座標)系における車両の中心姿勢 /車体名/global_pose nav_msgs/msg/Odometry -
油圧アクチュエータのメイン圧力 /車体名/main_fluid_pressure com3_ros/sensor_msgs/FluidPressure 以下の順で情報が格納される
0: lift_up_main_pressure
1: lift_down_main_pressure
2: tilt_forward_main_pressure
3: tilt_back_main_pressure
4: angle_right_main_pressure
5: angle_left_main_pressure
油圧アクチュエータのパイロット圧力 /車体名/main_fluid_pressure com3_ros/sensor_msgs/FluidPressure 以下の順で情報が格納される
0: lift_up_pilot_pressure
1: lift_down_pilot_pressure
2: tilt_forward_pilot_pressure
3: tilt_back_pilot_pressure
4: angle_right_pilot_pressure
5: angle_left_pilot_pressure
上部構造体の旋回角度 /車体名/upper_body_rot sensor_msggs/msg/Imu -

備考

  • Pub/Sub方式で通信
  • 上記表のトピック名にある「車体名」は建設機械モデルの名称で置き換えること
    • より具体的には,各建設機械モデルのルートのゲームオブジェクト名

オプション

指令値の設定

建設機械モデルはROS通信でROSからの指令によって動作する. 指令には次の3種類がある.

Movement Control Type

項目 説明
Actuator Command 建設機械の各関節それぞれに対して直接動作指令を行う
Twist Command 建設機械の移動速度,旋回速度を指定する
Volume Command 建設機械の移動速度,旋回速度を比率(-1.0~1.0)で指定する

Actuator Commandには次の3種類のオプションがある.

Control Type

項目 説明
Position 関節の角度の変化量を入力する
Speed 関節が移動する角速度を入力する
Force 関節が接続しているパーツに対して発生する力を入力する

建設機械モデルがどのパターンで入力を受け取るか,各モデルのインスペクタで設定できる.

  1. HierarchyビューでMACHINESに配置されている建設機械モデルを選択
  2. ???Inputという名前のスクリプトがアタッチされていることを確認する.???には建設機械のモデル名(Excavator, Dumptruck, Bulldozer)が入る
  3. Movement Control Typeを選択する
  4. Control Typeを選択する

なお,建設機械モデルごとに下記の入力パターンに対応している. 対応しているパターンについては,具体的なトピック名も記載した.

モデル パターン 対応状況 トピック名
油圧ショベル Actuator Command 対応 /車体名/front_cmd
/車体名/track_cmd
油圧ショベル Twist Command 対応 /車体名/cmd_vel
油圧ショベル Volume Command 未対応 -
クローラダンプ Actuator Command 対応 /車体名/rot_dump_cmd
/車体名/track_cmd
クローラダンプ Twist Command 対応 /車体名/cmd_vel
クローラダンプ Volume Command 対応 /車体名/track_volume_cmd
ブルドーザ Actuator Command 対応 /車体名/blade_cmd
/車体名/track_cmd
ブルドーザ Twist Command 対応 /車体名/cmd_vel
ブルドーザ Volume Command 未対応 -

About

Simulator on Unity + AGX Dynamics communicating with ROS

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published