Mavros: NED와 ENU κ°„μ˜ ν”„λ ˆμž„ λ³€ν™˜ 반볡

에 λ§Œλ“  2015λ…„ 02μ›” 10일  Β·  21μ½”λ©˜νŠΈ  Β·  좜처: mavlink/mavros

bug documentation

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

λ‚˜λŠ” μ΄κ²ƒμ„λ³΄κ³ μžˆλ‹€ :
http://wiki.ros.org/geometry/CoordinateFrameConventions 및
http://www.ros.org/reps/rep-0103.html

κ·Έλž˜ν”½μ—λŠ” μ—¬λŸ¬ 가지 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€(그리고 λ°©ν–₯을 λ‚˜νƒ€λ‚΄λŠ” 경우 μ½”λ“œ).

  • ROSλŠ” 항상 였λ₯Έμ†μž‘μ΄μž…λ‹ˆλ‹€. ENU κ·Έλž˜ν”½(ν•˜λ‹¨ ν–‰)은 μ™Όμ†μž‘μ΄μ΄λ©° μ˜¬λ°”λ₯΄μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • ROSλŠ” ENUλ₯Ό μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. ENUλŠ” 동-뢁-μœ„λ₯Ό μ˜λ―Έν•˜λ―€λ‘œ X좕은 EASTλ₯Ό 가리킀고

결과적으둜 제둜 νšŒμ „μ—μ„œ λ°”λ”” ν”„λ ˆμž„κ³Ό μ›”λ“œ ν”„λ ˆμž„ 간에 차이가 μ—†μœΌλ©° NED와 ENU κ°„μ˜ λ³€ν™˜μ€ κΈ€λ‘œλ²Œ/둜컬 μ°Έμ‘°λ₯Ό μ‚¬μš©ν•˜μ—¬ 두 ν”„λ ˆμž„ λͺ¨λ‘μ—μ„œ λ™μΌν•©λ‹ˆλ‹€.

λͺ¨λ“  21 λŒ“κΈ€

λˆ„κ΅°κ°€ ν˜„μž¬ μƒνƒœμ— λŒ€ν•΄ 논평할 수 μžˆμŠ΅λ‹ˆκΉŒ? ν˜„μž¬ μ½”λ“œλ₯Ό μ‚΄νŽ΄λ³Ό μ‹œκ°„μ΄ μ—†μ§€λ§Œ λ³€ν™˜μ„ κ²€ν† ν•˜κ²Œ λ˜μ–΄ κΈ°μ©λ‹ˆλ‹€.

@LorenzMeier PR # 208을 μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

@LorenzMeier μ‹€μ œλ‘œ 이것은 μš°λ¦¬κ°€ μ‚¬μš©ν•˜λŠ” ν˜„μž¬ κ·œμΉ™μž…λ‹ˆλ‹€.

본체 κ³ μ • NED β†’ ROS ENU: (xyz)β†’(x -y -z) λ˜λŠ” (wxyz)β†’(x -y -zw)
둜컬 NED β†’ ROS ENU: (xyz)β†’(yx -z) λ˜λŠ” (wxyz)β†’(yx -zw)

image

이 λ„ν‘œμ˜ 정확성을 확인할 μˆ˜λŠ” μ—†μ§€λ§Œ 이것이 μš°λ¦¬κ°€ μ§€κΈˆ ν•˜κ³  μžˆλŠ” 일이라고 μƒκ°ν•©λ‹ˆλ‹€.

λ„€, 제 κ³„νšμž…λ‹ˆλ‹€. 확인할 수 있고, 논문에 μ‚¬μš©ν•˜μ—¬ μ„€λͺ…ν–ˆμŠ΅λ‹ˆλ‹€.

μ°Έκ³ : 이 λ³€ν™˜μ€ λͺ‡ 달 전에 λ™μ˜ν•œ 것이며 Rvizμ—μ„œ 확인할 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

λ¬Έμ œλŠ” μ‹€μ œ λ³€ν™˜μ΄ μ•„λ‹ˆλΌ νŠΉμ • λ³€ν™˜μ΄ μ‚¬μš©λ  λ•Œμž…λ‹ˆλ‹€.

