Skip to content
Subin Yang edited this page Jul 2, 2019 · 3 revisions

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

KAIR

RL Algorithms

Simulator

OpenManipulator

  • Setup
  • Default Controller
  • Demo Controller

Sim2Real

  • Domain Randomization

Misc

Clone this wiki locally