로봇의 생성 위치 수정, 2개 지점 왕복시키기

yun·2023년 12월 22일
0

ROS2

목록 보기
4/5

문제 풀이에 핑크랩의 미니봇 프로젝트를 사용했습니다.

1. 로봇을 A 위치에서 생성시키기

  • gazebo_ros의 spawn_robot에서 생성 위치를 설정 가능
  • x, y를 원하는 위치에 맞게 수정
    spawn_robot = Node(
        package='gazebo_ros',
        executable='spawn_entity.py',
        name='spawn_robot',
        output='screen',
        arguments=[
            '-entity', LaunchConfiguration('robot_name'),
            '-topic', 'robot_description',
            '-timeout', '20.0',
            '-x', '-1.8',
            '-y', '0.6',
            '-package_to_model'
        ],
        prefix="bash -c 'sleep 2.0; $0 $@' ",
        parameters=[{
            "use_sim_time": True
        }],
    )
  • gazebo 실행
ros2 launch minibot_bringup bringup_robot_gazebo.launch.py world_name:=turtlebot3_world.world

2. 2D pose estimation 없이 최초 위치를 인지하기

  • yaml로 주입하는 params에서 initial_pose 설정 가능
    initial_pose:
      x: -1.8
      y: 0.6
      yaw: 0.0
  • yaml을 수정하지 않을 경우, /initialpose 토픽 발행으로 수정 가능
ros2 topic pub -1 /initialpose geometry_msgs/PoseWithCovarianceStamped '{ header: {stamp: {sec: 0, nanosec: 0}, frame_id: "map"}, pose: { pose: {position: {x: -1.8, y: 0.6, z: 0.0}, orientation: {w: 0.1}}, } }'
  • rviz2 실행
ros2 launch minibot_navigation2 bringup_launch.py use_sim_time:=true map:=`ros2 pkg prefix minibot_navigation2`/share/minibot_navigation2/maps/turtle_world.yaml

3. A <-> B 왕복

  • 사용할 함수: nav2 라이브러리의 gotopose()
  • 이동할 좌표값을 얻기 위해 rviz2의 publish point 기능 활용
  • /clicked_point 토픽 echo로 좌표 확인
ros2 topic echo /clicked_point
  • navigation 실행
rviz2 -d `ros2 pkg prefix minibot_navigation2`/share/minibot_navigation2/rviz/nav2_view.rviz
  • 1차 시도: A, B 2개의 좌표만 사용

    • B 지점으로 이동 중 길을 잃고 제대로 못 감
    • BasicNavigator가 현재 위치와 목표 지점을 기반으로 경로를 계속 수정하기 때문
  • 2차 시도: A 지점과 B 지점 사이에 직선으로 이동 가능한 위치 3개 추가

  • goThroughPoses(goal_poses) vs goToPose(goal_pose)

    • 여러 개의 포즈를 한 번에 전달 vs 한 번에 한 포즈를 전달
    • 5개의 포인트와 4개의 방향을 가지고 조합해서 goToPose 실행
  • 최종 코드: turtle_world_nav.py

    • A/B 포인트에 도착하면 5초 대기하도록 time.sleep(5) 사용
  • 코드 실행

python3 turtle_world_nav.py

0개의 댓글