λ‚˜λŠ” μ΄κ²ƒμ„λ³΄κ³ μžˆλ‹€ :
http://wiki.ros.org/geometry/CoordinateFrameConventions 및
http://www.ros.org/reps/rep-0103.html

κ·Έλž˜ν”½μ—λŠ” μ—¬λŸ¬ 가지 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€(그리고 λ°©ν–₯을 λ‚˜νƒ€λ‚΄λŠ” 경우 μ½”λ“œ).

  • ROSλŠ” 항상 였λ₯Έμ†μž‘μ΄μž…λ‹ˆλ‹€. ENU κ·Έλž˜ν”½(ν•˜λ‹¨ ν–‰)은 μ™Όμ†μž‘μ΄μ΄λ©° μ˜¬λ°”λ₯΄μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • ROSλŠ” ENUλ₯Ό μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. ENUλŠ” 동-뢁-μœ„λ₯Ό μ˜λ―Έν•˜λ―€λ‘œ X좕은 EASTλ₯Ό 가리킀고

결과적으둜 제둜 νšŒμ „μ—μ„œ λ°”λ”” ν”„λ ˆμž„κ³Ό μ›”λ“œ ν”„λ ˆμž„ 간에 차이가 μ—†μœΌλ©° NED와 ENU κ°„μ˜ λ³€ν™˜μ€ κΈ€λ‘œλ²Œ/둜컬 μ°Έμ‘°λ₯Ό μ‚¬μš©ν•˜μ—¬ 두 ν”„λ ˆμž„ λͺ¨λ‘μ—μ„œ λ™μΌν•©λ‹ˆλ‹€.

@LorenzMeier κ°€ λ§ν•œ 것에 λŒ€λΆ€λΆ„ λ™μ˜ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λ‚΄κ°€ 크게 틀리지 μ•ŠλŠ” ν•œ μœ„μ˜ κ·Έλž˜ν”½μ—μ„œ 였λ₯Έμͺ½ ν•˜λ‹¨μ„ μ œμ™Έν•œ λͺ¨λ“  μ’Œν‘œ ν”„λ ˆμž„μ€ 왼손 μ’Œν‘œκ³„μž…λ‹ˆλ‹€. κ·Έλž˜ν”½ λ²”λ‘€μ—μ„œ x 및 y μΆ•μ˜ λ ˆμ΄λΈ”μ„ 잘λͺ» μ§€μ •ν–ˆμ„ 수 μžˆμŠ΅λ‹ˆκΉŒ?

κ·Έ μ™Έμ—λŠ” Fron ENUλ₯Ό NED둜 λ³€ν™˜ν•˜λŠ” 것이 κ·ΈλΌμš΄λ“œ ν”„λ ˆμž„μ΄λ“  λ°”λ”” ν”„λ ˆμž„μ΄λ“  λ™μΌν•˜λ‹€λŠ” 데 λ™μ˜ν•©λ‹ˆλ‹€. λ°”λ”” ν”„λ ˆμž„μ—μ„œ ENU λ˜λŠ” NEDλΌλŠ” 이름은 그닀지 μ˜λ―Έκ°€ μ—†μ§€λ§Œ μ—¬μ „νžˆ ROSμ—μ„œ μ‚¬μš©λ˜λŠ” μ’Œν‘œ ν”„λ ˆμž„μ—μ„œ FCU둜 λ³€ν™˜ν•˜λŠ” 것은 항상 동일해야 ν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

@mhkabir κ°€ μœ„μ— κ²Œμ‹œν•œ λ³€ν™˜ 방법을 아직 ν™•μΈν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. μˆ˜ν•™μ„ ν•˜κΈ° 전에 λ¨Όμ € κ·Έλž˜ν”½μ„ λ°”λ‘œ μž‘μ•„μ•Ό ν•œλ‹€κ³  μƒκ°ν•˜μ„Έμš”.

