PyBulletでURDF(Unified Robot Description Format) URDF解説編(3)
前回は既存のロボットモデルhumanoid.urdfの中身を見ていきました。
今回はオリジナルのモデルを作成してみます。
1.計画
某ロボットキットの写真を眺めながら、こんな図を書いてみました。某ロボットキッとは軸の位置、寸法はもちろん異なります。
可動軸の数は胴体1、脚6×2=12、手3×2=6、合計19です。
2.URDFファイル
とにかくわかる範囲で作ってみます。以下は現状の制限やら、注意点やら。
- URDFのファイル名に”-”(マイナス)を使うとPyBulletが読み込んでくれませんでした。
- jointにrevoluteを使っています。revoluteは<axis/>で回転軸を指定する他<limit/>で軸の可動範囲(lower、upper)、最大回転速度(velocity)、力(effort)等の制限を指定してあげる必要があるとのことなので(ROSのホームページ解説から)、後で見直すのを前提に適当に指定しています。
- linkの慣性モーメント(inertia)と質量(mass)も後で見直すのを前提に適当な値を入れています。
以下に作ったurdfファイルを添付します。上の図と見比べながら見ると理解しやすいと思います。
<?xml version="1.0"?>
<robot name="tr1">
<link name="base" >
<inertial>
<origin rpy = "0 0 0" xyz = "0 0 0" />
<mass value = "0.0001" />
<inertia ixx = "0.0001" ixy = "0" ixz = "0" iyy = "0.0001" iyz = "0" izz = "0.0001" />
</inertial>
</link>
<link name="root" >
<inertial>
<origin rpy = "0 0 0" xyz = "0.000 0.015 0.000" />
<mass value = "0.400" />
<inertia ixx = "0.02" ixy = "0" ixz = "0" iyy = "0.02" iyz = "0" izz = "0.02" />
</inertial>
<collision>
<origin rpy = "0 0 0" xyz = "0.000 0.015 0.000" />
<geometry>
<box size = "0.030 0.030 0.060" />
</geometry>
</collision>
</link>
<joint name="root" type="fixed" >
<parent link = "base" />
<child link = "root" />
<origin rpy = "0 0 0" xyz = "0.000 0.000 0.000" />
</joint>
<!-- chest -->
<link name="chest" >
<inertial>
<origin rpy = "0 0 0" xyz = "0.000 0.0325 0.000" />
<mass value = "0.400" />
<inertia ixx = "0.02" ixy = "0" ixz = "0" iyy = "0.02" iyz = "0" izz = "0.02" />
</inertial>
<collision>
<origin rpy = "0 0 0" xyz = "0.000 0.0325 0.000" />
<geometry>
<box size = "0.030 0.045 0.080" />
</geometry>
</collision>
</link>
<joint name="chest" type="revolute" >
<parent link = "root" />
<child link = "chest" />
<origin rpy = "0 0 0" xyz = "0.000 0.030 0.000" />
<axis xyz = "0 0 -1" />
<limit effort="10000.0" lower="0" upper="3.14" velocity="0.5"/>
</joint>
<!-- neck -->
<link name="neck" >
<inertial>
<origin rpy = "0 0 0" xyz = "0.000 0.025 0.000" />
<mass value = "0.050" />
<inertia ixx = "0.02" ixy = "0" ixz = "0" iyy = "0.02" iyz = "0" izz = "0.02" />
</inertial>
<collision>
<origin rpy = "0 0 0" xyz = "0.000 0.025 0.000" />
<geometry>
<sphere radius = "0.020" />
</geometry>
</collision>
</link>
<joint name="neck" type="fixed" >
<parent link = "chest" />
<child link = "neck" />
<origin rpy = "0 0 0" xyz = "0.000 0.060 0.000" />
</joint>
<!-- right foot -->
<link name="right_hip_tw" >
<inertial>
<origin rpy = "0 0 0" xyz = "0.000 -0.025 -0.0025" />
<mass value = "0.0001" />
<inertia ixx = "0.0001" ixy = "0" ixz = "0" iyy = "0.0001" iyz = "0" izz = "0.0001" />
</inertial>
<collision>
<origin rpy = "0 0 0" xyz = "0.000 -0.010 -0.0025" />
<geometry>
<box size = "0.030 0.002 0.025" />
</geometry>
</collision>
</link>
<joint name="right_hip_tw" type="revolute" >
<parent link = "root" />
<child link = "right_hip_tw" />
<origin rpy = "0 0 0" xyz = "0.000 0.000 0.020" />
<axis xyz = "0 -1 0" />
<limit effort="10000.0" lower="0" upper="3.14" velocity="0.5"/>
</joint>
<link name="right_hip_rl" >
<inertial>
<origin rpy = "0 0 0" xyz = "0.000 0.000 0.010" />
<mass value = "0.0001" />
<inertia ixx = "0.0001" ixy = "0" ixz = "0" iyy = "0.0001" iyz = "0" izz = "0.0001" />
</inertial>
<collision>
<origin rpy = "0 0 0" xyz = "0.000 0.000 0.010" />
<geometry>
<box size = "0.030 0.020 0.040" />
</geometry>
</collision>
</link>
<joint name="right_hip_rl" type="revolute" >
<parent link = "right_hip_tw" />
<child link = "right_hip_rl" />
<origin rpy = "0 0 0" xyz = "0.000 -0.030 -0.005" />
<axis xyz = "-1 0 0" />
<limit effort="10000.0" lower="-1.507" upper="1.507" velocity="0.5"/>
</joint>
<link name="right_hip_fb" >
<inertial>
<origin rpy = "0 0 0" xyz = "0.000 -0.0325 0.000" />
<mass value = "0.0001" />
<inertia ixx = "0.0001" ixy = "0" ixz = "0" iyy = "0.0001" iyz = "0" izz = "0.0001" />
</inertial>
<collision>
<origin rpy = "0 0 0" xyz = "0.000 -0.0325 0.000" />
<geometry>
<box size = "0.030 0.085 0.030" />
</geometry>
</collision>
</link>
<joint name="right_hip_fb" type="revolute" >
<parent link = "right_hip_rl" />
<child link = "right_hip_fb" />
<origin rpy = "0 0 0" xyz = "0.000 -0.025 0.010" />
<axis xyz = "0 0 1" />
<limit effort="10000.0" lower="-1.507" upper="1.507" velocity="0.5"/>
</joint>
<link name="right_knee_fb" >
<inertial>
<origin rpy = "0 0 0" xyz = "0.000 -0.040 0.000" />
<mass value = "0.0001" />
<inertia ixx = "0.0001" ixy = "0" ixz = "0" iyy = "0.0001" iyz = "0" izz = "0.0001" />
</inertial>
<collision>
<origin rpy = "0 0 0" xyz = "0.000 -0.040 0.000" />
<geometry>
<box size = "0.030 0.050 0.030" />
</geometry>
</collision>
</link>
<joint name="right_knee_fb" type="revolute" >
<parent link = "right_hip_fb" />
<child link = "right_knee_fb" />
<origin rpy = "0 0 0" xyz = "0.000 -0.065 0.000" />
<axis xyz = "0 0 -1" />
<limit effort="10000.0" lower="0" upper="3.14" velocity="0.5"/>
</joint>
<link name="right_anklee_fb" >
<inertial>
<origin rpy = "0 0 0" xyz = "0.000 -0.030 0.005" />
<mass value = "0.0001" />
<inertia ixx = "0.0001" ixy = "0" ixz = "0" iyy = "0.0001" iyz = "0" izz = "0.0001" />
</inertial>
<collision>
<origin rpy = "0 0 0" xyz = "0.000 -0.030 0.005" />
<geometry>
<box size = "0.030 0.020 0.040" />
</geometry>
</collision>
</link>
<joint name="right_anklee_fb" type="revolute" >
<parent link = "right_knee_fb" />
<child link = "right_anklee_fb" />
<origin rpy = "0 0 0" xyz = "0.000 -0.055 0.000" />
<axis xyz = "0 0 -1" />
<limit effort="10000.0" lower="-1.507" upper="1.507" velocity="0.5"/>
</joint>
<link name="right_anklee_rl" >
<inertial>
<origin rpy = "0 0 0" xyz = "0.000 -0.024 0.010" />
<mass value = "0.0001" />
<inertia ixx = "0.0001" ixy = "0" ixz = "0" iyy = "0.0001" iyz = "0" izz = "0.0001" />
</inertial>
<collision>
<origin rpy = "0 0 0" xyz = "0.000 -0.024 0.010" />
<geometry>
<box size = "0.040 0.002 0.050" />
</geometry>
</collision>
</link>
<joint name="right_anklee_rl" type="revolute" >
<parent link = "right_anklee_fb" />
<child link = "right_anklee_rl" />
<origin rpy = "0 0 0" xyz = "0.000 -0.030 -0.005" />
<axis xyz = "1 0 0" />
<limit effort="10000.0" lower="-0.5" upper="0.5" velocity="0.5"/>
</joint>
<!-- right hand -->
<link name="right_shoulder_fb" >
<inertial>
<origin rpy = "0 0 0" xyz = "0.000 0.000 0.000" />
<mass value = "0.0001" />
<inertia ixx = "0.0001" ixy = "0" ixz = "0" iyy = "0.0001" iyz = "0" izz = "0.0001" />
</inertial>
</link>
<joint name="right_shoulder_fb" type="revolute" >
<parent link = "chest" />
<child link = "right_shoulder_fb" />
<origin rpy = "0 0 0" xyz = "0.000 0.045 0.045" />
<axis xyz = "0.0 0.0 1.0" />
<limit effort="10000.0" lower="-1.507" upper="1.507" velocity="0.5"/>
</joint>
<link name="right_shoulder_rl" >
<inertial>
<origin rpy = "0 0 0" xyz = "0.000 -0.010 0.010" />
<mass value = "0.0001" />
<inertia ixx = "0.0001" ixy = "0" ixz = "0" iyy = "0.0001" iyz = "0" izz = "0.0001" />
</inertial>
<collision>
<origin rpy = "0 0 0" xyz = "0.000 -0.010 0.000" />
<geometry>
<box size = "0.030 0.040 0.020" />
</geometry>
</collision>
</link>
<joint name="right_shoulder_rl" type="revolute" >
<parent link = "right_shoulder_fb" />
<child link = "right_shoulder_rl" />
<origin rpy = "0 0 0" xyz = "0.000 0.000 0.025" />
<axis xyz = "-1 0 0" />
<limit effort="10000.0" lower="-1.507" upper="1.507" velocity="0.5"/>
</joint>
<link name="right_shoulder_twist" >
<inertial>
<origin rpy = "0 0 0" xyz = "0.000 -0.025 0.010" />
<mass value = "0.0001" />
<inertia ixx = "0.0001" ixy = "0" ixz = "0" iyy = "0.0001" iyz = "0" izz = "0.0001" />
</inertial>
<collision>
<origin rpy = "0 0 0" xyz = "0.000 -0.025 0.000" />
<geometry>
<box size = "0.020 0.040 0.030" />
</geometry>
</collision>
</link>
<joint name="right_shoulder_twist" type="fixed" >
<parent link = "right_shoulder_rl" />
<child link = "right_shoulder_twist" />
<origin rpy = "0 0 0" xyz = "0.000 -0.030 0.000" />
</joint>
<link name="right_elbow_fb" >
<inertial>
<origin rpy = "0 0 0" xyz = "0.000 -0.035 0.000" />
<mass value = "0.0001" />
<inertia ixx = "0.0001" ixy = "0" ixz = "0" iyy = "0.0001" iyz = "0" izz = "0.0001" />
</inertial>
<collision>
<origin rpy = "0 0 0" xyz = "0.000 -0.035 0.000" />
<geometry>
<box size = "0.020 0.040 0.020" />
</geometry>
</collision>
</link>
<joint name="right_elbow_fb" type="revolute" >
<parent link = "right_shoulder_twist" />
<child link = "right_elbow_fb" />
<origin rpy = "0 0 0" xyz = "0.000 -0.035 0.000" />
<axis xyz = "0 0 1" />
<limit effort="10000.0" lower="0" upper="3.14" velocity="0.5"/>
</joint>
<link name="right_wrist" >
<inertial>
<origin rpy = "0 0 0" xyz = "0.000 -0.0125 0.000" />
<mass value = "0.020" />
<inertia ixx = "0.02" ixy = "0" ixz = "0" iyy = "0.02" iyz = "0" izz = "0.02" />
</inertial>
<collision>
<origin rpy = "0 0 0" xyz = "0.000 -0.0125 0.000" />
<geometry>
<sphere radius = "0.0125" />
</geometry>
</collision>
</link>
<joint name="right_wrist" type="fixed" >
<parent link = "right_elbow_fb" />
<child link = "right_wrist" />
<origin rpy = "0 0 0" xyz = "0.000 -0.060 0.000" />
</joint>
<!-- left foot -->
<link name="left_hip_tw" >
<inertial>
<origin rpy = "0 0 0" xyz = "0.000 -0.025 0.0025" />
<mass value = "0.0001" />
<inertia ixx = "0.0001" ixy = "0" ixz = "0" iyy = "0.0001" iyz = "0" izz = "0.0001" />
</inertial>
<collision>
<origin rpy = "0 0 0" xyz = "0.000 -0.010 0.0025" />
<geometry>
<box size = "0.030 0.002 0.025" />
</geometry>
</collision>
</link>
<joint name="left_hip_tw" type="revolute" >
<parent link = "root" />
<child link = "left_hip_tw" />
<origin rpy = "0 0 0" xyz = "0.000 0.000 -0.020" />
<axis xyz = "0 -1 0" />
<limit effort="10000.0" lower="-1.507" upper="1.507" velocity="0.5"/>
</joint>
<link name="left_hip_rl" >
<inertial>
<origin rpy = "0 0 0" xyz = "0.000 0.000 -0.010" />
<mass value = "0.0001" />
<inertia ixx = "0.0001" ixy = "0" ixz = "0" iyy = "0.0001" iyz = "0" izz = "0.0001" />
</inertial>
<collision>
<origin rpy = "0 0 0" xyz = "0.000 0.000 -0.010" />
<geometry>
<box size = "0.030 0.020 0.040" />
</geometry>
</collision>
</link>
<joint name="left_hip_rl" type="revolute" >
<parent link = "left_hip_tw" />
<child link = "left_hip_rl" />
<origin rpy = "0 0 0" xyz = "0.000 -0.030 0.005" />
<axis xyz = "-1 0 0" />
<limit effort="10000.0" lower="-1.507" upper="1.507" velocity="0.5"/>
</joint>
<link name="left_hip_fb" >
<inertial>
<origin rpy = "0 0 0" xyz = "0.000 -0.0325 0.000" />
<mass value = "0.0001" />
<inertia ixx = "0.0001" ixy = "0" ixz = "0" iyy = "0.0001" iyz = "0" izz = "0.0001" />
</inertial>
<collision>
<origin rpy = "0 0 0" xyz = "0.000 -0.0325 0.000" />
<geometry>
<box size = "0.030 0.085 0.030" />
</geometry>
</collision>
</link>
<joint name="left_hip_fb" type="revolute" >
<parent link = "left_hip_rl" />
<child link = "left_hip_fb" />
<origin rpy = "0 0 0" xyz = "0.000 -0.025 -0.010" />
<axis xyz = "0 0 1" />
<limit effort="10000.0" lower="-1.507" upper="1.507" velocity="0.5"/>
</joint>
<link name="left_knee_fb" >
<inertial>
<origin rpy = "0 0 0" xyz = "0.000 -0.040 0.000" />
<mass value = "0.0001" />
<inertia ixx = "0.0001" ixy = "0" ixz = "0" iyy = "0.0001" iyz = "0" izz = "0.0001" />
</inertial>
<collision>
<origin rpy = "0 0 0" xyz = "0.000 -0.040 0.000" />
<geometry>
<box size = "0.030 0.050 0.030" />
</geometry>
</collision>
</link>
<joint name="left_knee_fb" type="revolute" >
<parent link = "left_hip_fb" />
<child link = "left_knee_fb" />
<origin rpy = "0 0 0" xyz = "0.000 -0.065 0.000" />
<axis xyz = "0 0 -1" />
<limit effort="10000.0" lower="0" upper="3.14" velocity="0.5"/>
</joint>
<link name="left_anklee_fb" >
<inertial>
<origin rpy = "0 0 0" xyz = "0.000 -0.030 -0.005" />
<mass value = "0.0001" />
<inertia ixx = "0.0001" ixy = "0" ixz = "0" iyy = "0.0001" iyz = "0" izz = "0.0001" />
</inertial>
<collision>
<origin rpy = "0 0 0" xyz = "0.000 -0.030 -0.005" />
<geometry>
<box size = "0.030 0.020 0.040" />
</geometry>
</collision>
</link>
<joint name="left_anklee_fb" type="revolute" >
<parent link = "left_knee_fb" />
<child link = "left_anklee_fb" />
<origin rpy = "0 0 0" xyz = "0.000 -0.055 0.000" />
<axis xyz = "0 0 -1" />
<limit effort="10000.0" lower="-1.507" upper="1.507" velocity="0.5"/>
</joint>
<link name="left_anklee_rl" >
<inertial>
<origin rpy = "0 0 0" xyz = "0.000 -0.024 -0.010" />
<mass value = "0.0001" />
<inertia ixx = "0.0001" ixy = "0" ixz = "0" iyy = "0.0001" iyz = "0" izz = "0.0001" />
</inertial>
<collision>
<origin rpy = "0 0 0" xyz = "0.000 -0.024 -0.010" />
<geometry>
<box size = "0.040 0.002 0.050" />
</geometry>
</collision>
</link>
<joint name="left_anklee_rl" type="revolute" >
<parent link = "left_anklee_fb" />
<child link = "left_anklee_rl" />
<origin rpy = "0 0 0" xyz = "0.000 -0.030 0.005" />
<axis xyz = "1 0 0" />
<limit effort="10000.0" lower="-0.5" upper="0.5" velocity="0.5"/>
</joint>
<!-- left hand -->
<link name="left_shoulder_fb" >
<inertial>
<origin rpy = "0 0 0" xyz = "0.000 0.000 0.000" />
<mass value = "0.0001" />
<inertia ixx = "0.0001" ixy = "0" ixz = "0" iyy = "0.0001" iyz = "0" izz = "0.0001" />
</inertial>
</link>
<joint name="left_shoulder_fb" type="revolute" >
<parent link = "chest" />
<child link = "left_shoulder_fb" />
<origin rpy = "0 0 0" xyz = "0.000 0.045 -0.045" />
<axis xyz = "0.0 0.0 1.0" />
<limit effort="10000.0" lower="-1.507" upper="1.507" velocity="0.5"/>
</joint>
<link name="left_shoulder_rl" >
<inertial>
<origin rpy = "0 0 0" xyz = "0.000 -0.010 -0.010" />
<mass value = "0.0001" />
<inertia ixx = "0.0001" ixy = "0" ixz = "0" iyy = "0.0001" iyz = "0" izz = "0.0001" />
</inertial>
<collision>
<origin rpy = "0 0 0" xyz = "0.000 -0.010 0.000" />
<geometry>
<box size = "0.030 0.040 0.020" />
</geometry>
</collision>
</link>
<joint name="left_shoulder_rl" type="revolute" >
<parent link = "left_shoulder_fb" />
<child link = "left_shoulder_rl" />
<origin rpy = "0 0 0" xyz = "0.000 0.000 -0.025" />
<axis xyz = "-1 0 0" />
<limit effort="10000.0" lower="-1.507" upper="1.507" velocity="0.5"/>
</joint>
<link name="left_shoulder_twist" >
<inertial>
<origin rpy = "0 0 0" xyz = "0.000 -0.025 -0.010" />
<mass value = "0.0001" />
<inertia ixx = "0.0001" ixy = "0" ixz = "0" iyy = "0.0001" iyz = "0" izz = "0.0001" />
</inertial>
<collision>
<origin rpy = "0 0 0" xyz = "0.000 -0.025 0.000" />
<geometry>
<box size = "0.020 0.040 0.030" />
</geometry>
</collision>
</link>
<joint name="left_shoulder_twist" type="fixed" >
<parent link = "left_shoulder_rl" />
<child link = "left_shoulder_twist" />
<origin rpy = "0 0 0" xyz = "0.000 -0.030 0.000" />
</joint>
<link name="left_elbow_fb" >
<inertial>
<origin rpy = "0 0 0" xyz = "0.000 -0.035 0.000" />
<mass value = "0.0001" />
<inertia ixx = "0.0001" ixy = "0" ixz = "0" iyy = "0.0001" iyz = "0" izz = "0.0001" />
</inertial>
<collision>
<origin rpy = "0 0 0" xyz = "0.000 -0.035 0.000" />
<geometry>
<box size = "0.020 0.040 0.020" />
</geometry>
</collision>
</link>
<joint name="left_elbow_fb" type="revolute" >
<parent link = "left_shoulder_twist" />
<child link = "left_elbow_fb" />
<origin rpy = "0 0 0" xyz = "0.000 -0.035 0.000" />
<axis xyz = "0 0 1" />
<limit effort="10000.0" lower="0" upper="3.14" velocity="0.5"/>
</joint>
<link name="left_wrist" >
<inertial>
<origin rpy = "0 0 0" xyz = "0.000 -0.0125 0.000" />
<mass value = "0.020" />
<inertia ixx = "0.02" ixy = "0" ixz = "0" iyy = "0.02" iyz = "0" izz = "0.02" />
</inertial>
<collision>
<origin rpy = "0 0 0" xyz = "0.000 -0.0125 0.000" />
<geometry>
<sphere radius = "0.0125" />
</geometry>
</collision>
</link>
<joint name="left_wrist" type="fixed" >
<parent link = "left_elbow_fb" />
<child link = "left_wrist" />
<origin rpy = "0 0 0" xyz = "0.000 -0.060 0.000" />
</joint>
</robot>
以前の記事を参考にしながらColaboratoryで表示させます。
①上記のURDFファイルをtr1.urdfという名前でパソコン上の適当な場所に保存します。
②URDF解説編(1)のColaboratoryのソースの一部を、以下の通り変更します。
・urdfファイル名 赤字が変更後
#urdfファイルをPyBulletに読み込む
p.loadURDF("tr1.urdf")
・カメラ設定
#表示のためのカメラ設定
view_matrix = p.computeViewMatrixFromYawPitchRoll(
cameraTargetPosition=[0.0,-0.05,0.0],
distance=0.4,
yaw=90,
pitch=0,
roll=0,
upAxisIndex=1)
ーーーーーーーーーーーーーーーーーーーーーーーーー
で、実行すると次のような図が表示されます。
upAxisIndex=1とするとY軸が表示の上下方向に設定されます。
2020/2/29追記
jointを見直しました。jointの回転方向を実際に回転させて確認し、上記tr1.urdfモデルを修正、入替えました。jointのプラスの回転方向は、joint定義内のaxisで定義したベクトルの右ねじ方向になります。回転角はrad(ラジアン、2πで360°)です。
jointはPyBulletで読み込んだ時に自動的に番号が与えられます。urdfファイル内の定義順ではなく、linkの接続順のようです。tr1のPyBullet読み込み後のjoint番号および回転方向の一覧は次の通り。
0:root fix 1:chest revolute +方向 かがむ(0~3.14) 2:neck fix 3:right_shoulder_fb revolute +方向 手を前に出す(-1.507~1.507) 4:right_shoulder_rl revolute +方向 手を右方向に出す(-1.507~1.507) 5:right_shoulder_twist fix 6:right_elbow_fb revolute +方向 ひじをたたむ(0~3.14) 7:right_wrist fix 8:left_shoulder_fb revolute +方向 手を前に出す(-1.507~1.507) 9:left_shoulder_rl revolute +方向 手を右方向に出す(-1.507~1.507) 10:left_shoulder_twist fix 11:left_elbow_fb revolute +方向 ひじをたたむ(0~3.14) 12:left_wrist fix 13:right_hip_tw revolute +方向 足を出した時右側にひねる(-1.507~1.507) 14:right_hip_rl revolute +方向 足を右横に出す(-1.507~1.507) 15:right_hip_fb revolute +方向 足を前に出す(-1.507~1.507) 16:right_knee_fb revolute +方向 ひざを曲げる(0~3.14) 17:right_anklee_fb revolute +方向 足首を後ろに蹴る(-1.507~1.507) 18:right_anklee_rl revolute +方向 前を向いて右ねじの方向にひねる(-0.5~0.5) 19:left_hip_tw revolute +方向 足を出した時右側にひねる(-1.507~1.507) 20:left_hip_rl revolute +方向 足を右横に出す(-1.507~1.507) 21:left_hip_fb revolute +方向 足を前に出す(-1.507~1.507) 22:left_knee_fb revolute +方向 ひざを曲げる(0~3.14) 23:left_anklee_fb revolute +方向 足首を後ろに蹴る(-1.507~1.507) 24:left_anklee_rl revolute +方向 前を向いて右ねじの方向にひねる(-0.5~0.5)
つづく
次回からPyBulletで少しづつ動かしていこうと思います。revoluteの設定等が現状は適当なので、適宜見直していきます。(見直しました)
強化学習 カテゴリーの記事一覧 - やってみた!