์ƒˆ์†Œ์‹

python/ROS

ROS ๊ธฐ๋ณธ์šฉ์–ด: ํŒŒ์ผ์‹œ์Šคํ…œ ๋ ˆ๋ฒจ

  • -
๐Ÿ“˜

Package


๐Ÿ‘‰๐Ÿผ Main unit for organizing software in ROS. A package may contain ROS runtime processes (nodes), a ROS-dependent library, datasets, configuration files

  • ROS ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ€์žฅ ์ž‘์€ ์œ ๋‹›
  • ๋…ธ๋“œ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ๋ฐ์ดํ„ฐ์…‹, ์„ค์ •ํŒŒ์ผ ๋“ฑ์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํŒจํ‚ค์ง€์˜ ๊ฒฝ๋กœ๋Š” ROS_PACKAGE_PATH ํ™˜๊ฒฝ ๋ณ€์ˆ˜์„ ์ฐธ์กฐํ•˜๋ฉฐ, ํ•ด๋‹น ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ๋“ฑ๋ก๋œ ํŒจํ‚ค์ง€๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • catkin build์‹œ์— setup.bash ํŒŒ์ผ์— ROS_PACKAGE_PATH ๋“ฑ ๊ธฐํƒ€ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์—…๋ฐ์ดํŠธ

์š”์•ฝ

http://www.ros.org/browse/list.php

๐Ÿ‘‰๐Ÿผ ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ

<your-package-name>/
โ”œโ”€โ”€ action
โ”œโ”€โ”€ CMakeLists.txt
โ”œโ”€โ”€ include
โ”‚   โ””โ”€โ”€ <your-package-name>
โ”œโ”€โ”€ msg
โ”œโ”€โ”€ package.xml
โ”œโ”€โ”€ scripts
โ”œโ”€โ”€ src
โ””โ”€โ”€ srv
  • ์‚ฌ์šฉ์ž๊ฐ€ ์ž์œ ๋กญ๊ฒŒ ๋””๋ ‰ํ† ๋ฆฌ, ํŒŒ์ผ ์ถ”๊ฐ€ ๊ฐ€๋Šฅ
  • CMakeLists.txt: ํŒจํ‚ค์ง€ ๋นŒ๋“œ, ์ธ์Šคํ†จ ๋“ฑ์˜ ์„ค์ • ํŒŒ์ผ
  • Package Manifests (package.xml): ํŒจํ‚ค์ง€ ์ •๋ณด, ์˜์กด ํŒจํ‚ค์ง€ ๋ฆฌ์ŠคํŠธ ๋“ฑ

๐Ÿ‘‰๐Ÿผ catkin ๋„๊ตฌ๋ฅผ ์ด์šฉํ•ด ํŒจํ‚ค์ง€ ์ƒ์„ฑ. ์ฒ˜์Œ ์ƒ์„ฑํ•˜๊ณ  ๋‚˜๋ฉด...

<your-first-package>/
โ”œโ”€โ”€ CMakeLists.txt
โ”œโ”€โ”€ include
โ”‚   โ””โ”€โ”€ <your-first-package>
โ”œโ”€โ”€ package.xml
โ””โ”€โ”€ src

๐Ÿ‘‰๐Ÿผ ํŒ

  • ํŒจํ‚ค์ง€๋Š” ์ตœ์†Œํ•œ์˜ ๊ธฐ๋Šฅ์œผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๊ด€๋ฆฌ์— ์œ ๋ฆฌ
  • ํŠนํžˆ Message, Service, Action ๋“ฑ์€ ๋”ฐ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๋งŒ๋“œ๋Š”๊ฒŒ ์ถ”ํ›„ ๊ด€๋ฆฌ ๋ฐ ๊ฐœ๋ฐœ์— ์œ ๋ฆฌํ•จ.
    • ex) <your_project_name>_msgs

๐Ÿ‘‰๐Ÿผ ์‚ฌ์šฉ์ž์˜ ๋ชจ๋“  ํŒจํ‚ค์ง€๋Š” catkin workspace ๋‚ด์˜ src ๋””๋ ‰ํ† ๋ฆฌ ์•„๋ž˜์— ์œ„์น˜ํ•ด์•ผ ํ•จ. (์ค‘์š”)

๊ธฐ๋ณธ ํŒจํ‚ค์ง€ ๊ฒฝ๋กœ (ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๋กœ ์„ค์น˜ํ•œ ๊ฒฝ์šฐ): /opt/ros/melodic/share

