Skip to content

[Bug] Increased Delay During Drawer Ownership Searching Before Yaw Inference Movementย #232

@kimseoungyun

Description

@kimseoungyun

๐Ÿž ๋ฒ„๊ทธ ์„ค๋ช…

Yaw ์ถ”๋ก  ์œ„์น˜๋กœ ์ด๋™ํ•˜๊ธฐ ์ „์— ๋กœ๋ด‡ํŒ”์ด ์„œ๋ž ์œ„ ์œ„์น˜๋ฅผ ๋จผ์ € ๊ฒฝ์œ ํ•œ ๋’ค, yaw ์ถ”๋ก  ์œ„์น˜๋กœ ์กฐ๊ธˆ ๋” ์ด๋™ํ•˜๋Š” ๊ณผ์ •์—์„œ ์ด์ „๋ณด๋‹ค ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

ํ•ด๋‹น ๊ตฌ๊ฐ„์€ ์„œ๋ž์˜ ownership์„ ํŒ๋‹จํ•˜๊ธฐ ์œ„ํ•œ searching ๋‹จ๊ณ„๋กœ ๋ณด์ด๋ฉฐ, ๊ธฐ์กด์—๋Š” ๋น„๊ต์  ์งง์€ ์‹œ๊ฐ„ ์•ˆ์— ์„œ๋ž ์œ„ ์œ„์น˜๋ฅผ ๊ฑฐ์ณ yaw ์ถ”๋ก  ์œ„์น˜๋กœ ์ด๋™ํ–ˆ์ง€๋งŒ, ์ตœ๊ทผ์—๋Š” ์ด ์‚ฌ์ด์˜ ๋Œ€๊ธฐ ์‹œ๊ฐ„ ๋˜๋Š” ์ด๋™ ์‹œ๊ฐ„์ด ๊ธธ์–ด์ ธ ์ „์ฒด ์ž‘์—… ์ˆ˜ํ–‰ ์‹œ๊ฐ„์ด ์ฆ๊ฐ€ํ•˜๊ณ  ์žˆ๋‹ค.

๐Ÿ” ์žฌํ˜„ ๋ฐฉ๋ฒ•

  1. ์‚ฌ์šฉ์ž๊ฐ€ ๊ณต๊ตฌ pick ๋˜๋Š” ์„œ๋ž ๋‚ด๋ถ€ ๊ฐ์ฒด ํƒ์ƒ‰์ด ํ•„์š”ํ•œ ๋ช…๋ น์„ ์ž…๋ ฅํ•œ๋‹ค.
    ์˜ˆ: ๋“œ๋ผ์ด๋ฒ„ ๊ฐ€์ ธ๋‹ค์ค˜, ๋ง์น˜ ์ฐพ์•„์ค˜

  2. ๋กœ๋ด‡ํŒ”์ด yaw ์ถ”๋ก  ์œ„์น˜๋กœ ์ด๋™ํ•˜๊ธฐ ์ „์— ์„œ๋ž ์œ„ ์œ„์น˜๋กœ ๋จผ์ € ์ด๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

  3. ์„œ๋ž ์œ„ ์œ„์น˜์— ๋„๋‹ฌํ•œ ์ดํ›„ yaw ์ถ”๋ก  ์œ„์น˜๋กœ ์ด๋™ํ•˜๊ธฐ๊นŒ์ง€์˜ ์‹œ๊ฐ„์ด ์ด์ „๋ณด๋‹ค ๊ธธ์–ด์กŒ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

โœ… ๊ธฐ๋Œ€ํ•œ ๋™์ž‘

๋กœ๋ด‡ํŒ”์€ ์„œ๋ž ์œ„ ์œ„์น˜๋ฅผ ๊ฒฝ์œ ํ•œ ๋’ค, ๋ถˆํ•„์š”ํ•œ ๋Œ€๊ธฐ ์—†์ด yaw ์ถ”๋ก  ์œ„์น˜๋กœ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ด๋™ํ•ด์•ผ ํ•œ๋‹ค.

์„œ๋ž ownership ํŒ๋‹จ์„ ์œ„ํ•œ searching ๋‹จ๊ณ„๊ฐ€ ํ•„์š”ํ•˜๋”๋ผ๋„, ํ•ด๋‹น ๋‹จ๊ณ„๋Š” ์ตœ์†Œํ•œ์˜ ์‹œ๊ฐ„ ์•ˆ์— ์™„๋ฃŒ๋˜์–ด์•ผ ํ•˜๋ฉฐ, perception ๊ฒฐ๊ณผ ๋˜๋Š” ์ƒํƒœ ํŒ๋‹จ์ด ์™„๋ฃŒ๋˜๋ฉด ๋ฐ”๋กœ ๋‹ค์Œ ์ด๋™ ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ€์•ผ ํ•œ๋‹ค.

