2 분 소요

MORAI를 설치하였다.

우리팀에서 사정이 생겨 AUTOWARE에서 MORAI로 플랫폼을 변환하였다.

오늘은 MORAI플랫폼과의 호환성을 위한 ROS Noetic을 도커에 올리고 그 위에 MORAI를 올려 모라이시뮬레이션을 실행해보고자 한다.

brave_sJhjVAkvx3

도커런 명령어 비교

# 비교(1)
# 기존에 썼던 오토웨어 컨테이너, ros2-humble 사용
# format
docker run --network=host \
	-e RMW_IMPLEMENTATION=rmw_cyclonedds_cpp \
	-e LIBGL_ALWAYS_SOFTWARE={1:Being_Rendered_By_OpenGL} \
	-e DISPLAY={Host_Display_Path} \
	-v {Volume_Mount_Option(1):X11_Socket_Container} \
	-v {Volume_Mount_Option(2):Mount_Directory_Path_For_Sharing} \
	-it {Image_Id}
	{Execute_Order}
	
# me
docker run --network=host \
	-e RMW_IMPLEMENTATION=rmw_cyclonedds_cpp \
	-e LIBGL_ALWAYS_SOFTWARE=1 \
	-e DISPLAY=$DISPLAY \
	-v /tmp/.X11-unix:/tmp/.X11-unix --gpus all \
	-v /home/jacksmith/playground/auto-workspace/:/home/jacksmith/playground/auto-workspace/ \
	-it 2c78ac889fa
	/bin/bash

하지만 이번에 이전한 morai에서는 ROS1을 사용한다고 하고, 그중에서 우리는 ROS의 호환버전인 noetic을 쓰기로 결정했다.

# 비교(2)
# 새롭게 쓰게 된 morai 컨테이너, ros1-noetic 사용
# format
docker run --network {컨테이너와 공유할 네트워크} \
	-it \
	--name {등록할 컨테이너 이름} \
	-v {볼륨 마운트 옵션(2):공유를 위한 마운트 디렉토리 경로} \
    {이미지_레포지토리:이미지-태그}

# me
docker run --network host \
	-it \
	--name morai-container \
	-v /home/jacksmith/playground/morai-workspace:/home/jackmsith/playground/morai-workspace \
    ros:noetic-ros-bae-focal

자주 쓸게 될 도커 명령어

추가적으로 컨테이너를 실행하고 끄고 하는 연결하는 명령어는 아래와 같다.

# morai 컨테이너 실행(연결)
docker exec -it morai-container /bin/bash

# morai 컨테이너 시작
docker start morai-container

# morai 컨테이너 중지
docker stop morai-container

# morai 컨테이너 종료(인스턴스 삭제)
docker rm morai-container
# (인스턴스를 생성하기 위해 하는 것이 docker run)

docker exec 이후 docker ps를 통해 프로세스 목록을 살펴보았다.

brave_3j0SPzD9dA

COMMAND속성을 보니 “/ros_entrypoint.sh”이라고 되어 있으나 그냥 “/bin/bash”이 기본값이니 이거를 기본 쉘로 보자.

모라이 설치를 진행하다

# 컨테이너에 접속
root@jacksmith-desktop:/home/jacksmith/playground/morai-workspace#

# catkin안에 src, 소스코드가 저장되는 곳으로 이동
root@jacksmith-desktop:/home/jacksmith/playground/morai-workspace# cd catkin_ws/src

# 서브모듈 업데이트를 위한 깃 설처
sudo apt update
sudo apt install git
git config --global --add safe.directory /home/jacksmith/playground/morai-workspace/catkin_ws/src/morai-standard

# 소스코드 디렉토리의 권한 변경
sudo chmod -R a+x morai_standard/

# 서브모듈 업데이트
git submodule update --init --recursive

# pip 설치
sudo apt update
sudo apt install python3-pip

# 필수 패키지 설치
sudo apt update
sudo apt install build-essential libssl-dev libffi-dev python3-dev
sudo apt install gfortran libopenblas-dev liblapack-dev

# pip, setuptools, wheel 업데이트
python3 -m pip install --upgrade pip setuptools wheel

# `numpy` 설치시 소스에서 빌드 대신 바이너리 사용
python3 -m pip install numpy

# 패키지가 명시된 파일을 찾고 그 파일에 명시된 패키지 설치
find -name 'requirements.txt' | xargs -L 1 sudo pip install -U -r

# 경로 이동
root@jacksmith-desktop:/home/jacksmith/playground/morai-workspace/catkin_ws/src/morai_standard# cd ..

root@jacksmith-desktop:/home/jacksmith/playground/morai-workspace/catkin_ws/src# cd ..

root@jacksmith-desktop:/home/jacksmith/playground/morai-workspace/catkin_ws# 

# 현재 디렉토리와 하위 디렉토리에 있는 ROS패키지의 모든 종속성 설치
rosdep install --from-paths . --ignore-src -r -y

# ROS 패키지 빌드
catkin_make

# ROS 환경변수 설정
source devel/setup.bash

위에서 환경변수 설정까지 마쳤으면, 90%까지 한거다. 근데 한가지!

source devel/setup.bash는 컨테이너가 새롭게 실행될 때마다 항상 잡아주어야 한다.

그래서!

매번 셸 세션을 시작할 때마다 이 명령어를 실행하는 대신, ~/.bashrc 파일에 해당 명령어를 기입하여, 해당 도커 컨테이너가 부팅될때마다 자동으로 로드가 되도록, 자동으로 명령을 불러와서 실행하도록 설정할 수있곘다.

echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

이러면 새로운 터미널을 열때마다 자동으로 환경변수가 설정되는 기적으 맛볼 수 있다.


roslaunch파일 실행을 위한 준비작업

# rviz노드 실행을 위한 패키지 설치
sudo apt update
sudo apt install ros-noetic-rviz


# tf노드 실행을 위한 패키지 설치
sudo apt update
sudo apt install ros-noetic-tf

여기까지 하니 roslaunch가 문제없이 실행되었다.

roslaunch morai_standard morai_standard.launch

시뮬레이터 다운 받기

이제 개발환경을 만들어주었으니 이를 테스트할 수 있는 시뮬레이션 환경을 공식사이트에서 다운받아야 한다.

※For Linux

1.런처 다운로드

해당 링크에 들어가서 리눅스 런처를 다운로드 했다.

2.라이선스 활성화

usb를 활용하는 방법과 계정을 활용하는 방법이 있는데, 나는 사용자 계정 로그인으로 라이센스를 수동인증해주었다.

brave_nn5LQFY0AE

위 사진에 있는 파일을 확인했다면, 해당 디렉토리에서 아래 명령어를 실행한다.

$ chmod +x MORAISim.sh
$ chmod +x MoraiLauncher_Lin.x86_64
$ ./MORAISim.sh

3.시뮬레이터 실행

이후 아래와 같이 실행창이 뜨면 사전에 받은 계정으로 로그인하 수 있었다.brave_sjxMYTZnSV

댓글남기기