Frenz AI로봇랩에서 ROS2 강의영상 입니다.
ROS의 이론과 설치 (Windows WSL2)에 대해 다룹니다.
ROS2는 윈도우에서도 가능하다!
ROS2를 윈도우에 설치하기 위한 3가지 방법
- 그냥 Window
- Window+wsl2 (!!)
- Window+Docker
Window의 wsl2를 이용해서 ROS2를 설치해보자
- 윈도우에서 리눅스를 사용할 수 있게 해주는 WSL2 버전이 정식으로 출시
- WSL은 Windows Subsystem for Linux 2의 줄임말
- 윈도우의 가상화 기능을 활용해서 윈도우 위에서 리눅스를 사용 가능
- 단순히 가상머신으로 리눅스를 사용할 수 있는 것이 아님
- 윈도우 시스템과 통합되어 마치 하나의 머신처럼 자연스럽게 리눅스를 활용하는 것이 가능
참고
- RoadBalnce 김수영 대표님, 로보티즈 표윤석 박사님 자료를 많이 활용했습니다 감사합니다.
- https://puzzling-cashew-c4c.notion.site/ROS-2-Foxy-Windows-10-WSL-2-f50188cdf0c540119defa69fb40db221
- https://www.youtube.com/watch?v=DW7l9LHdK5c&ab_channel=RoboticsWithEmil
- https://www.lainyzine.com/ko/article/how-to-install-wsl2-and-use-linux-on-windows-10/
설치 시작!!
1) 윈도우 셋팅
1.1) 최신 Windows 업데이트
- 왼쪽 밑 윈도우 클릭 -> 제어판 클릭 -> 업데이트 및 보안 클릭 -> 윈도우 최신버전으로 업데이트
1.2) Windows 10에 WSL2 설치
- WSL2: Windows Subsystem for Linux 2
- WSL을 설치하려면 Windows 10의 20H1 이상 버전이어야 함
- 2022년 현재 20H1 이상 버전을 사용해야 설치가 가능
- 왼쪽 아래 검색 -> 'pc 정보' 입력 -> 시스템 열기, Windows 사양의 버전 확인(20H1보다 높은지 체크)
1.3) WSL2 활성화
- 윈도우에선 기본적으로 WSL1이 활성화 되는데, 이를 WSL2가 활성화 되도록 설정
1.3.1) Window PowerShell을 관리자 권한으로 열어서 아래 명령어를 친다
>> dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
>> dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
1.3.2) WSL2를 기본으로 사용하도록 설정
>> wsl --set-default-version 2
1.4) CHOCOLATEY 설치
- 터미널에서 설치를 쉽게할수 있는 설치 도우미
1.3.1) Powershell을 관리자 권한으로 연다(Windows+X+A)
>> Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
1.3.2) Powershell 종료 후 관리자 권한으로 재시작
>> choco # 아래와 같이 버전이 잘 나오는지 확인
1.3.3) 윈도우 터미널 설치 (3min)
>> choco install -y microsoft-windows-terminal
1.3.4) CMake 설치
- 운영체제에 상관없이 사용 가능한 빌드 툴, ROS2의 colcon build system을 사용하기 위해 설치
>> choco install -y cmake
1.5) Ubuntu 20.04 설치
1.5.1) Microsoft Store 열기
1.5.2) Ubuntu 20.04를 검색해서 설치
1.5.3) 에러시 수행, 에러 없을땐 1.6으로 점프!
- 만약 아래와 같은 에러가 나면 Windows PowerShell에서 아래 명령어 입력 후 재부팅
"WslRegisterDistribution failed with error: 0x8007019e
The Windows Subsystem for Linux optional component is not enabled. Please enable it and try again."
>> Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
1.6) Ubuntu 20.04 셋팅
- 다시 MicroSoft store에서 Ubuntu 20.04 설치 진행
- 아이디와 비밀번호 입력(우선 최대한 간단하게)
- 아래 화면이 나오면 성공
1.7) Ubuntu 20.04 관리자 권한으로 실행
- 찾기->Ubuntu 20.04 -> 관리자 권한으로 실행
1.8) Ubuntu 20.04 업데이트 및 WSL 설치 (10m)
1.8.1) Ubuntu 20.04 업데이트
>> sudo apt update
>> sudo apt upgrade
>> sudo apt autoremove
1.8.2) WSL 설치
>> sudo apt install wsl -y
>> wsl # 설치 확인
2) ROS2 설치
2.1) ROS2 설치를 위한 셋팅 (2m)
- Ubuntu 20.04를 관리자권한으로 열기
>> sudo apt update && sudo apt install curl gnupg2 lsb-release -y
>> sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
>> sudo sh -c 'echo "deb [arch=$(dpkg --print-architecture)] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" > /etc/apt/sources.list.d/ros2-latest.list'
>> sudo apt update
>> sudo apt update && sudo apt install locales
>> sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
>> echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
>> locale # check for UTF-8
>> sudo apt update && sudo apt install locales
>> sudo locale-gen en_US en_US.UTF-8
>> sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
>> export LANG=en_US.UTF-8
>> locale # verify settings
!!! 아래와 같이 PUBEY 에러 발생 시 아래 명령어 입력
(PUBKEY 에러시, 에러 없으면 패스!) >> sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F42ED6FBAB17C654
(PUBKEY 에러시, 에러 없으면 패스!) >> sudo apt-get update
2.2) ROS2 설치를 위한 셋팅 (2m)
- Ubuntu 20.04를 관리자권한으로 열기
>> sudo apt install ros-foxy-desktop -y # 엄청 오래 걸림, 25min
>> sudo apt install -y python3-pip
>> pip install -U argcomplete
>> sudo apt install python3-colcon-common-extensions -y
>> sudo apt install python3-rosdep2 -y
>> rosdep update
>> sudo apt-get update
>> echo "source /opt/ros/foxy/setup.bash" >> ~/.bashrc
>> source ~/.bashrc
2.3) 개발툴 설치
>> sudo apt update && sudo apt install -y build-essential cmake git libbullet-dev python3-colcon-common-extensions python3-flake8 python3-pip python3-pytest-cov python3-rosdep python3-setuptools python3-vcstool wget
>> python3 -m pip install -U argcomplete flake8-blind-except flake8-builtins flake8-class-newline flake8-comprehensions flake8-deprecated flake8-docstrings flake8-import-order flake8-quotes pytest-repeat pytest-rerunfailures pytest
>> sudo apt install --no-install-recommends -y libasio-dev libtinyxml2-dev libcunit1-dev
2.4) ROS2 동작 확인
a) Ubuntu 20.04를 관리자권한으로 Terminal을 2개 띄운다
b) 왼쪽 Terminal 창에
>> ros2 run demo_nodes_cpp talker
c) 오른쪽 터미널창에
>> ros2 run demo_nodes_py listener
d) Talker(왼쪽)가 말하는걸 Lister(오른쪽)에서 잘 듣고 있나요?? 듣고있으면 성공!
2.5) ROS2 Build 테스트
>> source /opt/ros/foxy/setup.bash
>> mkdir -p ~/robot_ws/src
>> cd ~/robot_ws/
>> colcon build --symlink-install
- 아래와 같이 4개의 폴더(build, install, log, src)가 보이면 성공!
3) Gazebo 셋팅
Gazebo는 ROS2에 가장 적합한 로봇 시뮬레이터. 로봇 없이도 가상의 로봇을 통해 실습과 확인 가능
3.1) Gazebo 설치
>> sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-stable.list'
>> wget https://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -
>> sudo apt update
>> sudo apt install gazebo11 libgazebo11-dev -y
>> sudo apt install ros-foxy-gazebo-ros-pkgs -y # Gazebo ROS 패키지들도 설치
3.2) Gazebo GUI 인터페이스를 위한 설정
3.2.1) VcXsrv Windows X Server 설치
- https://sourceforge.net/projects/vcxsrv/ 접속후 다운로드
3.2.2) XLaunch 실행
3.2.3) XLaunch 설정
- 아래 그림을 보며 따라 설정한다
- 방화벽은 개인, 공용 네트워크 둘다 꼭 체크한다!
- 만약 방화벽 문제로 gazebo가 뜨지 않으면 아래와 같이 '방화벽 및 네트워크 보호' -> '방화벽에서 앱 허용'을 누른 후 VcXsrv(XLaunch)의 방화벽을 개인/공용 모두 허용한다.
3.3) Gazebo & Rviz2 실행
3.3.1) PyQt5 설치
>> sudo apt-get install pyqt5-dev-tools
>> python3 -m pip install --upgrade pip
>> python3 -m pip install -U catkin_pkg cryptography empy ifcfg lark-parser lxml netifaces numpy opencv-python pyparsing pyyaml setuptools rosdistro
>> python3 -m pip install -U pydot PyQt5
3.3.2) 아래 명령어를 Ubuntu 20.04 Windows Terminal에 입력
>> export GAZEBO_IP=127.0.0.1
>> #export DISPLAY=:0 # 수정
>> export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0
>> export LIBGL_ALWAYS_INDIRECT=0
>> source ~/.bashrc
3.3.3) Gazebo 실행!
- 한참 기다려도 아무것도 안뜬다?? 더 기다려보다가 도저히 아니다 싶으면 잘못된거다ㅠ
>> gazebo --verbose
>> (libQt5Core.so.5 에러시) sudo strip --remove-section=.note.ABI-tag /usr/./lib/x86_64-linux-gnu/libQt5Core.so.5
- 방화벽 창이 뜨면 private/public 모두 꼭 체크해준다
- 만약 'This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem. Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, xcb' 에러가 뜬다면 3.2.3)의 네트워크 방화벽 설정에서 허용해고 다시 실행한다. 그래도 안되면 껐다키고...
- gazebo를 강제 종료하고 싶다면 아래 명령어로 종료
killall gzserver
killall gzclient
- (좀더 깊이 들어가보자) Window에서 WSL로 Ubuntu를 연결하므로 Windows와 Ubuntu의 IP주소가 다르다. 이 때 Ubuntu의 IP를 nameserver라고 하는데 /etc/resolv.conf 를 확인하거나 nameserver를 확인할 수 있다. 'export DISPLAY=172.30.16.1:0.0'를 'export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0'로 변경하여 자동으로 반영될 수 있도록 한다.
4) Rviz2 실행
로봇의 센서 데이터, 외형, 위치 등 여러 데이터들을 그래픽으로 손쉽게 살필 수 있는 ROS 2의 Rviz 2
아래 명령어를 Ubuntu 20.04 Windows Terminal에 입력
>> export GAZEBO_IP=127.0.0.1
>> export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0
>> export LIBGL_ALWAYS_INDIRECT=0
>> rviz2 # 실행!
아래 창이 뜨면 성공!! 축하해요~!
5) Bashrc 설정
>> sudo apt-get install gedit -y # gedit 설치
>> gedit ~/.bashrc # bashrc 설정 파일 수정
5.1) Xterm 부분(66~73째 줄) 삭제
5.2) 아래 명령어 맨 밑에 추가 후 저장(ctrl+s)
source /opt/ros/foxy/setup.bash
alias eb='gedit ~/.bashrc'
alias sb='source ~/.bashrc'
alias cba='colcon build --symlink-install'
alias cbp='colcon build --symlink-install --packages-select'
alias killg='killall -9 gzserver && killall -9 gzclient && killall -9 rosmaster'
alias rosfoxy='source /opt/ros/foxy/setup.bash && source ./install/setup.bash'
export GAZEBO_IP=127.0.0.1
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0
export LIBGL_ALWAYS_INDIRECT=0
5.3) 변경사항 반영
>> source ~/.bashrc
6) TEST
6.1) 워크스페이스 디렉토리 만들고 빌드하기
- 빌드가 성공하면 'All required rosdeps installed successfully'가 뜬다. build, install, log, src 4개의 폴더가 있는지 확인한다.
>> mkdir -p ~/ros2_ws/src
>> cd ~/ros2_ws/src
>> git clone https://github.com/ros/ros_tutorials.git -b foxy-devel # 샘플 패키지 설치
>> cd ..
>> rosdep install -i --from-path src --rosdistro foxy -y -r # 성공하면 'All required rosdeps installed successfully'가 뜬다
>> colcon build # colon으로 빌드 (1.5min)
6.2) turtlesim 테스트 1
- Terminal을 2개 띄운 후 아래와 같이 각각 실행한다. 'ros2'는 ROS2를 실행하기 위한 명령어이고, 'run' 뒤의 'turtlesim'은 노드가 있는 패키지 이름, 그 뒤 'turtlesim_node'와 'draw_squre'는 실행할 노드의 이름이다.
(terminal 1) >> ros2 run turtlesim turtlesim_node
(terminal 2) >> ros2 run turtlesim draw_square
아래 그림같이 거북이가 사각형을 그리며 움직이나요??
6.3) turtlesim 테스트 2
- Terminal을 2개 띄운 후 아래와 같이 각각 실행한다. 'ros2'는 ROS2를 실행하기 위한 명령어이고, 'run' 뒤의 'turtlesim'은 노드가 있는 패키지 이름, 그 뒤 'turtlesim_node'와 'turtle_teleop_key'는 실행할 노드의 이름이다. 오른쪽 terminal에서 키보드로 입력을 하면, 왼쪽 terminal의 로봇(거북이)를 제어할 수 있다. ROS는 이런 방식으로 여러개의 terminal을 띄운 후 각각 노드들을 별개로 실행하면 ROS가 통합하여 통신을 연결해준다.
(terminal 1) >> ros2 run turtlesim turtlesim_node
(terminal 2) >> ros2 run turtlesim turtle_teleop_key
끝~!!! 수고하셨습니다
'AI로봇 > ROS2+SLAM' 카테고리의 다른 글
AI로봇랩 5강) Xubuntu 부팅에러 시 dtb 수정방법 at JetsonNano (0) | 2022.03.10 |
---|---|
AI로봇랩 2강) ROS2 on Ubuntu20.04 at JetsonNan (1) | 2022.03.10 |
AI로봇랩 4강) Cartographer SLAM with ROS2 on Omorobot (0) | 2022.03.10 |
AI로봇랩 3강) ROS2로 원격 로봇 제어하기 (1) | 2022.03.08 |