로봇은 장애물을 피하며 목적지로 안전하게 이동하기 위해 미리 정의된 GPS 지점을 따라갑니다.
이 저장소 패키지는 다음에서 테스트되었습니다:
- 엔비디아 젯슨 TX2 Ubuntu 18.04
- Razor 9DOF IMU
- ZED F9P (RTK2) GPS
- RPLidar A1 lidar
- Laptop with Ubuntu 18.04
이 작업은 Interplanetar 팀(BUET Mars Rover Robotics Team)이 2019년 대학 로버 챌린지(University Rover Challenge, URC)에 참가하기 위해 수행되었습니다. 이 작업을 오픈 소스로 공개한 Daniel Snider에게 특별한 감사를 전합니다:
- ROS Rover <code>
- Simple Drive <code> <ROS Wiki>
- Follow Waypoints <code> <ROS Wiki>
- GPS Goal <code> <ROS Wiki>
- ROS Offline Google Maps for MapViz <code>
- Advanced Terminal Organization <code1> <code2>
터미널에서 catkin_ws의 소스(src) 디렉터리로 이동한 다음 다음 명령을 실행하세요:
cd catkin_ws/src
git clone https://github.com/ArghyaChatterjee/gps-waypoint-based-autonomous-navigation-in-ros.git gps_waypoint_nav
cd ..
catkin_make --only-pkg-with-deps gps_waypoint_nav
그 터미널에서 navigation 파일을 실행하세요:
source devel/setup.bash
roslaunch gps_waypoint_nav gps_waypoint_nav.launch
다른 터미널에서 joystick controller 파일을 실행하세요:
source devel/setup.bash
roslaunch gps_waypoint_nav joy_launch_control.launch
조이스틱으로 로버를 실행하세요. 실행 중에 "LB" 버튼을 눌러 웨이포인트 수집을 시작하세요. 웨이포인트는 'points_outdoor.txt' 파일에 저장됩니다. 실행이 완료되면 "RB" 버튼을 눌러 웨이포인트를 따라가기 시작하세요.
이 패키지는 다음 패키지들의 조합을 사용합니다:
- ekf_localization: 오도메트리 데이터를 IMU와 GPS 데이터와 융합합니다.
- navsat_transform: GPS 데이터를 오도메트리로 변환하고, 위도 및 경도 포인트를 로봇의 오도메트리 좌표 시스템으로 변환합니다.
- GMapping: 지도를 생성하고 장애물을 감지합니다.
- move_base: 장애물을 피하면서 목표지점으로 이동합니다.
- 목표지점은 녹화된 또는 입력된 웨이포인트를 사용하여 설정됩니다.
이 저장소의 네비게이션 패키지에는 다음과 같은 사용자 정의 노드가 포함되어 있습니다:
- gps_waypoint: 웨이포인트 파일을 읽어 웨이포인트를 지도 프레임 내의 점으로 변환한 다음 목표지점을 move_base로 전송합니다.
- gps_waypoint_continuous1: 하나의 컨트롤러를 사용하여 웨이포인트 간 지속적인 내비게이션을 수행합니다.
- gps_waypoint_continuous2: 다른 별도의 컨트롤러를 사용하여 웨이포인트 간 지속적인 내비게이션을 수행합니다.
- collect_gps_waypoint: 사용자가 로봇을 주행하며 자신만의 웨이포인트를 수집할 수 있도록 합니다.
- calibrate_heading: 시작 시 로봇의 헤딩을 설정하고, 열악한 자기계 데이터 문제를 해결합니다.
- plot_gps_waypoints: 그래프 작성 목적으로 GPS의 원시 데이터를 저장합니다.
- gps_waypoint_mapping: Mandala Robotics의 3D 매핑 소프트웨어와 웨이포인트 내비게이션을 결합하여 3D 매핑을 수행합니다.
만약 GPS 센서의 /navsat/fix 토픽을 로컬 좌표 프레임인 /navsat/odom 토픽으로 변환하려면, 다음 두 패키지를 직접 사용하세요:
- Geonav Transform <코드> <ROS 위키>
- Geographic Info <코드> <ROS 위키> <웹사이트> <ROS 위키2>
- Lattitude, Longitude & Altitude to Pose Stamped <코드>
- Eagle Eye for GPS & IMU Fused Odometry <코드> <유튜브>
- IMU GPS Localization: Using EKF to fuse IMU and GPS data <코드>
- GPSD <code> <ROS Tutorial>
- 로봇 로컬라이제이션 navsat transform 노드가 발행되지 않을때
- 오도메트리 없이 IMU와 GPS 융합을 수행하는 로봇 로컬라이제이션 패키지.
- 로봇 로컬라이제이션 패키지를 활용하여 IMU와 GPS 데이터를 결합하는 방법
- GPS navigation with mobile robot
- Robot Localization using GPS <website>
우리는 경로와 좌표를 시각화하기 위해 mapviz 패키지를 사용했습니다.
sudo apt-get install ros-melodic-mapviz \
ros-melodic-mapviz-plugins \
ros-melodic-tile-map \
ros-melodic-multires-image
cd catkin_ws/src
git clone https://github.com/swri-robotics/mapviz.git
rosdep install --from-paths src --ignore-src
catkin_make
이전에 사용하던 구성 파일을 모두 삭제해주세요. 패널 내 플러그인의 순서가 중요합니다. Mapviz는 플러그인 패널에 나열된 순서대로 플러그인을 표시합니다. 만약 navsat 플러그인이 가장 먼저 나열되어 있다면, 그것을 먼저 표시하고 그 위에 tile_map 플러그인이 표시될 것입니다. 따라서 위치 정보를 볼 수 없을 수 있습니다.
sudo rm ~/.mapviz_config
하나의 터미널에서 다음을 실행하세요:
roscore
다른 터미널에서 mapviz
파일을 실행하세요. mapviz.launch
파일은 다음과 같아야 합니다:
<launch>
<node pkg="mapviz" type="mapviz" name="mapviz"></node>
<node pkg="swri_transform_util" type="initialize_origin.py" name="initialize_origin" >
<param name="local_xy_frame" value="/map"/>
<param name="local_xy_origin" value="auto"/>
<!--<param name="local_xy_origin" value="swri"/>-->
<rosparam param="local_xy_origins">
[{ name: swri,
latitude: 29.45196669,
longitude: -98.61370577,
altitude: 233.719,
heading: 0.0},
{ name: back_40,
latitude: 29.447507,
longitude: -98.629367,
altitude: 200.0,
heading: 0.0}]
</rosparam>
<remap from="fix" to="/navsat/fix"/>
</node>
<node pkg="tf" type="static_transform_publisher" name="swri_transform" args="0 0 0 0 0 0 /map /origin 100" />
</launch>
mapviz.launch
파일을 실행하려면 다음 명령을 사용하세요:
cd catkin_ws
source devel/setup.bash
roslaunch mapviz mapviz.launch
패널에서 첫 번째 상자 (고정 프레임 "Map" 및 대상 프레임 "None")는 그대로 두고, tile_map을 추가한 다음 navsat 플러그인을 추가하세요 (/navsat/fix 토픽 선택). 이것을 순차적으로 수행하세요.
이제 /navsat/fix
토픽에 GPS를 게시할 샘플 bag 파일이 필요합니다. 여기에서 rosbag을 다운로드하세요. 다른 터미널에서 rosbag을 실행하세요:
rosbag play CA-20190828184706_blur_align.bag
cd catkin_ws/src
git clone https://github.com/nobleo/rviz_satellite.git
catkin_make
rviz.launch
파일을 실행하려면 다음 명령을 사용하세요:
cd catkin_ws
source devel/setup.bash
roslaunch rviz_satellite demo.launch
/navsat/fix
토픽에 GPS를 게시할 샘플 bag 파일이 필요합니다. 여기에서 rosbag을 다운로드하세요. 다른 터미널에서 rosbag을 실행하세요:
rosbag play CA-20190828184706_blur_align.bag
cd catkin_ws/src
git clone https://github.com/dheera/rosboard.git
catkin_make
rviz.launch
파일을 실행하려면 다음 명령을 사용하세요:
cd catkin_ws
source devel/setup.bash
rosrun rosboard rosboard_node
/navsat/fix
토픽에 GPS를 게시할 샘플 bag 파일이 필요합니다. 여기에서 rosbag을 다운로드하세요. 다른 터미널에서 rosbag을 실행하세요:
rosbag play CA-20190828184706_blur_align.bag
로컬 브라우저에서 http://localhost:8888 주소로 이동하십시오 (로봇은 http://your-robot-ip:8888/). 왼쪽 상단 메뉴에서 시각화하려는 토픽을 추가하세요. 이렇게 하면 토픽을 시각화할 수 있어야 합니다.
이 저장소를 만들면서 도움을 받은 웹사이트들에게 감사의 인사를 전합니다.