WEEK2 - dingdongdengdong/astra_ws GitHub Wiki
2์ฃผ์ฐจ ํ๋ก์ ํธ ๊ฐ์ ๋ฐ ๋ชฉํ
๋ชฉํ
์นด๋ฉ๋ผ ๋น์ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ก ์์ฑ๋ ์์ธ ๋ก๋ด ํ ์์ง์ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ์ฌ Astra ๋ก๋ด ํ์ ๋ค์ค ์กฐ์ธํธ๋ฅผ ๋์์ ์ ์ดํ๋๋ก teleop_node
๊ธฐ๋ฅ์ ํ์ฅํฉ๋๋ค. ํ๋ฌ ์
๋ ฅ์ ํตํด ํ๋ถ ์ด๋ ๋ฐ ๊ทธ๋ฆฌํผ๋ฅผ ํตํฉ ์ ์ดํ๋ฉฐ, ์์คํ
์ Launch ํ์ผ๋ก ํตํฉํ๊ณ MoveIt ์๋ฎฌ๋ ์ด์
ํ๊ฒฝ์์ ์์ ์ ์ผ๋ก ์คํ ๋ฐ ๊ฒ์ฆํฉ๋๋ค. ์ต์ข
๊ฒฐ๊ณผ๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ์ ๋ฆฌํ์ฌ ๋ณด๊ณ ํฉ๋๋ค.
ํต์ฌ ๊ธฐ์
- Python ๊ธฐ๋ฐ ROS2 ๋ ธ๋ ๊ธฐ๋ฅ ํ์ฅ
- ๋น์ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ(์์ธ ๋ก๋ด ํ ์์ง์ ๋ฐ์ดํฐ) ํ์ฉ
- ROS2 Parameter ๊ด๋ฆฌ
- ROS2 Launch ํ์ผ ํตํฉ
- MoveIt ์๋ฎฌ๋ ์ด์ ๋๋ฒ๊น ๋ฐ ๊ฒ์ฆ
2์ฃผ์ฐจ ๊ณผ์ ์์ธ ํด๊ฒฐ ๊ฐ์ด๋
๊ณผ์ 2.1: ๋น์ ๋ฐ์ดํฐ ๊ธฐ๋ฐ ๋ค์ค ๋ก๋ด ํ ์กฐ์ธํธ ๋ฐ ์ ์ฒด ๋ก๋ด ์ ์ด ๊ตฌํ
๋ชฉํ
1์ฃผ์ฐจ์์ ๋จ์ผ ์กฐ์ธํธ ์ ์ด๋ฅผ ํ์ฅํ์ฌ, non_ros_src/astra_teleop
์์ ์์ฑ๋ ์์ธ ๋ก๋ด ํ ์์ง์ ๋ฐ์ดํฐ(์: ๋ชฉํ ์กฐ์ธํธ ๊ฐ, ์๋์ดํํฐ pose)๋ฅผ ํ์ฉํด ๋ค์ค ์กฐ์ธํธ๋ฅผ ๋์์ ์ ์ดํ๋๋ก teleop_node.py
๋ฅผ ๊ฐ์ ํฉ๋๋ค. ํ๋ฌ ์
๋ ฅ์ผ๋ก ํ๋ถ ์ด๋๊ณผ ๊ทธ๋ฆฌํผ ์ ์ด๋ฅผ ํตํฉ ๊ตฌํํฉ๋๋ค.
๊ธฐ์ ์ค๋ช
teleop_node.py
๋ ๋น์ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์์ ํ์ฌ ์์ธ ๋ก๋ด ํ ์์ง์ ๋ฐ์ดํฐ๋ฅผsensor_msgs/msg/JointState
๋ก ๋ณํํฉ๋๋ค.- ๋น์ ๋ฐ์ดํฐ๊ฐ ์๋์ดํํฐ pose์ผ ๊ฒฝ์ฐ ์ญ๊ธฐ๊ตฌํ(IK) ๊ณ์ฐ์ด ํ์ํ ์ ์์ต๋๋ค.
- ํ๋ฌ ์
๋ ฅ์ ํ๋ถ ์ ํ/๊ฐ์๋(
geometry_msgs/msg/Twist
) ๋ฐ ๊ทธ๋ฆฌํผ ์ด๋ฆผ/๋ซํ ๋ช ๋ น์ ์์ฑํฉ๋๋ค. - ๋น์ -์กฐ์ธํธ ๋งคํ, ํ๋ฌ-๋ช ๋ น ๋งคํ, ์ค์ผ์ผ๋ง ๊ณ์, ์กฐ์ธํธ/์๋ ์ ํ์ ROS2 Parameter๋ก ๊ด๋ฆฌํฉ๋๋ค.
์คํ ๋จ๊ณ
src/astra_controller/astra_controller/teleop_node.py
๋ฅผ ์ฝ๋๋ค.- ๋น์ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ์ ํ๋ฌ ์ ๋ ฅ ์์ ๋ก์ง์ ํ์ธํฉ๋๋ค.
- ๋ก๋ด ํ ์กฐ์ธํธ ์ด๋ฆ ๋ฆฌ์คํธ์ ํ๋ถ/๊ทธ๋ฆฌํผ ํ ํฝ ๋ฐ ๋ฉ์์ง ํ์ ์ ์ ์ํฉ๋๋ค.
sensor_msgs/msg/JointState
๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค.joint_state_cmd.header.stamp = self.get_clock().now().to_msg()
๋ก ํ์์คํฌํ ์ค์ .- ์กฐ์ธํธ ์ด๋ฆ์
joint_state_cmd.name
์ ์ถ๊ฐํฉ๋๋ค. - ๋น์ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํด ์กฐ์ธํธ ๋ชฉํ ๊ฐ(์์น/์๋)์ ๊ณ์ฐํ์ฌ
joint_state_cmd.position
๋๋joint_state_cmd.velocity
์ ์ฑ์๋๋ค. ์ญ๊ธฐ๊ตฌํ ๊ณ์ฐ ๋๋ ํด๋ฆฌํ ์ ์ฉ. - ํ๋ฌ ์ ๋ ฅ์ผ๋ก ํ๋ถ ๋ฐ ๊ทธ๋ฆฌํผ ๋ช ๋ น์ ์์ฑํฉ๋๋ค.
/leader_arm/commands
,/cmd_vel
,/gripper_command
ํ ํฝ์ ๋ช ๋ น์ ๋ฐํํฉ๋๋ค.- ์ค์ ๊ฐ์ ROS2 Parameter๋ก ๊ด๋ฆฌํ๊ณ YAML ํ์ผ๋ก ๋ถ๋ฆฌํฉ๋๋ค.
colcon build --packages-select astra_controller
๋ก ๋น๋ํฉ๋๋ค.
ํต์ฌ ํ์ผ/๊ฐ๋
src/astra_controller/teleop_node.py
non_ros_src/astra_teleop
sensor_msgs/msg/JointState
- ์ญ๊ธฐ๊ตฌํ(IK)
- ROS2 Parameter
์์ ๊ฒฐ๊ณผ
teleop_node
๊ฐ ๋น์ ๋ฐ์ดํฐ์ ํ๋ฌ ์
๋ ฅ์ ๋ฐ์ ๋ค์ค ์กฐ์ธํธ, ํ๋ถ, ๊ทธ๋ฆฌํผ ์ ์ด ๋ช
๋ น์ ๋ฐํํ๋ฉฐ, ๋ฉ์์ง ๋ด์ฉ์ด ์
๋ ฅ์ ๋ฐ๋ผ ๋ณํํฉ๋๋ค.
๋ฌธ์ ํด๊ฒฐ ํ
- ๋น์ ๋ฐ์ดํฐ์ ์กฐ์ธํธ ๋ณํ ๋ก์ง์ ์ ํํ ์ดํดํฉ๋๋ค.
- MoveIt์ IK Solver ๋๋
non_ros_src/ModernRobotics
๋ฅผ ํ์ฉํฉ๋๋ค.
๊ณผ์ 2.2: ์ ์ฒด ์์คํ ํตํฉ Launch ํ์ผ ๊ตฌ์ถ ๋ฐ ์ค์ ๊ด๋ฆฌ
๋ชฉํ
์นด๋ฉ๋ผ ๋๋ผ์ด๋ฒ, ๋น์ ์ฒ๋ฆฌ, ํ๋ฌ ์
๋ ฅ, teleop_node
, moveit_relay_node
, ํ๋ถ/๊ทธ๋ฆฌํผ ๋
ธ๋, MoveIt ์๋ฎฌ๋ ์ด์
์ ๋จ์ผ Launch ํ์ผ๋ก ์คํํ๊ณ , ์ค์ ์ YAML ํ์ผ๋ก ๊ด๋ฆฌํฉ๋๋ค.
๊ธฐ์ ์ค๋ช
- Launch ํ์ผ์ ๋ชจ๋ ๋
ธ๋๋ฅผ
Node
์ก์ ์ผ๋ก ์ ์ํ๊ณ , MoveIt ์๋ฎฌ๋ ์ด์ (astra_moveit_config/launch/demo.launch.py
)์ ํฌํจํฉ๋๋ค. - YAML ํ์ผ๋ก ํ๋ผ๋ฏธํฐ๋ฅผ ๋ก๋ํ์ฌ ๋ ธ๋์ ์ ๋ฌํฉ๋๋ค.
์คํ ๋จ๊ณ
astra_controller/launch/teleop_vision_sim.launch.py
๋ฅผ ์ฝ๋๋ค.- ์นด๋ฉ๋ผ ๋๋ผ์ด๋ฒ ๋
ธ๋(์:
usb_cam
)๋ฅผ ์ถ๊ฐํฉ๋๋ค. - ๋น์ ์ฒ๋ฆฌ ๋ ธ๋(๋ ๋ฆฝ์ ์ธ ๊ฒฝ์ฐ)๋ฅผ ์ถ๊ฐํฉ๋๋ค.
- ํ๋ฌ ์ ๋ ฅ ๋ ธ๋(๋ ๋ฆฝ์ ์ธ ๊ฒฝ์ฐ)๋ฅผ ์ถ๊ฐํฉ๋๋ค.
teleop_node
์ YAML ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ง์ ํฉ๋๋ค.moveit_relay_node
,base_node
,lift_node
, ๊ทธ๋ฆฌํผ ๋ ธ๋๋ฅผ ํ์ธํฉ๋๋ค.- MoveIt ์๋ฎฌ๋ ์ด์ Launch ํ์ผ์ ํฌํจํฉ๋๋ค.
LaunchDescription
์ ๋ชจ๋ ์ก์ ์ ์ถ๊ฐํฉ๋๋ค.- ๋น๋ ํ
ros2 launch astra_controller teleop_vision_sim.launch.py
๋ฅผ ์คํํฉ๋๋ค. rqt_graph
๋ก ๋ ธ๋ ์ฐ๊ฒฐ์ ํ์ธํฉ๋๋ค.
ํต์ฌ ํ์ผ/๊ฐ๋
astra_controller/launch/teleop_vision_sim.launch.py
- ์นด๋ฉ๋ผ/๋น์ /ํ๋ฌ ๋ ธ๋
- MoveIt ์๋ฎฌ๋ ์ด์
- ROS2 Parameters
์์ ๊ฒฐ๊ณผ
๋จ์ผ Launch ํ์ผ๋ก ์์คํ ์ด ์คํ๋๋ฉฐ, ์ค์ ์ YAML ํ์ผ๋ก ๊ด๋ฆฌ๋ฉ๋๋ค.
๋ฌธ์ ํด๊ฒฐ ํ
rqt_graph
์ros2 topic echo
๋ก ์ฐ๊ฒฐ ๋ฐ ๋ฉ์์ง๋ฅผ ๊ฒ์ฆํฉ๋๋ค.- YAML ๋ฌธ๋ฒ ์ค๋ฅ๋ฅผ ํ์ธํฉ๋๋ค.
๊ณผ์ 2.3: MoveIt ์๋ฎฌ๋ ์ด์ ๋์ ์์ธ ๊ฒ์ฆ
๋ชฉํ
ํตํฉ ์์คํ ์ MoveIt ์๋ฎฌ๋ ์ด์ ์์ ์คํํ๊ณ , ๋น์ ๋ฐ ํ๋ฌ ์ ๋ ฅ์ ๋ฐ๋ฅธ ๋ก๋ด ์์ง์์ ๊ฒ์ฆํฉ๋๋ค.
๊ธฐ์ ์ค๋ช
- RViz๋ก ์๊ฐ์ ์์ง์์ ํ์ธํ๊ณ , ROS2 ํด๋ก ๋ช ๋ น๊ณผ ์ํ๋ฅผ ๋ชจ๋ํฐ๋งํฉ๋๋ค.
์คํ ๋จ๊ณ
- ํตํฉ Launch ํ์ผ๋ก ์์คํ ์ ์คํํฉ๋๋ค.
- RViz์์ ๋ก๋ด ์์ง์์ ํ์ธํฉ๋๋ค.
- ๋น์ ์ ๋ ฅ์ผ๋ก ๋ค์ค ์กฐ์ธํธ๋ฅผ ํ ์คํธํฉ๋๋ค.
- ํ๋ฌ ์ ๋ ฅ์ผ๋ก ํ๋ถ/๊ทธ๋ฆฌํผ๋ฅผ ํ ์คํธํฉ๋๋ค.
- ํ, ํ๋ถ, ๊ทธ๋ฆฌํผ๋ฅผ ๋์์ ์กฐ์ํฉ๋๋ค.
rqt_plot
์ผ๋ก/leader_arm/commands
์/joint_states
๋ฅผ ๋ถ์ํฉ๋๋ค.ros2 topic echo
๋ก ๋ฉ์์ง๋ฅผ ํ์ธํฉ๋๋ค.rqt_graph
๋ก ํต์ ์ ๊ฒ์ฆํฉ๋๋ค.- ๋ฌธ์ ์ ์ ๊ธฐ๋กํฉ๋๋ค.
ํต์ฌ ํ์ผ/๊ฐ๋
- ํตํฉ Launch ํ์ผ
- RViz
rqt_plot
/joint_states
,/leader_arm/commands
์์ ๊ฒฐ๊ณผ
๋น์ ๋ฐ ํ๋ฌ ์ ๋ ฅ์ ๋ฐ๋ผ ๋ก๋ด์ด ์์ฐ์ค๋ฝ๊ฒ ์์ง์ด๋ฉฐ, ROS2 ํด๋ก ์ํ๋ฅผ ๋ชจ๋ํฐ๋งํ ์ ์์ต๋๋ค.
๋ฌธ์ ํด๊ฒฐ ํ
- ๋น์ ๋ฐ์ดํฐ ๋ ธ์ด์ฆ, ์ ์ด ์ฃผ๊ธฐ, MoveIt ํ๋ผ๋ฏธํฐ๋ฅผ ๊ฒํ ํฉ๋๋ค.
๊ณผ์ 2.4: ๊ตฌํ ๊ฒฐ๊ณผ ์ ๋ฆฌ ๋ฐ ๋ณด๊ณ
๋ชฉํ
ํ๋ก์ ํธ ๊ณผ์ ์ ์ ๋ฆฌํ๊ณ , ์๋ฎฌ๋ ์ด์ ๋์์ ๊ธฐ๋กํ๋ฉฐ, ๋ณด๊ณ ์๋ฅผ ์์ฑํฉ๋๋ค.
๊ธฐ์ ์ค๋ช
- ์ฝ๋ ๋ณ๊ฒฝ, Launch ํ์ผ ์ฌ์ฉ๋ฒ, ํ ์คํธ ๊ฒฐ๊ณผ๋ฅผ ๋ช ํํ ์ ๋ฌํฉ๋๋ค.
- ๋น์ ๋ฐ์ดํฐ ์์ฑ/ํ์ฉ ๋ฐ ํ๋ฌ ๋งคํ์ ์ค๋ช ํฉ๋๋ค.
์คํ ๋จ๊ณ
- Git์ผ๋ก ์ฝ๋ ๋ณ๊ฒฝ์ ์ปค๋ฐํฉ๋๋ค.
- Launch ํ์ผ ๋ฐ YAML ์ฌ์ฉ๋ฒ ๋ฌธ์๋ฅผ ์์ฑํฉ๋๋ค.
- ์๋ฎฌ๋ ์ด์ ๋์์ ๋ นํ/์คํฌ๋ฆฐ์ท ์ดฌ์ํฉ๋๋ค.
- ๋ณด๊ณ ์๋ฅผ ์์ฑํฉ๋๋ค:
- ์๋ก : ํ๋ก์ ํธ ๋ชฉํ ๋ฐ ๊ฐ์
- ๊ตฌํ ๋ด์ฉ: ๋น์ /ํ๋ฌ ์ฒ๋ฆฌ,
teleop_node
, Launch ํ์ผ - ์คํ ๋ฐฉ๋ฒ: Launch ํ์ผ ๋ฐ ์ฅ์น ์ค์
- ๊ฒฐ๊ณผ ๋ฐ ๊ฒ์ฆ: ์์ฐ ๊ฒฐ๊ณผ, ์ ์ด ์ฑ๋ฅ
- ๋ฌธ์ ์ ๋ฐ ํด๊ฒฐ
- ํฅํ ๊ฐ์ ์
- ๊ฒฐ๋ก
- ์ฝ๋, ๋ฌธ์, ์์/์คํฌ๋ฆฐ์ท์ ๊ณต์ ํฉ๋๋ค.
ํต์ฌ ํ์ผ/๊ฐ๋
teleop_node.py
- Launch/YAML ํ์ผ
- ๋น์ /ํ๋ฌ ํ์ฉ ์ค๋ช
- ์์ฐ ์์/์คํฌ๋ฆฐ์ท
- ๋ณด๊ณ ์
์์ ๊ฒฐ๊ณผ
๊ตฌํ ๊ฒฐ๊ณผ๊ฐ ์ ๋ฆฌ๋๊ณ , ์์ฐ๊ณผ ๋ณด๊ณ ์๊ฐ ์์ฑ๋ฉ๋๋ค.
๋ฌธ์ ํด๊ฒฐ ํ
- ๋น์ ๋ฐ์ดํฐ ํ์๊ณผ
JointState
๋ณํ์ ์์ธํ ์ค๋ช ํฉ๋๋ค. - ์์ฐ ์์์ ๋น์ ์ ๋ ฅ ์์ค๋ฅผ ํฌํจํฉ๋๋ค.