์ƒˆ์†Œ์‹

python/ROS

ROS ๊ธฐ๋ณธ์‹ค์Šต

  • -
๐Ÿงท

roscore๋ฅผ ์‹คํ–‰ํ•ด ๋ด…์‹œ๋‹ค


ํ„ฐ๋ฏธ๋„์„ ์‹คํ–‰ํ•˜๊ณ , roscore๋ฅผ ์‹คํ–‰ํ•ด ๋ด…์‹œ๋‹ค.

์ด์ „ ๊ฐœ๋…์„ค๋ช…์—์„œ ๋…ธ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„  ๋ฐ˜๋“œ์‹œ master๊ฐ€ ํ•„์š”ํ•˜๋‹ค๊ณ  ํ•˜์˜€์Šต๋‹ˆ๋‹ค. roscore๋Š” master, rosout, parameter server๋ฅผ ๋™์‹œ์— ์‹คํ–‰ํ•ด ์ค๋‹ˆ๋‹ค.

$ roscore 
... logging to /home/byeongkyu/.ros/log/21fb620a-a800-11ea-9d0f-00e18c79612a/roslaunch-byeongkyu-XPS-15-9570-12628.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://byeongkyu-XPS-15-9570:39705/
ros_comm version 1.14.5


SUMMARY
========

PARAMETERS
 * /rosdistro: melodic
 * /rosversion: 1.14.5

NODES

auto-starting new master
process[master]: started with pid [12648]
ROS_MASTER_URI=http://byeongkyu-XPS-15-9570:11311/

setting /run_id to 21fb620a-a800-11ea-9d0f-00e18c79612a
process[rosout-1]: started with pid [12659]
started core service [/rosout]

์›๋ž˜๋Š” ๊ฐ ์–ธ์–ด๋ณ„ tutorial์šฉ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•˜์ง€๋งŒ, ros-melodic-desktop-full์„ ์„ค์น˜ํ•˜๋ฉด ์ด๋ฏธ ์„ค์น˜๋˜์–ด ์žˆ์„๊ฒ๋‹ˆ๋‹ค.

Node๋ฅผ ์‹คํ–‰ํ•ด ๋ด…์‹œ๋‹ค.


roscore๋ฅผ ์‹คํ–‰ํ•œ ์ƒํƒœ์—์„œ, ํ„ฐ๋ฏธ๋„์„ ํ•˜๋‚˜ ๋” ์‹คํ–‰ํ•˜๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

$ rosrun roscpp_tutorials talker
[ INFO] [1591453178.734187896]: hello world 0
[ INFO] [1591453178.834246343]: hello world 1
[ INFO] [1591453178.934399239]: hello world 2
[ INFO] [1591453179.034471362]: hello world 3
[ INFO] [1591453179.134447388]: hello world 4
[ INFO] [1591453179.234447849]: hello world 5

ํ˜„์žฌ talker๋ผ๋Š” ์‹คํ–‰ ํŒŒ์ผ์ด ์‹คํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋…ธ๋“œ ํ•˜๋‚˜๊ฐ€ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

๋…ธ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„  rosrun์ด๋ผ๋Š” ๋ช…๋ น์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

$ rosrun -h
Usage: rosrun [--prefix cmd] [--debug] PACKAGE EXECUTABLE [ARGS]
rosrun will locate PACKAGE and try to find
an executable named EXECUTABLE in the PACKAGE tree.
If it finds it, it will run it with ARGS.

์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ๋…ธ๋“œ๋ฅผ ์ข…๋ฃŒํ•˜๋ ค๋ฉด? โ‡’ ํ•ด๋‹น ํ„ฐ๋ฏธ๋„์—์„œ ctrl+c๋ฅผ ๋ˆŒ๋Ÿฌ์ค๋‹ˆ๋‹ค.

Command tools related with nodes

๋…ธ๋“œ์™€ ๊ด€๋ จํ•œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋„๊ตฌ๋“ค์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ๋…ธ๋“œ๊ฐ€ ์‹คํ–‰๋œ ์ƒํƒœ์—์„œ, ํ„ฐ๋ฏธ๋„์„ ํ•˜๋‚˜ ๋” ์—ด๊ณ  ๋‹ค์Œ์˜ ๋ช…๋ น์–ด๋“ค์„ ์‹คํ–‰ํ•ด๋ด…์‹œ๋‹ค.

