RVIZ Odometry

BERT·2023년 4월 3일
0

ROS

목록 보기
9/23

Odometry

기기의 측정값으로 움직이는 사물의 위치를 측정하는 방법

바퀴의 회전수로 이동 거리 계산

l = 2π\pir

자동차 핸들과 앞 바퀴

앞 바퀴 2개

  • 회전 시 꺾이는 각도가 다름
  • 안쪽과 바깥쪽 회전 원의 중심이 일치해야 함

Ackermann Steering

각도는 αc\alpha_c를 기준

자동차 위치 정보

현재 위치 : xx, yy, θ\theta
이동 속도 : vv, ω\omega
조향각 : δ\delta

RVIZ 기반 Odometry 활용

Point Position 위치 좌표
Quaterniaon orientation Euler Angles(Roll,Yaw,Pitch) 대신 Quarternian 표현
Vector3 linear 선속도
Vector3 angular 각속도

이동 속도 벡터 계산

dX=VxcosθVysinθdX=V_x\bullet\cos\theta-V_y\bullet\sin\theta
dY=Vxsinθ+VycosθdY=V_x\bullet\sin\theta+V_y\bullet\cos\theta

odom_publisher_ex

xycar_ws
├ src
│  └ ex_urdf
│    ├ src 
│    ├ └ odom_publisher_ex.py
│    └ launch
│      └ odom_pub.launch
├ build
└ devel

roslaunch ex_urdf odom_pub.launch

Fixed Frame을 odom으로 변경
odom을 기준으로 pan_tilt가 움직임

rqt_graph

RVIZ 가상공간에서 8자 주행시키기

xycar_ws
├ src
│ └ rviz_xycar
│   ├ src 
│   │ ├ converter.py
│   │ ├ odom_8_drive.py
│   │ └ rviz_odom.py
│   ├ launch
│   │ └ rviz_odom.launch
│   ├ urdf
│   └ rviz
│     └ rviz_odom.rviz
├ build
└ devel

동작 과정
8자 주행 프로그램이 모터제어 메시지를 담은 /xycar_motor 토픽 보내면
변환 프로그램이 메시지 변환 후 /joint_states 토픽 만들어 보내고
odometry 프로그램이 변환 후 /odom 토픽 만들어 보냄

roslaunch rviz_xycar rviz_odom.launch

br.sendTransform()의 파라미터
(위치 좌표, 각속도, 현재 시간, 동적 객체 base_link, 기준 객체 odom)

    br = tf.TransformBroadcaster()
    br.sendTransform((msg.x, msg.y, 0),
                     tf.transformations.quaternion_from_euler(0, 0, msg.theta),
                     rospy.Time.now(),
                     turtlename,
                     "world")

Writing a tf broadcaster (Python)

0개의 댓글