전공/ROS

wsl2 ROS2 humble 우분투 22.04 설치 , 초기 설정, VcXsrv 설정 방법

흔한 학생 2024. 11. 10. 21:14

wsl에 설치한 우분투가 자꾸 관리자 권한을 요구해서 처음부터 새로 시작했다.

그래서 다시 하는 김에 설치부터 글을 써보려고 한다.

이런 오류가 난 이유는 아마 처음 마이크로소프트 스토어에서 우분투를 설치하고 터미널에서 나머지 설치를 진행하는데 

이때 계정 이름을 입력하는 과정이 나타나지 않았다.

그래서 터미널을 재실행하니 root 계정으로 바로 실행되었는데

(일반적으로 계정 이름과 비밀번호를 설정하면 username@user-PC-name:~$ 처럼 나와야 하는데...)

이후 root 계정이 아닌 새로운 계정을 만들어서 진행했다.

때문에 계속 권한이 필요한 곳에서 오류가 났던 것 같다.


저는 wsl 환경에서 우분투 22.04를 설치하고 ROS2 공부를 할 예정입니다.

choco를 이용하고 리눅스를 사용할 수 있게 작업해주고 여러가지 설정하여 wsl2 환경을 준비해줍니다.

윈도우 파워쉘에서 wsl -l -v 명령어로 잘 설치되었는지 확인해보겠습니다.

  NAME            STATE           VERSION
* Ubuntu-22.04    Running         2

이와 같이 잘 설치된 것을 볼 수 있습니다.

파이썬 설치 | 버전 확인

pip3 -v
sudo apt install python3-pip 
pip3 -v 

pip3 install --upgrade pip
python3 --version

ROS2 humble 설치

다음으로 우분투 22.04에 맞는 ROS2 humble을 설치할 예정입니다.

아래 공식 문서를 따라갈 것이며 제가 작성한 내용도 공식 문서의 내용과 같습니다.

 

 

Ubuntu (deb packages) — ROS 2 Documentation: Humble documentation

You're reading the documentation for an older, but still supported, version of ROS 2. For information on the latest version, please have a look at Jazzy. Ubuntu (deb packages) Table of Contents Deb packages for ROS 2 Humble Hawksbill are currently availabl

docs.ros.org

 

귀찮으신 분들은 아래 코드를 따라가셔도 좋을 것 같습니다.

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
sudo apt install software-properties-common
sudo add-apt-repository universe
sudo apt update && sudo apt install curl -y
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> $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
sudo apt update
sudo apt upgrade
sudo apt install ros-humble-desktop

가장 오래 걸리는 부분입니다.

 

talker, listener 테스트

잘 설치되었는지 확인해보겠습니다.

source /opt/ros/humble/setup.bash
ros2 run demo_nodes_cpp talker
source /opt/ros/humble/setup.bash
ros2 run demo_nodes_py listener

 

 

초기 설정

위와 같은 데모 노드를 실행하기 전에

각 터미널에서  source /opt/ros/humble/setup.bash  명령을 실행했습니다.

ROS2의 명령어를 실행하기 위해서는 터미널에서 항상 해당 명령어를 먼저 실행해야 합니다.

ROS2를 활성화한다고 생각하면 좋은데 이 명령어를 실행하는 이유는 다음과 같습니다.

설치한 ROS2는 /opt/ros/humble 경로에 설치되고

source 명령으로 setup.bash 파일을 읽어와야하기 실행할 수 있기 때문입니다. 

~/.bashrc 수정, alias 설정

매번 이 명령을 실행하기보다 단축어로 실행하거나

터미널을 열 때 자동으로 실행되도록 설정하기위해 .bashrc 파일을 수정하겠습니다.

이 파일은 터미널이 실행됨과 동시에 수행되는 명령어들입니다..?

vim ~/.bashrc 혹은 gedit ~/.bashrc 등 명령어로 파일을 수정해봅시다.

 

vim 명령으로 처음 파일을 수정해본다면? ↓클릭 ↓

더보기

vim 편집기는 저도 처음에 당황스러웠는데 일반적인 텍스트 편집기와는 많이 다릅니다.

마우스로 이동이 안되며 방향키로만 커서 이동이 가능합니다. 

또 편집을 하려면 키보드의 insert 키를 눌러 편집모드로 변경한 후 수정이 가능합니다.

insert를 누르면 아래와 같이 편집모드로 들어가집니다.

파일을 수정한 후 Esc를 누르고 :wq 를 누르고 Enter 키를 누르면 파일을 저장한 후 나갈 수 있습니다.

  • :q - 저장하지 않고 파일 종료
  • :q! - 저장하지 않고 강제로 파일 종료
  • :w - 저장
  • :wq - 저장 후 종료

 

파일 하단에 다음 코드를 추가하겠습니다.

# for ROS2 study
source /opt/ros/humble/setup.bash
echo "ROS2 Humble is activated"

