터틀봇3 시뮬레이션 듀토리얼 진행하기
https://emanual.robotis.com/docs/en/platform/turtlebot3/overview/
humble 버전을 Github 에서 다운로드 받도록 하겠습니다. 아마 로보티즈에서 만든 패키지가 있을 것입니다.
https://github.com/ROBOTIS-GIT/turtlebot3
humble버전을 선택에서 진행을 하도록 합시다.
https://github.com/ROBOTIS-GIT/turtlebot3/tree/humble-devel
그러니 이 버전을 설치하면 됩니다. 추가로 msgs와 simulation을 설치합니다.
https://github.com/ROBOTIS-GIT/turtlebot3_msgs/tree/humble-devel
https://github.com/ROBOTIS-GIT/turtlebot3_simulations/tree/humble-devel
우선 turtle_ws 폴더를 만들고 그 안에다가 src를 만듭시다.
cd
mkdir turtle_ws
cd turtle_ws
mkdir src
cd src
git clone https://github.com/ROBOTIS-GIT/turtlebot3.git -b humble-devel
git clone https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git -b humble-devel
git clone https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git -b humble-devel
다음은 rosdep을 통해서 의존성을 해결해야합니다.
cd turtle_ws
rosdep init
rosdep update
rosdep install --from-paths src --ignore-src -r -y
그리고 빌드를 진행합니다.
colcon build --symlink-install
이게 끝나면 bashrc에다가 등록을 하는 편이 좋습니다. 그게 아니라면 Ros2 환경과 turtlebot환경을 불러와야할 것입니다.
alias turtlebot="humble; source ~/turtle_ws/install/local_setup.bash; echo \"turtlebot workspace is activated.\""
그러면 turtlebot 설치가 마무리됩니다. 다시 터미널을 열고 turtlebot을 입력하면 됩니다.
export TURTLEBOT3_MODEL=burger
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
다음을 입력하고 실행시킵니다. 가제보가 실행될 것입니다.
실행이 됩니다. 다른 맵들은 실행이 안되는데, 일단 이 맵은 실행이 됩니다.
ros2 run turtlebot3_teleop teleop_keyboard
터틀봇을 한 번 움직여봅시다.
Turtlebot3_MODEL이라는게 없는가 봅시다.
새로운 터미널에서도 이를 입력해주어야합니다.
export TURTLEBOT3_MODEL=burger
ros2 run turtlebot3_teleop teleop_keyboard
기존에 사용하던 로봇과 다른 점이라고는, teleop 명령어를 주었을 때 속도가 서서히 줄어들지 않고, 계속 고정되어있는? 뭐 그렇습니다.
이제 SLAM을 시작해봅시다. 그전에 귀찮으니까
export TURTLEBOT3_MODEL=burger
이거 bashrc에 등록하고 갑시다.
Turtlebot은 또 다른 방법으로 SLAM을 하는 군요
sudo apt install ros-humble-cartographer
sudo apt install ros-humble-cartographer-ros
이거 설치해주고
터미널 3개가 필요합니다.
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
ros2 launch turtlebot3_cartographer cartographer.launch.py use_sim_time:=True
ros2 run turtlebot3_teleop teleop_keyboard
각각 실행합니다.
rviz가 이런식으로 뜨면 성공입니다. SLAM용으로 이 프로그램은 처음 써보네요.
이제 간단합니다. teleop으로 터틀봇3를 움직입니다.
조작이 좀 어렵네요.
다 그렸다면 저장합니다.
ros2 run nav2_map_server map_saver_cli -f ~/map
대충 이렇게 생긴맵이 저장됩니다.
Navigation을 해봅시다.
터미널 2개가 필요합니다.
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
ros2 launch turtlebot3_navigation2 navigation2.launch.py use_sim_time:=True map:=$HOME/map.yaml
일단 이렇게 뜨는데, 자도으로 잡지는 않고 우리가 2D Pose Estimate로 위치를 지정해주어야한다고 합니다.
그러면 성공적으로 local cost map과 global cost map이 나옵니다.
대충 위치를 지정하면 잘갑니다.
여담이지만 colision 영역을 설정하면, 여러가지를 건들 수 있습니다. 그 이야기는 나중에 필요할때 하도록하고, 지금은 너무 잘가네요. 이 파라미터에 대한 내용은 제가 예전에 프로젝트를 진행하던 때에 아마 있을 것 입니다.
fake node 시뮬레이션
gazebo없이 rviz만으로 시뮬레이션하고 싶을 때 사용하는 방법이라고 합니다.
ros2 launch turtlebot3_fake_node turtlebot3_fake_node.launch.py
ros2 run turtlebot3_teleop teleop_keyboard
궤적을 남기는 느낌같아보입니다.
움직이며 움직입니다.