drake - dingdongdengdong/astra_ws GitHub Wiki
Gazebo์ MoveIt์ผ๋ก ๊ตฌ์ฑ๋ ์๋ฎฌ๋ ์ด์
์ Drake๋ก ์ฎ๊ธฐ๋ ๊ฒ์ ๋จ์ํ ํ์ผ์ ๋ณํํ๋ ๊ฒ ์ด์์ ์์
์ด๋ฉฐ, ๊ฐ ์๋ฎฌ๋ ์ดํฐ์ ์ฒ ํ๊ณผ ๊ตฌ์กฐ๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๊ฐ๋
์ ๋งคํํ๊ณ ๊ธฐ๋ฅ์ Drake ํ๊ฒฝ์ ๋ง๊ฒ ์ฌ๊ตฌํํ๋ ๊ณผ์ ์ด ํ์ํฉ๋๋ค. astra_description
๊ณผ astra_moveit_config
์ ๊ธฐ์ ๋ ๋ด์ฉ์ ๋ฐํ์ผ๋ก Drake๋ก ์ด์ ํ๋ ์ฃผ์ ๋จ๊ณ์ ๊ณ ๋ ค ์ฌํญ์ ์๋ดํด ๋๋ฆฌ๊ฒ ์ต๋๋ค.
ํต์ฌ ์ด์ ๋จ๊ณ:
-
๋ก๋ด ๋ชจ๋ธ (URDF/Xacro ๋ฐ SRDF):
-
URDF/Xacro ๋ก๋:
- Gazebo์ MoveIt์์ ์ฌ์ฉํ๋ ๋ก๋ด ๋ชจ๋ธ(URDF ๋๋ Xacro)์ Drake์
MultibodyPlant
๋ก ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. -
astra_ws
๋ด์์ ๋ก๋ด์ URDF ๋๋ Xacro ํ์ผ์ ์ฐพ์์ผ ํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋กastra_description/urdf/
๋๋astra_description/robots/
๋๋ ํ ๋ฆฌ์ ์์ต๋๋ค.astra_moveit_config/launch/rsp.launch.py
ํ์ผ์ ์ดํด๋ณด๋ฉดrobot_description
ํ๋ผ๋ฏธํฐ๋ฅผ ํตํด ์ค์ ์ฌ์ฉ๋๋ Xacro ๋๋ URDF ํ์ผ ๊ฒฝ๋ก๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. - ๋ง์ฝ
.xacro
ํ์ผ์ด๋ผ๋ฉด, ๋จผ์ xacro
๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ URDF ํ์ผ๋ก ๋ณํํด์ผ ํฉ๋๋ค:ros2 run xacro xacro your_robot.xacro > your_robot.urdf
- ๋ณํ๋ URDF ํ์ผ์ ์ด์ ๋ต๋ณ์์ ์ค๋ช
ํ ๋๋ก Drake์
Parser
๋ฅผ ์ฌ์ฉํ์ฌMultibodyPlant
์ ๋ก๋ํฉ๋๋ค. ๋ฉ์ ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ํด์ํ๊ธฐ ์ํดparser.package_map().Add()
๋ฅผ ์ฌ์ฉํ์ฌ ROS ํจํค์ง ๊ฒฝ๋ก๋ฅผ ์ค์ ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
- Gazebo์ MoveIt์์ ์ฌ์ฉํ๋ ๋ก๋ด ๋ชจ๋ธ(URDF ๋๋ Xacro)์ Drake์
-
SRDF (Semantic Robot Description Format) ์ ๋ณด ํ์ฉ:
- MoveIt์ ๋ก๋ด์ ์๋ฏธ๋ก ์ ์ ๋ณด(ํ๋๋ ๊ทธ๋ฃน, ์๋ ์ดํํฐ, ๊ธฐ๋ณธ ์์ธ, ์ถฉ๋ ๋นํ์ฑํ ์ ๋ฑ)๋ฅผ SRDF ํ์ผ(
astra_moveit_config/config/srdf/astra_description.srdf.xacro
๋ก ์ถ์ )์ ์ ์ฅํฉ๋๋ค. - Drake๋ SRDF ํ์ผ์ ์ง์ ํ์ฑํ์ง ์์ง๋ง, SRDF์ ๋ด๊ธด ์ ๋ณด๋ Drake ์๋ฎฌ๋ ์ด์
๋ฐ ์ ์ด ์ค์ ์ ๊ตฌ์ฑํ๋ ๋ฐ ๋งค์ฐ ์ ์ฉํฉ๋๋ค.
- ํ๋๋ ๊ทธ๋ฃน/์๋ ์ดํํฐ: Drake์์ IK (Inverse Kinematics)๋ ๋ชจ์ ํ๋๋ ์์ ์ ์ด๋ค ๋งํฌ์ ์กฐ์ธํธ๋ค์ ๊ณ ๋ คํ ์ง ์ ์ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ๊ธฐ๋ณธ ์์ธ (Named Poses): Drake ์๋ฎฌ๋ ์ด์ ์์ ๋ก๋ด์ ์ด๊ธฐ ์ํ๋ ๋ชฉํ ์ํ๋ฅผ ์ค์ ํ๋ ๋ฐ ์ฐธ์กฐํ ์ ์์ต๋๋ค.
-
์ถฉ๋ ๋นํ์ฑํ (Disabled Collisions): Drake์
MultibodyPlant
์์ ํน์ ๋งํฌ ์ ๊ฐ์ ์ถฉ๋ ๊ฒ์ฌ๋ฅผ ๋นํ์ฑํํ ๋ ์ด ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ์ค์ ํ ์ ์์ต๋๋ค (plant.ExcludeCollisionGeometriesWith()
๋ฑ).
- MoveIt์ ๋ก๋ด์ ์๋ฏธ๋ก ์ ์ ๋ณด(ํ๋๋ ๊ทธ๋ฃน, ์๋ ์ดํํฐ, ๊ธฐ๋ณธ ์์ธ, ์ถฉ๋ ๋นํ์ฑํ ์ ๋ฑ)๋ฅผ SRDF ํ์ผ(
-
URDF/Xacro ๋ก๋:
-
์๋ฎฌ๋ ์ด์ ํ๊ฒฝ (World SDF):
- Gazebo๋ ์๋ ํ์ผ (์ผ๋ฐ์ ์ผ๋ก
.sdf
๋๋.world
ํ์ฅ์)์ ์ฌ์ฉํ์ฌ ์๋ฎฌ๋ ์ด์ ํ๊ฒฝ(๋ฐ๋ฅ, ๋ฒฝ, ์กฐ๋ช , ์์ ๋์ ๋ฌผ์ฒด ๋ฑ)์ ์ ์ํฉ๋๋ค. - ์ด ์๋ ํ์ผ์ ์ ์๋ ํ๊ฒฝ ์์๋ค์ Drake๋ก ๊ฐ์ ธ์์ผ ํฉ๋๋ค.
-
SDF ๋ก๋: ๋ง์ฝ ํ๊ฒฝ์ด SDF ํ์ผ๋ก ๊ธฐ์ ๋์ด ์๋ค๋ฉด, Drake์
Parser
๋ ๋ก๋ด ๋ชจ๋ธ๋ฟ๋ง ์๋๋ผ ํ๊ฒฝ SDF ํ์ผ๋ ๋ก๋ํ ์ ์์ต๋๋ค.parser.AddModels(filename="path/to/your/world.sdf")
(์ต์ Drake์์๋AddAllModelsFromFile
๋๋AddModelFromFile
๋ฐ๋ณต ์ฌ์ฉ). -
์ ์ฐจ์ ์์ฑ: ๊ฐ๋จํ ํ๊ฒฝ(์: ํํํ ๋ฐ๋ฅ, ๊ฐ๋จํ ์ฅ์ ๋ฌผ)์ Drake์ ํ์ ํ๋ฆฌ๋ฏธํฐ๋ธ(Sphere, Box, Cylinder, HalfSpace ๋ฑ)๋ฅผ ์ฌ์ฉํ์ฌ Python ์ฝ๋ ๋ด์์ ์ง์ ์์ฑํ ์ ์์ต๋๋ค.
# ์์: ๋ฐ๋ฅ ์ถ๊ฐ ground_shape = DrakeShapes.Box([10, 10, 0.1]) # ๊ฐ๋ก, ์ธ๋ก, ๋์ด plant.RegisterVisualGeometry(plant.world_body(), RigidTransform([0,0,-0.05]), ground_shape, "ground_visual", diffuse_color=[0.5,0.5,0.5,1.0]) plant.RegisterCollisionGeometry(plant.world_body(), RigidTransform([0,0,-0.05]), ground_shape, "ground_collision", CoulombFriction(1.0, 1.0))
- ์์ ๋์ ๋ฌผ์ฒด๋ค ์ญ์ URDF๋ SDF๋ก ์ ์๋์ด ์๋ค๋ฉด Drake์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
-
SDF ๋ก๋: ๋ง์ฝ ํ๊ฒฝ์ด SDF ํ์ผ๋ก ๊ธฐ์ ๋์ด ์๋ค๋ฉด, Drake์
- Gazebo๋ ์๋ ํ์ผ (์ผ๋ฐ์ ์ผ๋ก
-
์ปจํธ๋กค๋ฌ (Controllers):
- Gazebo/ROS์์๋
ros_control
๋๋ ์ปค์คํ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ์ฌ ๋ก๋ด์ ์ ์ดํ๊ณ , MoveIt์ ์ฃผ๋กFollowJointTrajectory
์ก์ ์ธํฐํ์ด์ค๋ฅผ ํตํด ์ปจํธ๋กค๋ฌ์ ํต์ ํฉ๋๋ค.astra_controller
ํจํค์ง์ ํด๋น ๋ก์ง์ด ์์ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. - Drake์์๋ ์ปจํธ๋กค๋ฌ๋ฅผ
LeafSystem
์ผ๋ก ๊ตฌํํ์ฌDiagram
์ ํตํฉํฉ๋๋ค.-
PID ์ปจํธ๋กค๋ฌ:
ros_control
์position_controllers/JointTrajectoryController
๋๋velocity_controllers/JointTrajectoryController
์ ์ ์ฌํ ๊ธฐ๋ฅ์ Drake์์PidController
์์คํ ์ ์ฌ์ฉํ์ฌ ๊ตฌํํ ์ ์์ต๋๋ค. ๊ฐ ์กฐ์ธํธ์ ๋ํด PID ๊ฒ์ธ์ ์ค์ ํ๊ณ , ๋ชฉํ ์ํ(์์น, ์๋)๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์ ํ ํฌ๋ฅผ ๊ณ์ฐํฉ๋๋ค. -
์ญ๋์ญํ ์ปจํธ๋กค๋ฌ (
InverseDynamicsController
): Drake๋ ๋ก๋ด์ ๋์ญํ ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ์ํ๋ ์กฐ์ธํธ ๊ฐ์๋๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํ ํ ํฌ๋ฅผ ๊ณ์ฐํ๋InverseDynamicsController
๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ ๋ ์ ๊ตํ ์ ์ด์ ์ ์ฉํฉ๋๋ค. -
์ปค์คํ
์ ์ด ๋ก์ง:
astra_controller
๋ด์ ํน์ ์ ์ด ์ ๋ต(์: ํ ์ ์ด, ์ํผ๋์ค ์ ์ด)์ Drake์LeafSystem
์ ์์๋ฐ์ Python์ด๋ C++๋ก ์ง์ ๊ตฌํํด์ผ ํฉ๋๋ค.
-
PID ์ปจํธ๋กค๋ฌ:
-
์ก์ถ์์ดํฐ ๋ชจ๋ธ๋ง: URDF์ ์ ์๋ ์กฐ์ธํธ ์ ํ(์๋, ํ/ํ ํฌ) ๋ฐ ๋์ ํน์ฑ(๋ํ, ๋ง์ฐฐ)์ Drake์
MultibodyPlant
์์ ์ ์ฌํ๊ฒ ์ค์ ํ๊ฑฐ๋, ์ปจํธ๋กค๋ฌ ๋ ๋ฒจ์์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
- Gazebo/ROS์์๋
-
์ผ์ (Sensors):
- Gazebo๋ URDF ๋ด
<sensor>
ํ๊ทธ์ ๊ด๋ จ ํ๋ฌ๊ทธ์ธ(์:gazebo_ros_camera
,gazebo_ros_imu
)์ ํตํด ์ผ์๋ฅผ ์๋ฎฌ๋ ์ด์ ํฉ๋๋ค. - Drake๋ ์์ฒด ์ผ์ ๋ชจ๋ธ์ ์ ๊ณตํ๋ฉฐ, ์ด๋ฅผ
Diagram
์ ์ถ๊ฐํฉ๋๋ค.-
์นด๋ฉ๋ผ (
RgbdSensor
): Gazebo์ ์นด๋ฉ๋ผ ์ค์ ์ ์ฐธ์กฐํ์ฌ Drake์RgbdSensor
๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค (ํ๊ฐ(FOV), ํด์๋, ํด๋ฆฌํ ๋ฒ์ ๋ฑ). ๋ ๋๋ง ์์ง์ด ๋ค๋ฅด๋ฏ๋ก ์๋ฒฝํ ๋์ผํ ์ด๋ฏธ์ง๊ฐ ๋์ค์ง๋ ์์ ์ ์์ต๋๋ค. -
IMU (
ImuSensor
): IMU์ ์์น, ๋ ธ์ด์ฆ ํน์ฑ ๋ฑ์ Drake์ImuSensor
์ ๋ง๊ฒ ์ค์ ํฉ๋๋ค. - ๊ธฐํ ์ผ์: Force/Torque ์ผ์ ๋ฑ๋ Drake์์ ๋ชจ๋ธ๋ง ๊ฐ๋ฅํฉ๋๋ค.
-
์นด๋ฉ๋ผ (
- ์ผ์ ๋ฐ์ดํฐ๋ Drake ์์คํ ์ ์ถ๋ ฅ ํฌํธ์์ ์ป์ด์ ์ ์ด๋ ๋ก๊น ์ ์ฌ์ฉํฉ๋๋ค.
- Gazebo๋ URDF ๋ด
-
MoveIt ๊ธฐ๋ฅ์ Drake ๋์ฒด:
-
์ด๋ํ (Kinematics) ๋ฐ ์ญ์ด๋ํ (IK):
- MoveIt์ IK ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํฉ๋๋ค. Drake์
MultibodyPlant
๋ ์์ด๋ํ ๊ณ์ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ,InverseKinematics
ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ํ ์ ์ฝ ์กฐ๊ฑด ํ์ IK๋ฅผ ํ ์ ์์ต๋๋ค. SRDF์ ์๋ ์ดํํฐ ์ ๋ณด๊ฐ IK ๋ชฉํ ์ค์ ์ ์ฌ์ฉ๋ฉ๋๋ค.
- MoveIt์ IK ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํฉ๋๋ค. Drake์
-
๋ชจ์
ํ๋๋ (Motion Planning):
- MoveIt์ OMPL๊ณผ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด ๋ค์ํ ํ๋๋ ์๊ณ ๋ฆฌ์ฆ์ ์ ๊ณตํฉ๋๋ค.
- Drake๋ ์ฃผ๋ก ์ต์ ํ ๊ธฐ๋ฐ์ ๋ชจ์
ํ๋๋(
MathematicalProgram
,DirectCollocation
,KinematicTrajectoryOptimization
)์ ๊ฐ์ ์ ๊ฐ์ง๋๋ค. ์ํ๋ง ๊ธฐ๋ฐ ํ๋๋(RRT, PRM ๋ฑ)๋ฅผ ์ง์ ๊ตฌํํ๊ฑฐ๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐ๋ํด์ผ ํ ์ ์์ต๋๋ค. ๊ฐ๋จํ ์์ ์ ๊ฒฝ์ฐ, ์ผ๋ จ์ IK ๋ชฉํ์ ์ ๊ณ์ฐํ๊ณ ์ด๋ฅผ ๋ณด๊ฐํ์ฌ ๊ฒฝ๋ก๋ฅผ ์์ฑํ ์๋ ์์ต๋๋ค.
-
์ถฉ๋ ๊ฒ์ฌ (Collision Checking):
- MoveIt์ PlanningScene์ ํตํด ํ๊ฒฝ์ ์ธ์งํ๊ณ FCL/Bullet ๋ฑ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ถฉ๋์ ๊ฒ์ฌํฉ๋๋ค.
- Drake์
SceneGraph
๋ ์ถฉ๋ ๊ฒ์ฌ๋ฅผ ๋ด๋นํ๋ฉฐ,QueryObject
๋ฅผ ํตํด ํน์ ํ์ ๊ฐ ๋๋ ์ ์ฒด ์ฅ๋ฉด์ ๋ํ ์ถฉ๋ ์ฌ๋ถ ๋ฐ ๊ฑฐ๋ฆฌ ์ ๋ณด๋ฅผ ์ป์ ์ ์์ต๋๋ค. SRDF์ ์ถฉ๋ ๋นํ์ฑํ ์ ๋ณด๋SceneGraph
์ค์ ์ ๋ฐ์ํฉ๋๋ค.
-
์ํ ํํ (State Representation):
- MoveIt์
RobotState
๊ฐ์ฒด๋ฅผ ์ฌ์ฉํฉ๋๋ค. Drake์์๋ ์์คํ ์ ์ํ๊ฐContext
๊ฐ์ฒด์ ์ ์ฅ๋๋ฉฐ,plant.SetPositions(plant_context, ...)
๋ฑ์ผ๋ก ์ํ๋ฅผ ์ค์ ํ๊ณplant.GetPositions(plant_context)
๋ฑ์ผ๋ก ์ํ๋ฅผ ์ฝ์ต๋๋ค.
- MoveIt์
-
์ด๋ํ (Kinematics) ๋ฐ ์ญ์ด๋ํ (IK):
-
์๋ฎฌ๋ ์ด์ ์คํ ๋ฐ ๊ด๋ฆฌ:
- Gazebo/MoveIt ์๋ฎฌ๋ ์ด์ ์ ROS launch ํ์ผ์ ํตํด ์ฌ๋ฌ ๋ ธ๋๋ฅผ ์คํํ๊ณ ํ๋ผ๋ฏธํฐ๋ฅผ ์ค์ ํฉ๋๋ค.
- Drake ์๋ฎฌ๋ ์ด์
์ ์ฃผ๋ก ๋จ์ผ Python ์คํฌ๋ฆฝํธ ๋ด์์
Diagram
์ ๊ตฌ์ฑํ๊ณ ,Simulator
๋ฅผ ์์ฑํ์ฌ ์คํํฉ๋๋ค. ์ด๊ธฐ ์กฐ๊ฑด ์ค์ , ์๋ฎฌ๋ ์ด์ ์๊ฐ, ์ธ๋ถ ์ ๋ ฅ ๋ฑ ๋ชจ๋ ๊ฒ์ด ์คํฌ๋ฆฝํธ ๋ด์์ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ๊ด๋ฆฌ๋ฉ๋๋ค.
-
์๊ฐํ (Visualization):
- ROS์์๋ RViz๋ฅผ ์ฌ์ฉํ์ฌ ๋ก๋ด ์ํ, ์ผ์ ๋ฐ์ดํฐ, ํ๋๋ ๊ฒฐ๊ณผ ๋ฑ์ ์๊ฐํํฉ๋๋ค.
- Drake๋ Meshcat์ด๋ผ๋ ์น ๊ธฐ๋ฐ 3D ์๊ฐํ ๋๊ตฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
MeshcatVisualizer
๋ฅผDiagram
์ ์ถ๊ฐํ๋ฉดSceneGraph
์ ์ง์ค๋ฉํธ๋ฆฌ ์ ๋ณด๊ฐ Meshcat์ผ๋ก ์ ์ก๋์ด ์๊ฐํ๋ฉ๋๋ค. ์ถ๊ฐ์ ์ธ ๋๋ฒ๊น ์ ๋ณด๋ ํ๋กฏ๋ Meshcat์ ํตํด ํ์ํ ์ ์์ต๋๋ค.
์ด์ ๊ณผ์ ์์ฝ ๋ฐ ์กฐ์ธ:
-
๋จ๊ณ์ ์ ๊ทผ: ํ ๋ฒ์ ๋ชจ๋ ๊ฒ์ ์ฎ๊ธฐ๋ ค ํ์ง ๋ง๊ณ , ๋จ๊ณ๋ณ๋ก ์งํํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
- ๋ก๋ด ๋ชจ๋ธ์ Drake์ ์ฑ๊ณต์ ์ผ๋ก ๋ก๋ํ๊ณ Meshcat์์ ์๊ฐํํ๋ ๊ฒ๋ถํฐ ์์ํฉ๋๋ค.
- ๊ฐ๋จํ ํ๊ฒฝ(์: ๋ฐ๋ฅ)์ ์ถ๊ฐํฉ๋๋ค.
- ๊ธฐ๋ณธ์ ์ธ ์กฐ์ธํธ ์ ์ด(์: ๊ฐ ์กฐ์ธํธ๋ฅผ ํน์ ๊ฐ๋๋ก ์ด๋์ํค๋ PID ์ ์ด)๋ฅผ ๊ตฌํํฉ๋๋ค.
- ์ผ์๋ฅผ ์ถ๊ฐํ๊ณ ๋ฐ์ดํฐ๋ฅผ ํ์ธํฉ๋๋ค.
- ์ ์ฐจ ๋ณต์กํ ์ ์ด ๋ก์ง๊ณผ ๋ชจ์ ํ๋๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ฑฐ๋ ์ฐ๋ํฉ๋๋ค.
-
astra_description
๋ฐastra_moveit_config
ํ์ฉ: ์ด ํจํค์ง๋ค์ ์ค์ ํ์ผ(URDF, SRDF, ์ปจํธ๋กค๋ฌ ์ค์ YAML ๋ฑ)์ Drake๋ก ์ด์ ํ ๋ ํ์ํ ํ๋ผ๋ฏธํฐ์ ๊ตฌ์กฐ๋ฅผ ํ์ ํ๋ ๋ฐ ์ค์ํ ์ฐธ๊ณ ์๋ฃ๊ฐ ๋ฉ๋๋ค. - Drake ๋ฌธ์ ๋ฐ ์์ ํ์ฉ: Drake ๊ณต์ ๋ฌธ์์ GitHub ์ ์ฅ์์ ์์ ๋ค์ ๋งค์ฐ ์ ์ฉํฉ๋๋ค. ์ ์ฌํ ๊ธฐ๋ฅ์ ๊ตฌํํ ์์ ๋ฅผ ์ฐพ์ ์ฐธ๊ณ ํ๋ฉด ๋์์ด ๋ฉ๋๋ค.
- ์ปค๋ฎค๋ํฐ ์ง์: Drake๋ ํ๋ฐํ ์ปค๋ฎค๋ํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฏ๋ก, ์ด๋ ค์ด ๋ฌธ์ ์ ์ง๋ฉดํ์ ๋ Stack Overflow๋ Drake GitHub Discussions๋ฅผ ํตํด ์ง๋ฌธํ๋ฉด ๋์์ ๋ฐ์ ์ ์์ต๋๋ค.
Gazebo/MoveIt์์ Drake๋ก์ ์ด์ ์ ์๋นํ ๋ ธ๋ ฅ์ด ํ์ํ์ง๋ง, Drake๊ฐ ์ ๊ณตํ๋ ๊ฐ๋ ฅํ ๋์ญํ ์์ง, ์ต์ ํ ๋๊ตฌ, ์ ์ฐํ ์์คํ ๊ตฌ์ฑ ๋ฅ๋ ฅ ๋ฑ์ ํ์ฉํ์ฌ ๋ ๊น์ด ์๋ ์ฐ๊ตฌ์ ๊ฐ๋ฐ์ ์งํํ ์ ์๋ ๊ธฐํ๊ฐ ๋ ๊ฒ์ ๋๋ค.