이렇게 하면 자동으로 실행되고

 

혹은 다음 코드를 추가한다면

# for ROS2 study

alias sb="source ~/.bashrc"
alias ros_domain="export ROS_DOMAIN_ID=13"
alias humble="source /opt/ros/humble/setup.bash; ros_domain;  echo \"ROS2 Humble is activated\""

humble을 단축어로 여러 명령들을 실행할 수 있습니다.

이 환경을 ROS2 학습만을 위한 것이 아니라 다른 용도로 사용할 경우도 있을테니

혹시 모를 충돌을 막기 위해 자동으로 실행되지 않고

단축어로만 실행되도록 하는 것을 추천드립니다.

 

왜 아래쪽 코드에는 새로운 명령어가 있는지, 어떤 명령어인지는 아래에 설명드리겠습니다 

그리고 해당 파일을 수정하고 난 뒤에는 단축어가 바로 실행되지 않습니다.

 source ~/.bashrc  명령어로 해당 파일을 다시 읽도록 하거나 터미널을 다시 실행해야 합니다.

 

두번째 코드에 추가한 sb 단축어도 이 명령어를 빠르게 실행하기 위해 만든 단축 명령어 sb 입니다.

그리고  ros_domain  단축어를 추가 했는데 ROS2에서는 노드 간 통신으로 DDS를 사용합니다.

같은 AP에서?(정확하게는 모르겠음) 여러 사람이 ROS2를 이용할 때 혼선이 일어날 수 있다고 합니다.

같은 노드나 토픽의 이름 등을 사용할 때 충돌이 일어날 수 있어 본인만의 도메인을 설정해야합니다.

 

방법은 터미널에  export ROS_DOMAIN_ID=13  과 같이 입력하여

ID를 정해주는 것인데 이를 단축어로 지정했습니다.

그리고 해당 단축어를 humble 단축어 안에서도 실행하도록 설정한 것입니다.

 

이 글은 민형기 강사님의 강의를 보고 복습을 위해 정리한 글입니다.

때문에 오류가 있을 수 있으며 자세한 사항은 유튜브를 참고해 공부하시면 좋을 것 같습니다.

 

+ VcXsrv 설치

또한 rviz와 같은 gui를 사용하기 위해 VcXsrv 를 설치해주었습니다.

바로 아래 과정은 WSL 환경이기 때문에 진행하는 것으로

우분투를 설치하신 분이라면 필요없는 과정입니다.

 

VcXsrv Windows X Server

Download VcXsrv Windows X Server for free. Project has been moved to https://github.com/marchaesen/vcxsrv Windows X-server based on the xorg git sources (like xming or cygwin's xwin), but compiled with Visual C++ 2012 Express Edition. Source code can also

sourceforge.net

설치 후 기본 설정인 multiple display 선택 → start no client 선택 → disable access control 추가 선택 →  마침

만약 없이 그래픽이나 새로운 창이 필요한 명령을 수행하면 다음과 같은 에러가 발생합니다.

qt.qpa.xcb: could not connect to display
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
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.

[ros2run]: Aborted

VcXsrv 설치 후 ~/.bashrc 파일을 수정해야 합니다.
사람마다 말이 너무 달라서 전부 시도해 보았습니다.

 

1번 방법

아래 코드를 .bashrc 파일 아래에 작성하고 저장했습니다.

vcxsrv를 위 설명대로 실행하여 설정하고

이후 source ~/.bashrc 명령으로 수정한 파일을불러왔습니다.

export DISPLAY="`grep nameserver /etc/resolv.conf | sed 's/nameserver //'`:0"
export LIBGL_ALWAYS_INDIRECT=0

 

2번 방법

아래 코드를 .bashrc 파일 아래에 작성하고 저장했습니다.

vcxsrv를 위 설명대로 실행하여 설정하고

이후 source ~/.bashrc 명령으로 수정한 파일을불러왔습니다.

export DISPLAY="`grep nameserver /etc/resolv.conf | sed 's/nameserver //'`:0"
export LIBGL_ALWAYS_INDIRECT=1

 

3번 방법

윈도우 파워쉘과 같은 터미널에서 (우분투 아님!) ipcofig 명령어로 ip를 확인합니다.

이더넷 어댑터 부분의 IPv4 주소를 확인하고 

export DISPLAY=<확인한 IP주소>:0.0

를 추가합니다.

결과

ros2 run turtlesim turtlesim_node 로 테스트 해보았는데

어이없게도 세 방법 모두 잘 작동이 되었고 저는 3번 방법으로 설정해놓았습니다..

하지만 rqt_graph를 실행했을 때는 

QStandardPaths: XDG_RUNTIME_DIR not set

에러가 발생하고 경로가 나타났다.

이를 해결하기위해 .bashrc 파일을 아래처럼 수정했다.

export XDG_RUNTIME_DIR=/some/directory/you/specify 
export RUNLEVEL=3