$ rosnode list
/rosout
/talker
$ rosnode info talker
--------------------------------------------------------------------------------
Node [/talker]
Publications: 
 * /chatter [std_msgs/String]
 * /rosout [rosgraph_msgs/Log]

Subscriptions: None

Services: 
 * /talker/get_loggers
 * /talker/set_logger_level


contacting node http://byeongkyu-XPS-15-9570:34539/ ...
Pid: 13188
Connections:
 * topic: /rosout
    * to: /rosout
    * direction: outbound (45503 - 127.0.0.1:44826) [11]
    * transport: TCPROS

node์™€ ๊ด€๋ จํ•ด์„  rosnode๋ผ๋Š” ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ rosnode -h
rosnode is a command-line tool for printing information about ROS Nodes.

Commands:
        rosnode ping    test connectivity to node
        rosnode list    list active nodes
        rosnode info    print information about node
        rosnode machine list nodes running on a particular machine or list machines
        rosnode kill    kill a running node
        rosnode cleanup purge registration information of unreachable nodes

Type rosnode <command> -h for more detailed usage, e.g. 'rosnode ping -h'

Understanding ROS Nodes

  • ๋…ธ๋“œ์˜ ์ด๋ฆ„์€ ์œ ์ผํ•ด์•ผํ•จ, ๋™์ผํ•œ ๋…ธ๋“œ ์ด๋ฆ„์œผ๋กœ ์‹คํ–‰ํ•˜๋ฉด ์ด์ „์— ์‹คํ–‰๋˜์—ˆ๋˜ ๋…ธ๋“œ๊ฐ€ ์ž๋™์œผ๋กœ ์‹คํ–‰ ์ข…๋ฃŒ
  • ์‹คํ–‰ํŒŒ์ผ๋ช…์ด ์•„๋‹ˆ๋ผ, ๋…ธ๋“œ์˜ ์ด๋ฆ„์ด๋ผ๋Š” ๊ฒƒ์— ์œ ์˜!
  • talker ๋…ธ๋“œ ์ด๋ฆ„ ๊ธฐ๋ณธ๊ฐ’์€ talker
  • ์‹คํ–‰ ์‹œ ๋…ธ๋“œ์˜ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋ ค๋ฉด? โ†’ __name ์„ ์‚ฌ์šฉ
$ rosrun roscpp_tutorials talker __name:=another_talker

๋…ธ๋“œ๋“ค์ด ์‹คํ–‰๋˜์–ด ์žˆ๋Š” ์ƒํƒœ๋ฅผ ๋ณด๊ณ  ์‹ถ์„ ๋•Œ, rosnode๋ฅผ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ, GUI ๋„๊ตฌ๋„ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

$ rqt_graph

talker ๋…ธ๋“œ๋ฅผ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค. roscore๋Š” ๋†”๋‘์„ธ์š”~

Understanding ROS Topics


์ด์ œ ํ„ฐ๋ฏธ๋„์„ ๋‘๊ฐœ ์‹คํ–‰ํ•˜๊ณ , ๊ฐ๊ฐ์˜ ํ„ฐ๋ฏธ๋„์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‹คํ–‰ํ•ด ์ค๋‹ˆ๋‹ค.

$ rosrun roscpp_tutorials talker
$ rosrun roscpp_tutorials listener

ํ„ฐ๋ฏธ๋„์„ ํ•˜๋‚˜ ๋” ์‹คํ–‰ํ•˜๊ณ , ์•„๊นŒ ๋ฐฐ์› ๋˜ rosnode๋ฅผ ์‚ฌ์šฉํ•ด๋ด…์‹œ๋‹ค.

$ rosnode list
/listener
/rosout
/talker

๋‘ ๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. rqt_graph๋ฅผ ์‹คํ–‰ํ•ด ๋ณผ๊นŒ์š”?

talker, listener ๋…ธ๋“œ๊ฐ€ ์‹คํ–‰๋˜์–ด ์žˆ๊ณ , chatter๋ผ๋Š” ํ† ํ”ฝ์„ ์ด์šฉํ•ด ์—ฐ๊ฒฐ์ด ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ„ฐ๋ฏธ๋„์—์„œ๋„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค์‹œํ”ผ, talker ๋…ธ๋“œ๊ฐ€ listener ๋…ธ๋“œ์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•ด ์ฃผ๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Command tools related with topics

rostopic ๋„๊ตฌ๋ฅผ ์ด์šฉํ•ด์„œ ํ† ํ”ฝ์— ๊ด€๋ จํ•œ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์ถ”ํ›„ ์•„์ฃผ ๋งŽ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.)

$ rostopic list
/chatter
/rosout
/rosout_agg
$ rostopic -h
rostopic is a command-line tool for printing information about ROS Topics.

Commands:
        rostopic bw     display bandwidth used by topic
        rostopic delay  display delay of topic from timestamp in header
        rostopic echo   print messages to screen
        rostopic find   find topics by type
        rostopic hz     display publishing rate of topic    
        rostopic info   print information about active topic
        rostopic list   list active topics
        rostopic pub    publish data to topic
        rostopic type   print topic or field type

Type rostopic <command> -h for more detailed usage, e.g. 'rostopic echo -h'

ํ† ํ”ฝ์˜ ์ •๋ณด ํ™•์ธ

$ rostopic info /chatter
Type: std_msgs/String

Publishers: 
 * /talker (http://byeongkyu-XPS-15-9570:37369/)

Subscribers: 
 * /listener (http://byeongkyu-XPS-15-9570:43897/)

ํ† ํ”ฝ์˜ ๋‚ด์šฉ ํ™•์ธ

$ rostopic echo /chatter                                                                                                                                                                   
data: "hello world 326"                                                                                                                                                                                                     
---
data: "hello world 327"
---
data: "hello world 328"
---
data: "hello world 329"
---
data: "hello world 330"
---

ํ† ํ”ฝ์˜ ํƒ€์ž… ํ™•์ธ

$ rostopic type /chatter
std_msgs/String

ํ† ํ”ฝ์ด ์–ผ๋งˆ๋‚˜ ์ž์ฃผ publish๋˜๊ณ  ์žˆ๋Š”๊ฐ€?

$ rostopic hz /chatter
subscribed to [/chatter]
average rate: 9.994
        min: 0.099s max: 0.101s std dev: 0.00042s window: 9
average rate: 10.000
        min: 0.099s max: 0.101s std dev: 0.00047s window: 19

๋ฌผ๋ก  GUI ๋„๊ตฌ๋„ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

$ rosrun rqt_topic rqt_topic

Remapping Topics

  • โ€œtalkerโ€ ๋…ธ๋“œ๋Š” โ€œchatterโ€๋ž€ ํ† ํ”ฝ ์ด๋ฆ„์œผ๋กœ publish ํ•˜๊ณ  ์žˆ๊ณ , โ€œlistenerโ€ ๋…ธ๋“œ๋Š” โ€œchatterโ€๋ž€ ํ† ํ”ฝ ์ด๋ฆ„์„ subscribe ํ•˜๊ณ  ์žˆ๋‹ค.
  • ํ† ํ”ฝ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋ ค๋ฉด?
    • ์ฝ”๋“œ๋ฅผ ๋ฐ”๊พผ๋‹ค โ†’ ํ•„์š”ํ• ๋•Œ๋งˆ๋‹ค ์ฝ”๋“œ๋ฅผ ๋ฐ”๊พธ๊ณ  ๋นŒ๋”ฉํ•˜๊ณ ... โ†’ ๋ฒˆ๊ฑฐ๋กญ๋‹ค
    • ์ด๋Ÿด๋• remapping ๊ธฐ๋Šฅ ์‚ฌ์šฉ :=
$ rosrun roscpp_tutorials talker chatter:=another_chatter

rostopic์œผ๋กœ ํ™•์ธํ•ด ๋ด…์‹œ๋‹ค.

$ rostopic list
/another_chatter
/rosout
/rosout_agg

roslaunch ํ™œ์šฉํ•˜๊ธฐ

๋งค๋ฒˆ ๋…ธ๋“œ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค rosrun์„ ์ด์šฉํ•˜๋ฉด ๋งค์šฐ ๋ถˆํŽธํ•ฉ๋‹ˆ๋‹ค. ํ•œ๊บผ๋ฒˆ์— ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š”, ๋˜ remapping์ด๋‚˜ ๋…ธ๋“œ์˜ ์ด๋ฆ„์„ ์‰ฝ๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์–ด์•ผ ํ•˜๊ฒ ์ฃ ?

์ด๋Ÿด๋•Œ roslaunch๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

$ roslaunch -h                                                                                                                                                                             
Usage: roslaunch [options] [package] <filename> [arg_name:=value...]                                                                                                                                                        
       roslaunch [options] <filename> [<filename>...] [arg_name:=value...]

If <filename> is a single dash ('-'), launch XML is read from standard input.

roslaunch (http://wiki.ros.org/roslaunch)๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์†Œ๊ฐœํ•˜๋ฉด,8

  • XML ํฌ๋ฉง์œผ๋กœ ์ž‘์„ฑ
  • ํŒจํ‚ค์ง€ ๋‚ด์˜ launch ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด์— ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ํ†ต์ƒ์ ์ž„
  • ํ™•์žฅ์ž๋Š” .launch
  • roslaunch ๋‚ด์— ์‹คํ–‰๋˜๋Š” node ๋“ค์— ๋Œ€ํ•ด ์‹คํ–‰ ์šฐ์„  ์ˆœ์œ„๋‚˜, ๋Œ€๊ธฐ ํ›„ ์‹คํ–‰ ๊ธฐ๋Šฅ์€ ์—†์Œ
  • roslaunch๋ฅผ ์ด์šฉํ•˜์—ฌ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ, roscore๊ฐ€ ์‹คํ–‰๋˜์–ด ์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ์—” ์ž๋™์œผ๋กœ ์‹คํ–‰
$ roslaunch roscpp_tutorials talker_listener.launch

์ € ํŒŒ์ผ ๋‚ด์šฉ์„ ์‚ดํŽด๋ณผ๊นŒ์š”?

$ rosed roscpp_tutorials talker_listener.launch
<launch>
  <node name="listener" pkg="roscpp_tutorials" type="listener" output="screen"/>
  <node name="talker" pkg="roscpp_tutorials" type="talker" output="screen"/>
</launch>

  • ๋…ธ๋“œ์˜ ์ด๋ฆ„, ํŒจํ‚ค์ง€, ์‹คํ–‰ํ™”์ผ๋ช…์„ ์ ์–ด์ค€๋‹ค
  • output์€ sysout์˜ ์ถœ๋ ฅ ๋ฐฉํ–ฅ. screen์€ ๋ณด๊ณ  ์žˆ๋Š” ํ™”๋ฉด์œผ๋กœ, log๋Š” log๋กœ...
  • roslaunch์˜ ๋‚ด๋ถ€ ์˜ต์…˜์€ ์ด๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋งŽ๊ณ  ๋” ๋ณต์žกํ•จ, ์ฐจ์ธฐ ๋ฐฐ์›Œ๋‚ด๊ฐ‘์‹œ๋‹ค.

๋‹ค์Œ ์‹ค์Šต์„ ์œ„ํ•ด roscore๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€๋Š” ์ „๋ถ€ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

Understanding ROS Services


ํ„ฐ๋ฏธ๋„์„ ์—ด๊ณ  ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋…ธ๋“œ๋ฅผ ์‹คํ–‰ํ•ด ๋ด…์‹œ๋‹ค.

$ rosrun roscpp_tutorials add_two_ints_server

Command tools related with service

$ rosservice -h
Commands:
        rosservice args print service arguments
        rosservice call call the service with the provided args
        rosservice find find services by service type
        rosservice info print information about service
        rosservice list list active services
        rosservice type print service type
        rosservice uri  print service ROSRPC uri

Type rosservice <command> -h for more detailed usage, e.g. 'rosservice call -h'

$ rosservice list
/add_two_ints
/add_two_ints_server/get_loggers
/add_two_ints_server/set_logger_level
/rosout/get_loggers
/rosout/set_logger_level

  • โ€œadd_two_ints_serverโ€ ๋…ธ๋“œ๋Š” โ€œ/add_two_intsโ€ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณต ์ค‘
  • ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜์ง€?
    • ์„œ๋น„์Šค๋ฅผ ํ˜ธ์ถœ(call)ํ•˜๊ธฐ ์œ„ํ•œ ํด๋ผ์ด์–ธํŠธ ๋…ธ๋“œ๋ฅผ ๋งŒ๋“ ๋‹ค
    • rosservice๋ฅผ ์ด์šฉํ•ด์„œ ํ˜ธ์ถœ
$ rosrun roscpp_tutorials add_two_ints_client 1 2
[ INFO] [1571110622.533042405]: Sum: 3
$ rosservice call /add_two_ints "{a: 1, b: 3}" 
sum: 4

๋‹ค์Œ ์‹ค์Šต์„ ์œ„ํ•ด roscore๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€์— ๋Œ€ํ•ด ์‹คํ–‰์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

Understanding ROS Parameters


ํŒŒ๋ผ๋ฏธํ„ฐ ์„œ๋ฒ„๋Š” roscore๊ฐ€ ์‹คํ–‰๋˜๋ฉด ์ž๋™์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

  • Parameter Server์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ฑฐ๋‚˜, ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ๋„ ์žˆ์Œ
  • Parameter ๊ด€๋ จ ๋ช…๋ น์€ rosparam์œผ๋กœ...
$ rosparam -h
rosparam is a command-line tool for getting, setting, and deleting parameters from the ROS Parameter Server.

Commands:
        rosparam set    set parameter
        rosparam get    get parameter
        rosparam load   load parameters from file
        rosparam dump   dump parameters to file
        rosparam delete delete parameter
        rosparam list   list parameter names

$ rosparam get /rosversion 
'1.14.5

  '

Understanding ROS Actionlib


ํ„ฐ๋ฏธ๋„์„ ๋‹ค์Œ์˜ ๋…ธ๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

$ rosrun actionlib_tutorials fibonacci_server

๋˜ ๋‹ค๋ฅธ ํ„ฐ๋ฏธ๋„์„ ์—ด๊ณ , action client๋ฅผ ์‹คํ–‰ํ•ด ์ค๋‹ˆ๋‹ค.

$ rosrun actionlib_tutorials fibonacci_client

์œ„ ์˜ˆ์ œ๋Š” ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์„ ์ƒ์„ฑํ•˜๋Š” action ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•˜๊ณ , action ํด๋ผ์ด์–ธํŠธ๋Š” ์›ํ•˜๋Š” ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์˜ order๋ฅผ goal๋กœ ์ „๋‹ฌํ•˜๊ณ  feedback, result๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.

$ rosrun actionlib_tutorials fibonacci_server
[ INFO] [1591456445.176265355]: fibonacci: Executing, creating fibonacci sequence of order 20 with seeds 0, 1
[ INFO] [1591456465.176437858]: fibonacci: Succeeded
$ rosrun actionlib_tutorials fibonacci_client
[ INFO] [1591456560.593028380]: Waiting for action server to start.
[ INFO] [1591456560.820829838]: Action server started, sending goal.
[ INFO] [1591456580.821435336]: Action finished: SUCCEEDED

fibonacci_client๊ฐ€ ์‹คํ–‰ํ•˜๋Š” ๋„์ค‘, ์„œ๋ฒ„์˜ feedback ๋ฉ”์‹œ์ง€๊ฐ€ ์–ด๋–ค ๋‚ด์šฉ์„ ๋ณด๋‚ด์˜ค๋Š”์ง€ ํ™•์ธํ•ด ๋ด…์‹œ๋‹ค.

$ rostopic echo /fibonacci/feedback                                                                                                                                                        
header:                                                                                                                                                                                                                     
  seq: 40                                                                                                                                                                                                                   
  stamp:                                                                                                                                                                                                                    
    secs: 1591456685                                                                                                                                                                                                        
    nsecs: 263520350
  frame_id: ''
status: 
  goal_id: 
    stamp: 
      secs: 1591456685
      nsecs: 263147318
    id: "/test_fibonacci-1-1591456685.263147318"
  status: 1
  text: "This goal has been accepted by the simple action server"
feedback: 
  sequence: [0, 1, 1]
---

๋‹ค์Œ ์ง„ํ–‰์„ ์œ„ํ•ด ๋ชจ๋“  ํ„ฐ๋ฏธ๋„์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.


Uploaded by N2T

Contents

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

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