๊ธฐ๋Œ€ ๋™์ž‘์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ์„œ๋ž ์œ„ ์œ„์น˜ ๋„๋‹ฌ
  • ownership/searching ์ƒํƒœ ํŒ๋‹จ
  • yaw ์ถ”๋ก  ์œ„์น˜๋กœ ์ฆ‰์‹œ ์ด๋™
  • ๋ถˆํ•„์š”ํ•œ sleep, timeout, retry, blocking wait ์—†์ด ๋‹ค์Œ ๋‹จ๊ณ„ ์ง„ํ–‰

โŒ ์‹ค์ œ ๋™์ž‘

๋กœ๋ด‡ํŒ”์ด ์„œ๋ž ์œ„ ์œ„์น˜์— ๋„๋‹ฌํ•œ ์ดํ›„ yaw ์ถ”๋ก  ์œ„์น˜๋กœ ์ด๋™ํ•˜๊ธฐ๊นŒ์ง€์˜ ์‹œ๊ฐ„์ด ์ด์ „๋ณด๋‹ค ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค.

์ด๋กœ ์ธํ•ด ์ „์ฒด pick/searching pipeline์˜ ์ˆ˜ํ–‰ ์‹œ๊ฐ„์ด ์ฆ๊ฐ€ํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๊ธฐ์—๋Š” ๋กœ๋ด‡์ด ์„œ๋ž ์œ„์—์„œ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋ฉˆ์ถฐ ์žˆ๊ฑฐ๋‚˜ ๋Šฆ๊ฒŒ ๋ฐ˜์‘ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ธ๋‹ค.

ํ˜„์žฌ ์›์ธ์€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์ง€๋งŒ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค.

  • searching ๋‹จ๊ณ„์—์„œ timeout ๋˜๋Š” retry ์‹œ๊ฐ„์ด ์ฆ๊ฐ€ํ•จ
  • ownership ํŒ๋‹จ ๋กœ์ง์—์„œ perception ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง
  • ์„œ๋ž ์œ„ ์œ„์น˜ ๋„๋‹ฌ ํ›„ ๋‹ค์Œ state๋กœ ์ „ํ™˜๋˜๋Š” ์กฐ๊ฑด์ด ๋Šฆ๊ฒŒ ๋งŒ์กฑ๋จ
  • ์ด์ „์—๋Š” ์—†๋˜ sleep, wait, stabilization delay๊ฐ€ ์ถ”๊ฐ€๋จ
  • motion ์™„๋ฃŒ ํŒ์ • ๋˜๋Š” feedback ์ˆ˜์‹ ์ด ์ง€์—ฐ๋จ
  • yaw ์ถ”๋ก  ์œ„์น˜๋กœ ์ด๋™ํ•˜๊ธฐ ์ „ ๋ถˆํ•„์š”ํ•œ ์ค‘๊ฐ„ ์ƒํƒœ๊ฐ€ ์ถ”๊ฐ€๋จ

๐Ÿ–ฅ๏ธ ์‹คํ–‰ ํ™˜๊ฒฝ

  • OS: Ubuntu 22.04
  • ROS 2 ๋ฒ„์ „: ROS2 Humble
  • Python ๋ฒ„์ „: Python 3.10
  • ๋ ˆํฌ์ง€ํ† ๋ฆฌ:
  • ๋ธŒ๋žœ์น˜:
  • ์นด๋ฉ”๋ผ ์ •๋ณด: Intelยฎ RealSenseโ„ข Depth Camera D435I
  • ๋กœ๋ด‡ํŒ” ์ •๋ณด: Doosan-Robotics-M0609
  • ๊ทธ๋ฆฌํผ ์ •๋ณด: OnRobot RG2

๐Ÿ“‹ ๋กœ๊ทธ ๋˜๋Š” ์—๋Ÿฌ ๋ฉ”์‹œ์ง€

Yaw inference position ์ด๋™ ์ „ searching ๋‹จ๊ณ„์—์„œ ์ง€์—ฐ ๋ฐœ์ƒ.

๊ด€์ฐฐ๋œ ํ๋ฆ„:
1. Move to drawer-top/searching position
2. Wait/search for drawer ownership
3. Move slightly to yaw inference position

๋ฌธ์ œ:
- 1๋ฒˆ ์œ„์น˜ ๋„๋‹ฌ ์ดํ›„ 3๋ฒˆ ์œ„์น˜๋กœ ์ด๋™ํ•˜๊ธฐ๊นŒ์ง€์˜ ์‹œ๊ฐ„์ด ์ด์ „๋ณด๋‹ค ์˜ค๋ž˜ ๊ฑธ๋ฆผ
- ๋ช…ํ™•ํ•œ ์—๋Ÿฌ ๋กœ๊ทธ๋Š” ์—†์ง€๋งŒ, searching/ownership ํŒ๋‹จ ๋‹จ๊ณ„ ๋˜๋Š” state transition์—์„œ ์ง€์—ฐ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ถ”์ •๋จ

๐ŸŽฅ ์Šคํฌ๋ฆฐ์ƒท/์˜์ƒ