@thedinuka 당신이 μƒκ°ν•˜λŠ” 바에 따라 κ·Έλ¦ΌνŒμ΄λ‚˜ λ¬΄μ—‡μΈκ°€μ—μ„œ μƒˆλ‘œμš΄ 것을

λ‚˜λŠ” 원본 νŒŒμΌμ„ 가지고 있고 그것을 λ³€κ²½ν•  수 있고 μƒˆ νŒŒμΌμ„ 보낼 수 μžˆμŠ΅λ‹ˆλ‹€(페인트 @mhkabirλ₯Ό μ‚¬μš©ν•  ν•„μš”κ°€ μ—†μŒ). 였λ₯Έμ†κ³Ό 왼손에 κ΄€ν•œ 것은 λ§žλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λ‚˜λŠ” μ—¬μ „νžˆ 두 개의 λ‹€λ₯Έ μ „ν™˜μ„ κ°–λŠ” 것에 λŒ€ν•΄ μ˜κ΅¬μ‹¬μ΄ 있으며, κ·Έ λ‹Ήμ‹œ κ·Έ 이미지λ₯Ό λ§Œλ“€μ—ˆμ„ λ•Œ λ‚˜λ„ 가지고 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ μ•„λ§ˆλ„ μ½”λ“œλ₯Ό 확인해야 ν•  κ²ƒμž…λ‹ˆλ‹€. μ œκ°€ κΈ°μ–΅ν•˜λŠ” 바에 λ”°λ₯΄λ©΄ λŒ€λΆ€λΆ„μ˜ κ΅¬ν˜„μ€ μœ„μ˜ λ³€ν™˜μ„ μ‚¬μš©ν•©λ‹ˆλ‹€.

@TSC21λ‹˜ 이 μˆ˜μ •ν•œ κ·Έλž˜ν”½ 버전을 κΈ°λ‹€λ¦¬λ©΄μ„œ 생각을 μ’€ 더

1) λͺΈμ²΄ κ³ μ • ν”„λ ˆμž„μ˜ ROS κ·œμ•½μ—μ„œ λͺΈμ²΄ κ³ μ • ν”„λ ˆμž„μ˜ Pixhawk κ·œμ•½μœΌλ‘œμ˜ λ³€ν™˜.
2) 지ꡬ κ³ μ • ν”„λ ˆμž„μ˜ ROS κ·œμ•½μ—μ„œ 지ꡬ κ³ μ • ν”„λ ˆμž„μ˜ ν”½μŠ€ν˜Έν¬ κ·œμ•½μœΌλ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€.

ROS μΈ‘κ³Ό Pixhawk μΈ‘ λͺ¨λ‘μ— 본체 κ³ μ • μ’Œν‘œκ³„μ— μ‚¬μš©λœ κ·œμΉ™μ— λŒ€ν•œ λ¬Έμ„œκ°€ μžˆμ§€λ§Œ κ΄€μ„±(λ˜λŠ” 지ꡬ κ³ μ •) μ’Œν‘œκ³„μ— λŒ€ν•΄ Pixhawk μΈ‘μ—μ„œ μ‚¬μš©λ˜λŠ” κ·œμΉ™μ— λŒ€ν•œ νŠΉμ • 정보λ₯Ό 찾을 수 μ—†μŠ΅λ‹ˆλ‹€. 좔츑을 ν•΄μ•Ό ν•œλ‹€λ©΄ Pixhawk μΈ‘μ—μ„œ GPSκ°€ μ—†λŠ” 경우 지ꡬ κ³ μ • μ’Œν‘œ ν”„λ ˆμž„μ΄ 본체 κ³ μ • ν”„λ ˆμž„μ˜ 초기 λ°©ν–₯κ³Ό μ •λ ¬λ˜μ§€λ§Œ 이것이 κ·Έ 경우 λ‹€. κ·Έλž˜μ„œ μ‹€μˆ˜μ™€ ν˜Όλ™μ„ λ°©μ§€ν•˜κΈ° μœ„ν•΄ μ§€κΈˆμ€ 본체 κ³ μ • ν”„λ ˆμž„λ§Œ κ³ λ €ν•˜κ² μŠ΅λ‹ˆλ‹€.