๐Ÿ‘‰๐Ÿผ ์‚ฌ์šฉ์ž์˜ ํŒจํ‚ค์ง€๋ฅผ ๋นŒ๋“œํ•˜๋ฉด ROS_PACKAGE_PATH๊ฐ€ ์—…๋ฐ์ดํŠธ ๋จ (์ƒˆ๋กœ์šด ํŒจํ‚ค์ง€์ธ ๊ฒฝ์šฐ)

๐Ÿ‘‰๐Ÿผ ROS_PACKAGE_PATH์˜ ์„ค์ •์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ๊ฐœ์˜ workspace๋ฅผ ์šด์šฉ ๊ฐ€๋Šฅ.

catkin_ws1
โ”œโ”€โ”€ build
โ”œโ”€โ”€ devel
โ”œโ”€โ”€ logs
โ””โ”€โ”€ src
	โ””โ”€โ”€ <your-package1>
	โ””โ”€โ”€ <your-package2>
	...
	โ””โ”€โ”€ <your-packagen>
catkin_ws2
โ”œโ”€โ”€ build
โ”œโ”€โ”€ devel
โ”œโ”€โ”€ logs
โ””โ”€โ”€ src
	โ””โ”€โ”€ <your-package1>
	โ””โ”€โ”€ <your-package2>
	...
	โ””โ”€โ”€ <your-packagen>

๐Ÿ‘‰๐Ÿผ catkin build ํ›„ ros ํˆด์„ ์ด์šฉํ•ด ํŒจํ‚ค์ง€๋กœ์˜ ์ ‘๊ทผ์ด ์•ˆ๋œ๋‹ค๋ฉด? โ‡’ ROS_PACKAGE_PATH๋ฅผ ์—…๋ฐ์ดํŠธ ํ•ด์ค˜์•ผ ํ•จ

$ source ~/.bashrc

Meta package


๐Ÿ‘‰๐Ÿผ Represent a group of related other packages

  • ํŒจํ‚ค์ง€์˜ ํŠน์ˆ˜ํ•œ ํ˜•ํƒœ
  • ์–ด๋–ค ํŒจํ‚ค์ง€๋“ค์„ ํŠน์ • ๋ชฉ์  (๋กœ๋ด‡, ์˜์กด๊ด€๋ จ ๋“ฑ)์œผ๋กœ ๋ฌถ์„ ๋•Œ ์‚ฌ์šฉ
  • ๋ฐฐํฌ์‹œ ์˜์กด์„ฑ์„ ์ฒดํฌํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ธฐ์กด ํŒจํ‚ค์ง€์™€ ๊ตฌ๋ถ„์„ ์œ„ํ•ด package.xml, CMakeLists.txt์— ๊ฐ๊ฐ ๋ฉ”ํƒ€ ํŒจํ‚ค์ง€๋ฅผ ์œ„ํ•œ ๊ตฌ๋ฌธ ์ถ”๊ฐ€

package.xml

<export>
	<metapackage />
</export>
CMakeLists.txt

cmake_minimum_required(VERSION 2.8.3)
project(<PACKAGE_NAME>)
find_package(catkin REQUIRED)
catkin_metapackage()

Message (.msg) types


http://wiki.ros.org/msg

๐Ÿ‘‰๐Ÿผ Message descriptions, define the data structures for messages sent in ROS

  • ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ๋•Œ, ๋ฉ”์‹œ์ง€์˜ ๋‚ด์šฉ์„ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•œ ํŒŒ์ผ
  • ํ™•์žฅ์ž๋Š” .msg
  • ํŒจํ‚ค์ง€ ๋‚ด์˜ msg ๋””๋ ‰ํ† ๋ฆฌ์— ์œ„์น˜ํ•˜๋„๋ก ํ•จ

๐Ÿ‘‰๐Ÿผ Message Description Specification

The format of this language is simple: a message description is a list of data field descriptions and constant definitions on separate lines

Message ํŒŒ์ผ ๊ตฌ์„ฑ

field_type1 field_name1
field_type2 field_name2
field_type3 field_name3
Message ์˜ˆ์‹œ 

float64 x
float64 y
float64 z

Built-in types

Primitive TypeSerializationC++Python2Python3
bool (1)unsigned 8-bit intuint8_tย (2)bool
int8signed 8-bit intint8_tint
uint8unsigned 8-bit intuint8_tintย (3)
int16signed 16-bit intint16_tint
uint16unsigned 16-bit intuint16_tint
int32signed 32-bit intint32_tint
uint32unsigned 32-bit intuint32_tint
int64signed 64-bit intint64_tlongint
uint64unsigned 64-bit intuint64_tlongint
float3232-bit IEEE floatfloatfloat
float6464-bit IEEE floatdoublefloat
stringascii string (4)std::stringstrbytes
timesecs/nsecs unsigned 32-bit intsros::Timerospy.Time
durationsecs/nsecs signed 32-bit intsros::Durationrospy.Duration

