ROS를 wsl2내에서 docker container로 빌드 한 후,컨테이너 내부를 x11을 이용해 GUI 환경 구성하기
가장 기본 구조
추후에 2_ 3_ 4_ 쪽으로 가면 dockerfile 구성 및 ros 버전업, ros네이게이션 연동 까지 할 예정
조건
윈도우 : 11
wsl2 ( window 내에 설치,디폴트 ) // Windows 10 버전 2004 이상 버전 필요함
리눅스 : Ubuntu ( wsl2에서 설치 microoffice store)
docker : docker desktop ( window 내에 설치 ) // wsl2 버전 필요함 wsl2랑 연동 되는거라
x11 버전 : VcXsrv ( window 내에 설치, 옵션 변경해줌)
ROS : kinetic ( wsl2에서 docker pull로 설치 )
기본적인 지식이 필요합니다.
docker ros x11 bashrc 리눅스
다운로드 버전 링크
윈도우
wsl2
리눅스
docker desktop
까지는 인터넷 쳐서 받음 됨 XD
x11
https://sourceforge.net/projects/vcxsrv/
VcXsrv Windows X Server
Download VcXsrv Windows X Server for free. 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 be compiled with VS2008, VS2008 Express Edition and VS2010 Expr
sourceforge.net
참조링크
여기꺼 봄
저기 사람은
https://jack-kawell.com/2019/09/11/setting-up-ros-in-windows-through-docker/
요기꺼 봄
나는 첫번째 링크 보고 구현 했음
두번째 링크가 좀더 자세함
셋업 설치 과정 시작
1. 윈도우 wsl2 리눅스 docker 까지 설치됫다 가정 하고 설명합니다.
2. https://sourceforge.net/projects/vcxsrv/
에서 x11 을 다운 받습니다.
To run VcXsrv, you will open the application, and click through a few settings. Most can stay at default, but ensure that:
- Native opengl is left unchecked
- Disable access control is checked
<-- 깔고나서 XLaunch 파일 키면 밑에 세팅 할 수 있는ㄱ ㅓ뜸
위 내용 외에는 전부 default로 다운 받습니다. 보안사항( 사설 및 공용 네트워크 으로 함 )
사설
wsl1에서 x11 을 쓰려면 보안레벨을 낮춘다거나 하는 부분이 필요합니다. 그러나 docker desktop을 이용해 x11 을 쓰는 경우 방화벽 보안레벨을 낮추지 않고도 사용이 가능합니다. 본인 피셜로는 이부분이 가장 강점이라고 생각하는중... x11, docker desktop, wsl2(리눅스) 조합이 정말 좋음
심지어 이런 그림도 있음 ㄷㄷ MS ..ㄷㄷ
3. docker hub 로 ROS kinetic 이미지 다운
docker pull osrf/ros:kinetic-desktop-full
4. 이미지 이용해서 docker container 구성 ( 중요 !!!!!!!!!!!!!! )
docker run -it --name ros-test -e DISPLAY=host.docker.internal:0.0 -e LIBGL_ALWAYS_INDIRECT=0 osrf/ros:kinetic-desktop-full bash
여기 나오는 내용 알아야함
-e 설명 : 컨테이너에 환경 변수를 설정합니다. ( 이 밑에 부분은 그냥 퍼온거 )
windows 나 Mac 의 Host IP 를 가져오려면
host.docker.internal
Linux의 host ip 를 가져오려면
localhost
원래 원문은
echo 'export DISPLAY={your_ip_address}:0.0' >> ~/.bashrc
이거임 자기 ip 주소 기입
이것은 응용 프로그램이 X 서버를 찾을 수 있도록 합니다. WSL용 vEthernet 네트워크 어댑터를 지정하는 IP에 연결해야 합니다. 내가 그 IP를 검색하는 데 필요한 모든 것이 host.docker.internal(물론 Docker를 사용할 때)이라는 것을 알아내는 데 얼마나 오랜 시간이 걸렸는지 당신은 믿을 수 없을 것입니다. WSL2에 대한 많은 자습서는 resolv.conf 파일에 의존하지만 Docker에서는 호스트 대신 컨테이너를 지정하는 특수 IP를 포함하므로 해당 파일은 WSL2의 일반 배포판에서만 작동합니다.
LIBGL_ALWAYS_INDIRECT=0
이것은 애플리케이션이 렌더링되는 방법을 지정합니다. 간접이 켜져 있는 경우 다음 단계에서 기본 OpenGL을 켜야 합니다. 불행히도 일부 ROS 응용 프로그램은 간접 렌더링과 함께 작동하지 않습니다. 즉, WSL을 통한 기본 가속이 없습니다.
위 내용 설명 ( 간단히 말하자면 DRM이 Indirectly하게 rendering 하게끔 해주는 리눅스 커널 하위 시스템인데 wsl에서는 지원을 하지 않는다. )
https://en.wikipedia.org/wiki/Direct_Rendering_Manager
Direct Rendering Manager - Wikipedia
From Wikipedia, the free encyclopedia Jump to navigation Jump to search Subsystem of the Linux kernel The Direct Rendering Manager (DRM) is a subsystem of the Linux kernel responsible for interfacing with GPUs of modern video cards. DRM exposes an API that
en.wikipedia.org
5. run 한 컨테이너 안에서 ROS 관련 설정 함
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
한다음 'roscore'를 실행해 줍니다.
6. 이제 wsl2에 있는 컨테이너에서 ROS 관련 GUI 화면이 windows에 뜨는 지 확인해 봅시당
docker exec -it ros-test bash
하고
rqt_console
이것도 해보고
gazebo worlds/pioneer2dx.world
or
gazebo
이것도 해보삼 ( 가제보는 시뮬레이션 기본 툴 )
'협업툴,가상환경 정리 > wsl2_명렁어-docker_GUI_with_x11' 카테고리의 다른 글
1_docker_GUI_in_linux (0) | 2022.12.13 |
---|---|
wsl 명령어 정리 (0) | 2022.10.12 |
3_docker_GUI_in_ssh (0) | 2022.07.12 |
x11 원리 개념 정리(display server, x server, x client) (0) | 2022.07.11 |
댓글