(1) 젯슨보드에서 실행되는 다음 노드들의 topic list, info, hz, bw, echo를 모두 조사, info정보에서 Qos 정보를 확인
/cmd_vel_smoothed
/dynamixel_state
/joint_states
/odom
/parameter_events
/robot_description
/rosout
/scan
/tf
/tf_static
2. nav2 패키지의 세부 알고리즘을 설명하라
BT Navigator Server
Behavior Tree (BT)를 사용하여 Controller, Planner, Behavior등을 언제 어떻게 실행할지 결정
Lifecycle Manager
Nav2에 포함된 모든 노드의 상태(Unconfigured, Inactive, Active)를 관리
Action Server
Planner Server
시작점에서 목표점까지의 전역 경로(Global Path)를 생성, 주로 Global Costmap을 사용
Controller Server
플래너가 만든 경로를 따라 로봇이 실제로 움직이도록 속도 명령(cmd_vel)을 생성
Local Costmap을 실시간으로 확인하며 장애물을 회피
Behavior Server
로봇이 끼었거나 경로를 찾지 못할 때 실행하는 회복 동작을 담당
제자리 회전(Spin), 후진(Back up), 비용 지도 초기화(Clear Costmap) 등이 있다.
Smoother Server
플래너가 생성한 경로가 급격하게 꺾여 있다면, 이를 부드럽게(Smooth) 다듬어 로봇이 주행하기 편한 경로로 변환
Costmaps
센서 데이터(LiDAR, Camera 등)와 지도(Map) 데이터를 결합하여 로봇이 지나갈 수 있는 곳과 없는 곳을 수치화한 지도.
Static Layer(정적 지도), Obstacle Layer(실시간 장애물), Inflation Layer(여유 공간) 등으로 구성된다.
Velocity Smoother
컨트롤러에서 나오는 속도 명령이 너무 급격할 경우, 가속도 제한 내에서 부드럽게 조절하여 모터와 기구부에 무리가 가지 않게 한다.
Collision Monitor
최종 속도 명령이 나가기 전, 로봇 주변의 센서 데이터를 실시간 감시하여 충돌 위험이 감지되면 즉시 로봇을 멈추거나 속도를 줄이는 안전 필터 역할을 한다.
3. turtlebot3_navigation2 패키지안에 있는 navigation2.launch.py 파일설명
https://cafe.daum.net/SmartRobot/RoVa/2466
4. 2번과정에서 젯슨보드에서 실행하는 노드들을 launch파일을 만들어서 실행, 패키지이름은 turtlebot3_bringup으로 설정
파라미터 값들을 lauch파일 안에서 설정할 수 있도록
5. 4에서 만든 런치파일을 이용하여 연구실 실내에서 내비게이션 실험을 수행하고 결과를 동영상으로 제출하라
jetson
ros2 launch turtlebot3_bringup bringup_launch.py
Ubuntu
ros2 launch turtlebot3_navigation2 navigation2.launch.py map:=<map 경로>.yaml
waypoint 설정
waypoint / Nav Throug Poses Mode 활성화
이후 Nav2 Goal로 경로 설정
실행
Map+camera
강의 자료랑 똑같이 했는데 안될시
\\wsl.localhost\Ubuntu-24.04\opt\ros\jazzy\share\turtlebot3_navigation2\param 각자 위치가 다름
waffle.yaml 수정
controller_server:에 있는 enable_stamped_cmd_vel: false <- true를false로 수정 velocity_smoother:에 있는 enable_stamped_cmd_vel: false <- true를false로 수정
이유 geometry_msgs/msg/Twist (기존 방식) : 선속도와 각속도만 데이터에 포함 하는데 true로 해놓게 된다면 geometry_msgs/msg/TwistStamped을 사용하게 된다 이 방식은 속도 데이터에 Header(타임스탬프, 프레임 ID) 정보가 추가된 형태이기 때문에 메세지 타입이 안맞을수 있다.
VScode에서 수정이 안되서 Ubuntu에서 수정 할 시 sudo nano /opt/ros/jazzy/share/turtlebot3_navigation2/param/waffle.yaml ctrl + O 저장 ctrl + X 나가기
cmd_vel_smothed로 제어 명령을 주기 때문에 이전 과제에서 만들었던 패키지 에서 cmd_vel_smothed에서 cmd_vel로 토픽을 연결하는 리매핑 추가.
리매핑 하지않고도 토픽명을 바꿔줘도됨
ex) Node( package='dynamixel_workbench_controllers', executable='dynamixel_workbench_controllers', name='dynamixel_workbench_controllers', # 리매핑 추가: /cmd_vel 토픽을 /cmd_vel_smoothed로 연결 remappings=[ ('/cmd_vel', '/cmd_vel_smoothed') ], parameters=[{ 'use_cmd_vel': True }] ),
|
6. gazebo simulator를 이용하여 navigation 실험을 수행
https://cafe.daum.net/SmartRobot/RoVa/2466
7. nav2 패키지를 이용한 내비게이션 실습시 rviz2에서 수행한 로봇자세 초기값 설정 및 로봇의 목표자세 설정을 수행하는 패키지를 작성하여 내비게이션을 수행
8. nav2 패키지를 이용하여 경유점설정하고 따라가도록 제어하는 방법(waypoint following)을 조사하고 경유점을 설정하여 연구실 내부를 순환하도록 주행하는 패키지를 작성하라, Rviz2로 이동궤적을 시각화하여 실제 로봇의 위치와 지도상의 위치가 일치하는지 비교
waypoint 좌표 확인 하는 방법
waypoint를 찍고
왼쪽 상단
panlels에서 add new Panel 생성
selection선택
selection을 선택한뒤 waypoint를 찍으면
좌표가 나온다
주행
시작점 / 바라보는 방향
시작점 / 한 바퀴 이후 돌아 왔을 때
/odom포함된 영상
첫댓글 odom 좌표계와 map좌표계의 원점은 어디인가?
2개의 좌표계의 원점이 다른이유를 설명하라.
amcl이 odom좌표계의 원점을 변경하는 이유를 설명하라.
odometry로 추정된 로봇의 자세는 odom좌표계기준의 좌표값임
우리가 알고싶은것은 map좌표계에서 로봇의 자세임
map좌표계의 원점은 지도를 처음 생성할 때 로봇이 위치해 있던 시작 지점이고
odom좌표 계의 원점은 odometry가 시작한 시점의 로봇 위치입니다.
로봇이 이동할 수록 바퀴 엔코더을 이용한 odom에 오차가 쌓이기 때문에 원점이 다르게 찍히게 됩니다.
로봇이 이동하면서 바퀴 오차 때문에 odom -> base_link 변환(오도메트리)에 오차가 쌓인다
예를 들어 로봇은 자신이 (10, 0)에 있다고 생각하지만, 실제로는 (9.5, 0.1)에 있을 수 있다.
때문에 AMCL은 LiDAR 스캔 데이터와 지도를 대조해서 로봇의 진짜 위치를 찾아냅니다.
AMCL은 하위 변환인 odom -> base_link(엔코더 값)를 직접 수정할 수 없기 때문에
map -> odom 사이의 변환을 업데이트하여 오차를 상쇄시킵니다.