Field Name

  • C++, Python ๋“ฑ์œผ๋กœ translate ๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ, ์ผ๋ฐ˜์ ์ธ ํ”„๋กœ๊ทธ๋žจ์–ธ์–ด์˜ ๊ทœ์น™์„ ๋”ฐ๋ฆ„
  • ์˜์–ด, ์ˆซ์ž, underscores์˜ ์กฐํ•ฉ
  • ์ˆซ์ž๋กœ ์‹œ์ž‘๋˜๋Š” ๊ฑด ์•ˆ๋จ

Constants

  • ์ƒ์ˆ˜ (Constants)๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • =๋กœ ์ด๋ฆ„๊ณผ ๊ฐ’์„ ๋ถ„๋ฆฌํ•œ๋‹ค.
constanttype1 CONSTANTNAME1=constantvalue1
constanttype2 CONSTANTNAME2=constantvalue2
ex)
int32 X=123
int32 Y=-123
string FOO=foo

Header

  • Frame ID๋‚˜ ์‹œ๊ฐ„ ๋“ฑ์ด ํฌํ•จ
  • ROS์—์„œ ์ œ๊ณตํ•˜๋Š” ํŠน์ˆ˜ํ•œ ํ˜•ํƒœ์˜ ๋ฉ”์‹œ์ง€ ํƒ€์ž…
  • std_msgs/msg/Header.msg์— ์ •์˜๋˜์–ด ์žˆ์Œ
Header header
Header.msg

#Standard metadata for higher-level flow data types
#sequence ID: consecutively increasing ID
uint32 seq
#Two-integer timestamp that is expressed as:
# * stamp.secs: seconds (stamp_secs) since epoch
# * stamp.nsecs: nanoseconds since stamp_secs
# time-handling sugar is provided by the client library
time stamp
#Frame this data is associated with
string frame_id

Service (.srv) types


๐Ÿ‘‰๐Ÿผ Service descriptions, define the request and response data structures for services in ROS

  • ์„œ๋น„์Šค๋ฅผ ์ •์˜ ํ•˜๊ธฐ ์œ„ํ•œ ํŒŒ์ผ
  • ํ™•์žฅ์ž๋Š” .srv
  • ํŒจํ‚ค์ง€ ๋‚ด์˜ srv ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด์— ์œ„์น˜

๐Ÿ‘‰๐Ÿผ Service Description Specification: consists of a request and a response msg type, separated by โ€˜---'.

field_type field_name_requests
---
field_type field_name_responses

  • โ€˜---'๋กœ request, response ๊ตฌ๋ถ„.
  • ๋ชจ๋“  ๋ฉ”์‹œ์ง€ ํƒ€์ž… ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ request, reponse๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ๋ฉ”์‹œ์ง€์™€๋Š” ๋ฐ˜๋Œ€๋กœ ๋งŒ๋“ค์–ด์ ธ ์žˆ๋Š” ๊ฒƒ์ด ๊ฑฐ์˜ ์—†์Œ (๋ชจ๋“  ์กฐํ•ฉ์„ ๋‚ผ ์ˆ˜ ์—†์œผ๋‹ˆ...), ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•จ

Action (.action) types


๐Ÿ‘‰๐Ÿผ Action descriptions, define the goal, feedback, result data structures for actions in ROS

  • Action์„ ์ •์˜ ํ•˜๊ธฐ ์œ„ํ•œ ํŒŒ์ผ
  • ํ™•์žฅ์ž๋Š” .action
  • ํŒจํ‚ค์ง€ ๋‚ด์˜ action ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด์— ์œ„์น˜

๐Ÿ‘‰๐Ÿผ Action Description Specification: consists of a goal, result and feedback msg type, separated by โ€˜---'.

fieldtype1 fieldname_for_goal
---
fieldtype2 fieldname_for_result
---
fieldtype3 fieldname_for_feedback

  • โ€˜---'๋กœ goal, result, feedback ๊ตฌ๋ถ„
  • ๋ชจ๋“  ๋ฉ”์‹œ์ง€ ํƒ€์ž… ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ์„œ๋น„์Šค์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋งŒ๋“ค์–ด์ ธ ์žˆ๋Š” ๊ฒƒ์ด ๊ฑฐ์˜ ์—†์Œ (๋ชจ๋“  ์กฐํ•ฉ์„ ๋‚ผ ์ˆ˜ ์—†์œผ๋‹ˆ...), ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•จ.


Uploaded by N2T

Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.