ROS에 λŒ€ν•œ λ¬Έμ„œ [1]κ³Ό Pixhawk에 λŒ€ν•œ [2] λ¬Έμ„œλ₯Ό μ€‘κ³„ν•˜μ—¬ λ‹€μŒ λ‹€μ΄μ–΄κ·Έλž¨μ„ λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€.
body_coordinate_frames

μœ„μ˜ (1)κ³Ό (2)에 λŒ€ν•œ μ’Œν‘œ ν”„λ ˆμž„ λ‹€μ΄μ–΄κ·Έλž¨μ„ ν™•μΈν•˜κ³  ν™•μΈν•˜κ³  λ™μ˜ν•˜λ©΄ mavros μΈ‘μ—μ„œ μ‹€μ œ λ³€ν™˜μ„ μˆ˜ν–‰ν•˜λŠ” μˆ˜ν•™μ΄ 맀우 κ°„λ‹¨ν•©λ‹ˆλ‹€.

[1] http://www.ros.org/reps/rep-0103.html
[2] https://pixhawk.org/dev/know-how/frames_of_reference

#148(곡변산 λ³€ν™˜)도 μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

이것은 ros-infrastructure/rep#95에 도움이 될 수 μžˆμŠ΅λ‹ˆλ‹€.

μš°λ¦¬λŠ” μ΄κ²ƒμœΌλ‘œ μ–΄λ”˜κ°€μ— 도착 ν–ˆμŠ΅λ‹ˆκΉŒ? ENU/NED, body/world ν”„λ ˆμž„μ˜ ν˜„μž¬ λ³€ν™˜μ΄ μ •ν™•ν•©λ‹ˆκΉŒ? μš°λ¦¬κ°€ 잘λͺ»λœ 일을 ν•˜κ³  있기 λ•Œλ¬Έμ— λΉ„μ „ 데이터λ₯Ό 보낼 λ•Œ @blackcoder κ°€ FCUμ—μ„œ μš” νšŒμ „μ„ 얻을 κ°€λŠ₯성을 λ°˜λ³΅ν•΄μ•Ό ν•˜λŠ” 이유λ₯Ό 묻고 μžˆμŠ΅λ‹ˆλ‹€.
@vooon , @mhkabir , @tonybaltovski , @thedinuka ping!

@thedinuka μ œκ°€ 보기에 μ’‹μŠ΅λ‹ˆλ‹€.

좔츑을 ν•΄μ•Ό ν•œλ‹€λ©΄ Pixhawk μΈ‘μ—μ„œ > GPSκ°€ μ—†λŠ” 경우 Earth Fixed μ’Œν‘œ ν”„λ ˆμž„μ΄ > body-fixed ν”„λ ˆμž„μ˜ 초기 λ°©ν–₯κ³Ό μ •λ ¬λœλ‹€κ³  λ§ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

사싀 GPSκ°€ ν•„μš”ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μš°λ¦¬λŠ” 이미 λ§€κ±°μ§„μ—μ„œ μ „μ—­ μš” μ°Έμ‘°λ₯Ό 가지고 μžˆμŠ΅λ‹ˆλ‹€. 이것은 이 μš”μ— μ˜ν•΄ νšŒμ „λœ EF ν”„λ ˆμž„μ„ μ˜λ―Έν•΄μ•Ό ν•©λ‹ˆλ‹€.

μ•ˆλ…•ν•˜μ„Έμš”,
주제λ₯Ό mocap_optitrackμ—μ„œ mavros의 vision_pose/pose둜 λ‹€μ‹œ λ§€ν•‘ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ mavλŠ” μ˜¬λ°”λ₯΄κ²Œ λΉ„ν–‰ν•  수 μ—†μœΌλ―€λ‘œ λ‹€μŒ μ½”λ“œλ₯Ό λ³€κ²½ν•©λ‹ˆλ‹€.
vision_position_estimate(stamp.toNSec() / 1000,
position.y(), position.x(), -position.z(),
λ‘€, -ν”ΌμΉ˜, -μš”); // ??? ν™•μΈν•΄μ£Όμ‹­μ‹œμ˜€!
μ—κ²Œ
vision_position_estimate(stamp.toNSec() / 1000,
position.y(), position.x(), -position.z(),
λ‘€, -ν”ΌμΉ˜, -μš” + 1.57);
즉 -yawλ₯Ό -yaw + 1.57둜 λ³€κ²½ν•©λ‹ˆλ‹€.
ENUμ—μ„œ NED둜 신체 ν”„λ ˆμž„μ„ λ³€ν™˜ν•  λ•Œ mavrosλŠ” 이제 λ‹€μŒμ„ μ‚¬μš©ν•©λ‹ˆλ‹€.
(xyz)-->(x,-y,-z)
(w,x,y,z)-->(x,-y,-z,w), κ·Έλž˜μ„œ μš°λ¦¬λŠ”
ENU ---> NED
λ‘€ ---->λ‘€
ν”ΌμΉ˜ -->-ν”ΌμΉ˜
μš”-->-μš”.
κ·ΈλŸ¬λ‚˜ λ‚˜λŠ” μš°λ¦¬κ°€ μš”(yaw)κ°€ μ›”λ“œ ν”„λ ˆμž„μ˜ x좕을 기반으둜 ν•˜κ³ (본체 ν”„λ ˆμž„μ˜ xκ°€ μ›”λ“œ ν”„λ ˆμž„μ˜ x와 ν•¨κ»˜ μžˆμ„ λ•Œ, μš”λŠ” 0인) 90도 νšŒμ „μ„ 가지고 μžˆλ‹€κ³  μ°©κ°ν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. κ·Έλž˜μ„œ μš°λ¦¬λŠ” -yaw + 1.57을 λ§Œλ“€μ–΄μ•Ό ν•©λ‹ˆλ‹€. 즉
ENU ---> NED
λ‘€ ---->λ‘€
ν”ΌμΉ˜ -->-ν”ΌμΉ˜
μš” ----->-μš”+1.57.
λ‚΄κ°€ λ³€κ²½ ν•œ ν›„ mavλŠ” μ˜¬λ°”λ₯΄κ²Œ λΉ„ν–‰ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ λ‹€λ₯Έ ν”ŒλŸ¬κ·ΈμΈλ„ 이와 λΉ„μŠ·ν•˜λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

@congleeta 합법적인 것 κ°™μŠ΅λ‹ˆλ‹€. λ™μΌν•œ λ³€ν™˜μ„ 섀정점 ν”ŒλŸ¬κ·ΈμΈμ— μ μš©ν•˜κ³  κ²°κ³Όλ₯Ό λ³Ό 수 μžˆμŠ΅λ‹ˆκΉŒ? λ˜ν•œ local_position μ£Όμ œμ—μ„œ μ˜€λŠ” λ°μ΄ν„°λŠ” λ™μΌν•œ λ³€ν™˜μ„ μ μš©ν•˜μ§€ μ•Šκ³  μ˜¬λ°”λ₯Έ λ°©ν–₯으둜 μ œκ³΅λ©λ‹ˆκΉŒ?

#148(곡변산 λ³€ν™˜)도 μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

μš°λ¦¬λŠ” λ˜ν•œ 이것을 κ³ λ €ν•΄μ•Ό ν•©λ‹ˆλ‹€.

PR #317 λ³€κ²½ λ³€ν™˜.

λ‚˜λŠ” 이 λŒ€ν™”λ₯Ό ν…ŒμŠ€νŠΈν–ˆλ‹€

NED(Pixhawk)->ENU(ROS)
(X,Y,Z)->(X,-Y,-Z)

ENU(ROS)->NED(Pixhawk)
(X,Y,Z)->(X,-Y,-Z)

그것은 rviz와 μ‹€μ œ ν”Œλ§ λͺ¨λ‘μ—μ„œ 잘 μž‘λ™ν•©λ‹ˆλ‹€.

@supermice #317 ν™•μΈν•΄μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€! :)

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