======ROS 스터디 #8: 모바일 로봇====== 2021년 01월 27일 18:00\\ ZOOM 화상회의 {{youtube>_Xvp_1gi71M?medium}} =====1. 개념===== **모바일 로봇(mobile robot/mobot)** 모바일 로봇은 주변을 움직일 수 있는 기능((SLAM과 내비게이션 등이 활용된다))을 가진 로봇으로 다리를 가진 로봇과 바퀴를 가진 로봇, 트랙을 가진 로봇으로 분류한다. ROS에서 지원하는 로봇은 [[https://robots.ros.org/|관련 위키]]에서 찾아볼 수 있다. 이 문서는 그 중 ROS2 공식 플랫폼 터틀봇((오픈소스이고 보급형으로 개발되었기 떄문에 실습에 용이))에 대해 서술한다. ====1.1. 시리즈==== * **터틀봇1**: iRobot 사의 연구용 로봇 크리에이트(create)를 베이스로 2010년 개발되었다.((2011년에 판매 시작)) * **터틀봇2**: 유진로봇 사의 연구용 로봇 거북이(Kobuki)를 베이스로 2012년 개발되었다. * **터틀봇3**: 기존 터틀봇 1, 2에서 사용자의 요구사항을 적용했으며 로보티즈 사의 스마트 액추에이터 다이나믹셀을 구동용으로 채용했다. 터틀봇3의 목표는 기능 및 품질을 유지하면서 플랫폼의 크기를 대폭 줄이고 가격을 낮추는 동시에 로봇 구성품을 사용자의 목적에 맞추어 변경 또는 확장하는데 있다. 터틀봇3는 기존 pc 대비 저가이면서 크기가 작고 임베디드에 적합하게 설계된 SBC((Single Board Computer)), 거리 센서 및 3D 프린팅 최신 기술을 적용해 더욱 향상된 시리즈이다. || ====1.2. 하드웨어==== 터틀봇3의 공식 모델은 터틀봇 버거, 와플, 와플 파이 3종류가 있다. 아래 사진은 터틀봇3 버거이다.((이 문서에서도 특별한 언급이 없다면 터틀봇 버거를 중심으로 설명)) {{https://img.kasimov.synology.me/2020/ros/10/turtlebot_buger.JPG?400}} 터틀봇3의 기본 구성품으로는 구동용 액추에이터, ROS를 구동하기 위한 SBC, SLAM 및 내비게이션을 위한 센서, 변형 가능한 기구부, 중간 제어기로 사용되는 임베디드 보드인 OpenCR, 타이어 및 캐터필러를 모두 이용 가능한 스프토킷 휠, 11.1V의 리튬폴리 배터리를 이용하고 있다. 와플은 기구부가 물건을 적재하기 좋고 고토크의 액추에이터가 이용되며 Intel 프로세서 기반의 SBC, 360도 거리 센서인 LDS((Laser Distance Sensor)), 3차원 인식을 위한 Depth Camera가 이용되었다. 와플 파이는 와플과 거의 같지만 SBC는 버거와 같은 라즈베리 파이를 채용했고 라즈베리파이 전용 카메라를 사용해 저렴한 가격을 실현했다. [[https://cad.onshape.com/documents/2586c4659ef3e7078e91168b/w/14abf4cb615429a14a2732cc/e/9ae9841864e78c02c4966c5e|터틀봇3 버거의 오픈 소스 하드웨어]] || ====1.3. 소프트웨어==== 터틀봇3의 소프트웨어는 제어기로 사용되는 OpenCR 보드의 펌웨어(FW)((터틀봇3의 핵심이라는 의미로 turtlebot3_core라는 별칭으로 사용))와 4가지의 ROS 패키지로 이루어져 있다. * **turtlebot3_core**: 다이나믹셀((터틀봇3의 구동용 모터))의 엔코더 값을 가져와 로봇의 위치를 추정하거나 속도를 제어한다.또한 3축 가속도, 3축 자이로 센서((OpenCR에 실장됨))로부터 가속도와 각가속도를 얻어 로봇의 방향을 추정하기도 하고 배터리 상태를 측정하여 토픽으로 전송하기도 한다. * [[https://github.com/ROBOTIS-GIT/turtlebot3|turtlebot3]]: 터틀봇3의 로봇 모델, SLAM 및 내비게이션 패키지, 원격제어 패키지, 구동관련 bringup 패키지가 있다. * [[https://github.com/ROBOTIS-GIT/turtlebot3_msgs|turtlebot3_msgs]]: 터틀봇3의 메시지 파일들을 모아두었다. * [[https://github.com/ROBOTIS-GIT/turtlebot3_simulations|turtlebot3_simulations]]: 터틀봇3의 시뮬레이션 패키지들을 모아두었다. * [[https://github.com/ROBOTIS-GIT/turtlebot3_applications|turtlebot3_applications]]: 터틀봇3의 응용프로그램을 모아두었다. || ====1.4 개발환경==== [[https://emanual.robotis.com/docs/en/platform/turtlebot3/overview/|터틀봇3 공식 위키]] 참조 sudo apt install ros-melodic-joy ros-melodic-teleop-twist-joy ros-melodic-teleop-twist-keyboard \ ros-melodic-laser-proc ros-melodic-rgbd-launch ros-melodic-depthimage-to-laserscan ros-melodic-rosserial-arduino ros-melodic-rosserial-python \ ros-melodic-rosserial-server ros-melodic-rosserial-client ros-melodic-rosserial-msgs ros-melodic-amcl \ ros-melodic-map-server ros-melodic-move-base ros-melodic-urdf ros-melodic-xacro ros-melodic-compressed-image-transport \ ros-melodic-rqt-image-view ros-melodic-gmapping ros-melodic-navigation cd ~/catkin_ws/src/ git clone https://github.com/ROBOTIS-GIT/turtlebot3.git git clone https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git cd ~/catkin_ws && catkin_make || =====2. 시뮬레이션===== ====2.1. Rviz==== 로봇을 이동시켜보면서 Odometry와 tf를 확인해 보자. [[http://https://www.youtube.com/watch?v=iHXZSLBJHMg&feature=youtu.be|참고 영상]] roslaunch turtlebot3_fake turtlebot3_fake.launch roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch || ====2.2. Gazebo==== 시작하기 전, ROS 명령어를 실행하려는 **모든 터미널**에서 아래 한 줄을 실행해준다. export TURTLEBOT3_MODEL=burger roslaunch turtlebot3_gazebo turtlebot3_empty_world.launch gazebo에 터틀봇3의 3차원 모습이 불러온 것을 확인할 수 있다. 이는 로봇만을 불러온 것으로 실제 시뮬레이션을 하기 위해서는 사용자가 환경을 지정하든지 gazebo에서 제공하는 환경 모델을 불러올 수 있다.((화면 상단 위의 insert를 클릭해 하위 파일을 선택하면 가능)) 현재 구동 중인 gazebo를 종료하고 roslaunch turtlebot3_gazebo turtlebot3_world.launch roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch 여기까지는 Rviz를 이용한 시뮬레이션과 동일하지만 gazebo는 몸테의 충돌를 확인할 수 있고, 위치를 계측하고, IMU 센서, 카메라 센서를 가상으로 사용할 수 있게 설정되어있다. roslaunch turtlebot3_gazebo turtlebot3_simulation.launch # 터틀봇이 랜덤하게 이동하면서 장애물을 감지하거나 벽에 부딪치기 전에 회피한다. roslaunch turtlebot3_gazebo turtlebot3_gazebo_rviz.launch roslaunch turtlebot3_slam turtlebot3_slam.launch slam_methods:=gmapping rosrun map_server map_saver -f ~/map SLAM의 결과물로 지도를 얻을 수 있다. 내비게이션으로 넘어가기 전에, 앞서 실행한 모든 프로그램을 종료한다. 그 뒤 패키지를 실행시키면 이전에 제작해둔 지도상에 로봇이 나타난다. roslaunch turtlebot3_gazebo turtlebot3_world.launch roslaunch turtlebot3_navigation turtlebot3_navigation.launch map_file:=$HOME/map.yaml rosrun rviz rviz -d 'rospack find turtlebot3_navigation'/rviz/turtlebot3_nav.rviz Rviz 상에서 로봇의 초기 위치를 지정한 후 목적지를 설정하면 목적지로 이동하는 모습을 확인할 수 있다.