๋‹ค์Œ ์ž๋ฃŒ๋ฅผ ์ฒจ๋ถ€ํ•˜๋ฉด ์›์ธ ๋ถ„์„์— ๋„์›€์ด ๋จ.

  • ์„œ๋ž ์œ„ ์œ„์น˜์— ๋„๋‹ฌํ•œ ์‹œ์ ์˜ ์˜์ƒ
  • yaw ์ถ”๋ก  ์œ„์น˜๋กœ ์ด๋™ํ•˜๊ธฐ ์ „๊นŒ์ง€ ๋ฉˆ์ถฐ ์žˆ๋Š” ๊ตฌ๊ฐ„ ์˜์ƒ
  • ์ด์ „ ์ •์ƒ ๋™์ž‘๊ณผ ํ˜„์žฌ ์ง€์—ฐ ๋™์ž‘ ๋น„๊ต ์˜์ƒ
  • ๊ฐ state ์ง„์ž…/์ข…๋ฃŒ ์‹œ๊ฐ„์ด ์ฐํžŒ ROS 2 ๋กœ๊ทธ
  • motion command ๋ฐœํ–‰ ์‹œ๊ฐ„๊ณผ ์™„๋ฃŒ feedback ์ˆ˜์‹  ์‹œ๊ฐ„ ๋กœ๊ทธ

๐Ÿ“Ž ์ถ”๊ฐ€ ์ •๋ณด

์›์ธ ํŒŒ์•…์„ ์œ„ํ•ด searching ๋‹จ๊ณ„์™€ yaw ์ถ”๋ก  ์œ„์น˜ ์ด๋™ ์ „ํ›„์˜ timestamp ๋กœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

ํ™•์ธํ•ด์•ผ ํ•  ์ง€์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ์„œ๋ž ์œ„ ์œ„์น˜๋กœ ์ด๋™ ๋ช…๋ น์„ ๋ณด๋‚ธ ์‹œ๊ฐ„
  • ์„œ๋ž ์œ„ ์œ„์น˜ ๋„๋‹ฌ feedback์„ ๋ฐ›์€ ์‹œ๊ฐ„
  • ownership/searching ๋‹จ๊ณ„ ์‹œ์ž‘ ์‹œ๊ฐ„
  • ownership/searching ๋‹จ๊ณ„ ์ข…๋ฃŒ ์‹œ๊ฐ„
  • yaw ์ถ”๋ก  ์œ„์น˜ ์ด๋™ ๋ช…๋ น์„ ๋ณด๋‚ธ ์‹œ๊ฐ„
  • yaw ์ถ”๋ก  ์œ„์น˜ ๋„๋‹ฌ feedback์„ ๋ฐ›์€ ์‹œ๊ฐ„

ํŠนํžˆ ๋‹ค์Œ ํ•ญ๋ชฉ์„ ์šฐ์„ ์ ์œผ๋กœ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.

  • searching ๋‹จ๊ณ„์— ๊ณ ์ • sleep์ด ์ถ”๊ฐ€๋˜์—ˆ๋Š”์ง€
  • ownership ํŒ๋‹จ timeout ๊ฐ’์ด ์ฆ๊ฐ€ํ–ˆ๋Š”์ง€
  • perception ๊ฒฐ๊ณผ ๋Œ€๊ธฐ ๋กœ์ง์ด blocking ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋Š”์ง€
  • motion ์™„๋ฃŒ ํŒ์ • ์กฐ๊ฑด์ด ๊ณผ๋„ํ•˜๊ฒŒ ์—„๊ฒฉํ•ด์กŒ๋Š”์ง€
  • ์ด์ „ ๋ฒ„์ „ ๋Œ€๋น„ state machine ์ „ํ™˜ ์กฐ๊ฑด์ด ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€
  • yaw ์ถ”๋ก  ์œ„์น˜๋กœ ์ด๋™ํ•˜๊ธฐ ์ „ ๋ถˆํ•„์š”ํ•œ retry ๋˜๋Š” ์•ˆ์ •ํ™” ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ์ถ”๊ฐ€๋˜์—ˆ๋Š”์ง€

์˜ˆ์ƒ ์ˆ˜์ • ๋ฐฉํ–ฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

[drawer_top_arrived] timestamp ๊ธฐ๋ก
[searching_start] timestamp ๊ธฐ๋ก
[searching_done] timestamp ๊ธฐ๋ก
[yaw_pose_command_sent] timestamp ๊ธฐ๋ก
[yaw_pose_arrived] timestamp ๊ธฐ๋ก

์œ„ ๋กœ๊ทธ๋ฅผ ํ†ตํ•ด ์ง€์—ฐ์ด motion ๋‹จ๊ณ„์—์„œ ๋ฐœ์ƒํ•˜๋Š”์ง€, searching/ownership ํŒ๋‹จ ๋‹จ๊ณ„์—์„œ ๋ฐœ์ƒํ•˜๋Š”์ง€, ๋˜๋Š” state transition ๋‹จ๊ณ„์—์„œ ๋ฐœ์ƒํ•˜๋Š”์ง€ ๋ถ„๋ฆฌํ•ด์„œ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type
    No fields configured for issues without a type.

    Projects

    Status
    Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions