ROS_Description - kairproject/kair_algorithms_draft GitHub Wiki

ROS ์„ค์น˜

1. Docker ์ด์šฉํ•˜์—ฌ ROS ๋ฐ ํ”„๋กœ์ ํŠธ ํ™˜๊ฒฝ ์‚ฌ์šฉ

ROS ์„ค์น˜๋ฅผ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ Dockerfile์„ ์ฐธ๊ณ ํ•ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. Dockerfile for kairproject using ROS

2. Local์— ROS ์„ค์น˜์™€ ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•œ ํ™˜๊ฒฝ ์„ค์ •

Dockerfile์„ ์ฐธ๊ณ ํ•˜์—ฌ local์—์„œ ROS๋ฅผ ์„ค์น˜ํ•˜์—ฌ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•˜์—ฌ ์‚ฌ์šฉํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. Dockerfile์˜ ๋ช…๋ น์ค„ ์•ž์— sudo ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

ROS Workspace

1. initial workspace

catkin workspace

$ cd ~/catkin_ws/src

์ฒ˜์Œ ์ž‘์—…๊ณต๊ฐ„์„ ๋งŒ๋“ค์—ˆ์„ ๋•๋Š” catkin_ws/src/ ํด๋” ์•ˆ์— CMakeLists.txt ํŒŒ์ผ ํ•˜๋‚˜๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์œ„์˜ ์„ค์น˜ ๋ฐ ํ™˜๊ฒฝ์„ค์ •์„ ๋”ฐ๋ผ์˜ค์…จ์œผ๋ฉด catkin_ws/src/ ์•ˆ์— ์ด๋ฏธ ํด๋”๋“ค์ด ์žˆ์„ ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

ROS ํŒŒ์ผ ๋นŒ๋“œ

catkin_make ๋ช…๋ น์œผ๋กœ ์ด ์ž‘์—…๊ณต๊ฐ„์„ "๋นŒ๋“œ"ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

$ cd ~/catkin_ws/
$ catkin_make  

2. ROS Package ์ƒ์„ฑ/๋นŒ๋“œ

ROS Package ๊ตฌ์„ฑ

workspace_folder/        -- ์ž‘์—…๊ณต๊ฐ„
  src/                   -- ์†Œ์Šค ํด๋”
    CMakeLists.txt       -- catkin์ด ์ œ๊ณตํ•˜๋Š” '์ตœ์ƒ์œ„'์˜ CMake ํŒŒ์ผ,
    package_1/
      CMakeLists.txt     -- package_1์— ๋Œ€ํ•œ CMakeLists.txt ํŒŒ์ผ
      package.xml        -- package_1์— ๋Œ€ํ•œ ๋งค๋‹ˆํŒจ์ŠคํŠธ
    ...
    package_n/
      CMakeLists.txt     -- package_n์— ๋Œ€ํ•œ CMakeLists.txt ํŒŒ์ผ
      package.xml        -- package_n์— ๋Œ€ํ•œ ๋งค๋‹ˆํŒจ์ŠคํŠธ

์˜ˆ์‹œ) std_msgs, roscpp, rospy์— ๋Œ€ํ•œ ์˜์กด์„ฑ์„ ๊ฐ€์ง€๋Š” โ€˜beginner_tutorialsโ€™ ํŒจํ‚ค์ง€๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด catkin_creaet_pkg ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด package.xml๊ณผ CMakeLists.txt์ด ๋“ค์–ด์žˆ๋Š” beginner_tutorials ํด๋”๊ฐ€ ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค.

 $ cd ~/catkin_ws/src
 $ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
 # catkin_create_pkg <package_name> [depend1] [depend2] [depend3]

ROS ์šฉ์–ด

  • Master roscore๋กœ ์‹คํ–‰ํ•˜๊ณ , ๋„ค์ž„์„œ๋ฒ„์™€ ๋น„์Šทํ•œ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.๋งˆ์Šคํ„ฐ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋…ธ๋“œ ์ด๋ฆ„ ๋“ฑ๋ก ๋ฐ ์กฐํšŒ, ๋ฉ”์„ธ์ง€ ํ†ต์‹  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์Šคํ„ฐ๊ฐ€ ์—†์œผ๋ฉด ๋…ธ๋“œ๋Š” ์„œ๋กœ๋ฅผ ์ฐพ๊ณ  ๋ฉ”์„ธ์ง€๋ฅผ ๊ตํ™˜ํ•˜๊ฑฐ๋‚˜ ์„œ๋น„์Šค๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
roscore
  • Nodes ๋…ธ๋“œ๋Š” ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ตœ์†Œ ๋‹จ์œ„ ๋Ÿฐํƒ€์ž„ ํ”„๋กœ์„ธ์Šค ์ž…๋‹ˆ๋‹ค. ROS ์ œ์–ด ์‹œ์Šคํ…œ์€ ๋งŽ์€ ๋…ธ๋“œ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ•˜๋‚˜์˜ ๋…ธ๋“œ๋Š” gripper position ์ œ์–ด, ํ•˜๋‚˜์˜ ๋…ธ๋“œ๋Š” ๊ฐ๊ฐ์˜ joint position ์ œ์–ด, ํ•˜๋‚˜์˜ ๋…ธ๋“œ๋Š” manipulator state ์ œ์–ด ๋“ฑ์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ROS ๋…ธ๋“œ๋Š” rospy์™€ roscpp์™€ ๊ฐ™์€ ROS ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค. rosrun ๋ช…๋ น์œผ๋กœ ํŒจํ‚ค์ง€ ์•ˆ์˜ ๋…ธ๋“œ๋ฅผ ์ง์ ‘ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.
rosrun kairproject openmanipulator
# rosrun [package_name] [node_name]
  • Messages ๋…ธ๋“œ๋Š” ๋ฉ”์„ธ์ง€๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ์„œ๋กœ ํ†ต์‹ ํ•ฉ๋‹ˆ๋‹ค.

ROS ํ†ต์‹ 

ROS์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํ†ต์‹  ๊ฐœ๋…์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.
์—ฌ๊ธฐ์„œ๋Š” ROS topic, service ๋‘ ๊ฐ€์ง€ ๊ฐœ๋…์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • Topics
    ๋…ธ๋“œ๋Š” ์ฃผ์–ด์ง„ ํ† ํ”ฝ์— ๋Œ€ํ•ด publishing์„ ํ†ตํ•ด ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ํ† ํ”ฝ์€ ๋ฉ”์„ธ์ง€์˜ ๋‚ด์šฉ์„ ๊ตฌ๋ณ„ํ•˜๋Š” ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ํŠน์ • ์ข…๋ฅ˜์˜ ๋ฐ์ดํ„ฐ์— ๊ด€์‹ฌ์ด ์žˆ๋Š” ๋…ธ๋“œ๋Š” ํ† ํ”ฝ์— ๋Œ€ํ•ด์„œ subscribe ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ํ† ํ”ฝ์— ๋Œ€ํ•ด ์—ฌ๋Ÿฌ๊ฐœ์˜ publisher์™€ subscriber๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๊ณ , ํ•˜๋‚˜์˜ ๋…ธ๋“œ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ† ํ”ฝ์œผ๋กœ publishํ•˜๊ณ  subscribe ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Service
    publish/subscribe ๋ชจ๋ธ์€ ๋‹จ๋ฐฉํ–ฅ ์ „์†ก์ด๋ฉฐ, ์ด๋Š” request/reply ์ƒํ˜ธ์ž‘์šฉ์— ์ ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์„œ๋น„์Šค๋Š” request์™€ reply ์ค‘ ํ•œ ์Œ์˜ ๋ฉ”์„ธ์ง€ ๊ตฌ์กฐ๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค. ์ œ๊ณต ๋…ธ๋“œ๋Š” ์ด๋ฆ„์œผ๋กœ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๊ณ , service client๋Š” request๋ฅผ ๋ณด๋‚ด๊ณ  service server๋Š” ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆผ์œผ๋กœ์จ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

ROS msg/srv

ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉ๋œ msg, srv ์ž…๋‹ˆ๋‹ค. Openmanipulator ์ œ์กฐ์‚ฌ ROBOTIS ์—์„œ ์ œ๊ณตํ•˜๋Š” open_manipulator_msgs ์ž…๋‹ˆ๋‹ค.

from gazebo_msgs.srv import DeleteModel, GetModelState, SpawnModel from geometry_msgs.msg import Pose from open_manipulator_msgs.msg import KinematicsPose, OpenManipulatorState from sensor_msgs.msg import JointState from std_msgs.msg import Float64

JointPosition.msg

string[]   joint_name
float64[]  position
float64    max_accelerations_scaling_factor
float64    max_velocity_scaling_factor

example of srv file

int64 A
int64 B
---
int64 Sum

ROS topic

ํ˜„์žฌ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ROS topic list๋ฅผ ์•Œ์•„๋ด…์‹œ๋‹ค.

$ rostopic list
/open_manipulator/gripper_position/command
/open_manipulator/gripper_sub_position/command
/open_manipulator/joint1_position/command
/open_manipulator/joint2_position/command
/open_manipulator/joint3_position/command
/open_manipulator/joint4_position/command

์œ„์˜ ๋…ธ๋“œ๋“ค์ด ํ™”๋ฉด์— ๋‚˜์˜ฌ ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

ROS Publisher

joint position
node /open_manipulator/gripper_position/command, open_manipulator/gripper_sub_position/command, /open_manipulator/joint1_position/command, /open_manipulator/joint2_position/command, /open_manipulator/joint3_position/command, /open_manipulator/joint4_position/command
msg Float64

์ฝ”๋“œ ์œ„์น˜: ros_interface.py line 52 init_publisher_node

ROS Subscriber

joint state kinematics_pose openmanipulator state
node /open_manipulator/joint_states /open_manipulator/gripper/kinematics_pose /open_manipulator/states
msg JointState KinematicsPose OpenManipulatorState
callback joint_state_callback kinematics_pose_callback robot_state_callback

์ฝ”๋“œ ์œ„์น˜: ros_interface.py line 77 init_subscriber_node

ROS tf(transformation)

๊ฐ coordinate frame ๊ฐ„์˜ ๊ด€๊ณ„, ์ž„์˜์˜ time์—์„œ ๋‘ coodinate frame๊ฐ„ ์ , ๋ฒกํ„ฐ ๋“ฑ ๋ณ€ํ™˜

  • 5์ดˆ ์ „์— head frame์ด world frame์— ๋Œ€ํ•ด ์–ด๋А ์œ„์น˜์— ์žˆ๋Š”์ง€
  • gripper object์˜ Pose๊ฐ€ base์™€ ์–ด๋–ค ๊ด€๋ จ์ด ์žˆ๋Š”์ง€

Base data types (Quaternion, Vector, Point, Pose, Transform)

ROS geometry_msg ํƒ€์ž… ์ค‘์—์„œ transform data types

type tf raw message define
Quaternion tf::Quaternion float64 x,float64 y,float64 z,float64 w
Vector tf::Vector3 float64 x,float64 y,float64 z
Point tf::Point float64 x,float64 y,float64 z
Pose tf::Pose Point position,Quaternion orientation
Transfer tf::Transform Vector3 translaion,Quaternion rotation