-
Notifications
You must be signed in to change notification settings - Fork 10
ROS_Description
ROS 설치를 위해서는 다음 Dockerfile을 참고해주시기 바랍니다.
Dockerfile for kairproject using ROS
Dockerfile을 참고하여 local에서 ROS를 설치하여 환경을 설정하여 사용하시기 바랍니다.
Dockerfile의 명령줄 앞에 sudo
명령어를 사용하여 설치합니다.
$ cd ~/catkin_ws/src
처음 작업공간을 만들었을 땐는 catkin_ws/src/ 폴더 안에 CMakeLists.txt 파일 하나가 존재합니다.
위의 설치 및 환경설정을 따라오셨으면 catkin_ws/src/ 안에 이미 폴더들이 있을 것 입니다.
catkin_make 명령으로 이 작업공간을 "빌드"하는 것이 가능합니다.
$ cd ~/catkin_ws/
$ catkin_make


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]
- 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 topic, service 두 가지 개념을 사용합니다.
-
Topics
노드는 주어진 토픽에 대해 publishing을 통해 메세지를 보내게 됩니다.
토픽은 메세지의 내용을 구별하는 이름입니다.
특정 종류의 데이터에 관심이 있는 노드는 토픽에 대해서 subscribe 하게 됩니다.
하나의 토픽에 대해 여러개의 publisher와 subscriber가 있을 수 있고, 하나의 노드가 여러개의 토픽으로 publish하고 subscribe 할 수 있습니다. -
Service
publish/subscribe 모델은 단방향 전송이며, 이는 request/reply 상호작용에 적합하지 않습니다.
서비스는 request와 reply 중 한 쌍의 메세지 구조로 정의됩니다.
제공 노드는 이름으로 서비스를 제공하고, service client는 request를 보내고 service server는 응답을 기다림으로써 서비스를 사용합니다.
프로젝트에서 사용된 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
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 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
위의 노드들이 화면에 나올 것 입니다.
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
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
각 coordinate frame 간의 관계, 임의의 time에서 두 coodinate frame간 점, 벡터 등 변환
- 5초 전에 head frame이 world frame에 대해 어느 위치에 있는지
- gripper object의 Pose가 base와 어떤 관련이 있는지

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 |