최신 ros docker 이미지로 gazebo를 그냥 돌리면 초당 4 frame으로 업데이트 된다. 참고 사용 사용하려다 느려 도저히 사용할 수 없어 방법을 찾아 봤다. nvidia-docker로 runtime을 nvidia로 입력해 주면 초 당 60 프레임으로 업데이트 된다. 금방 할 수 있어 찾은 보람이 있다.
http://wiki.ros.org/docker/Tutorials/Hardware%20Acceleration
위 사이트를 참조하여 아래 Dockerfile로 새롭게 이미지를 만들었다.
FROM osrf/ros:noetic-desktop-full # nvidia-container-runtime ENV NVIDIA_VISIBLE_DEVICES \ ${NVIDIA_VISIBLE_DEVICES:-all} ENV NVIDIA_DRIVER_CAPABILITIES \ ${NVIDIA_DRIVER_CAPABILITIES:+$NVIDIA_DRIVER_CAPABILITIES,}graphics USER root RUN apt -y update RUN apt -y install vim COPY ./.bashrc /root/
매번 입력하기 귀찮으니 ros 강의 자료에 있는 alias를 참조하여 .bashrc를 루트 홈에 넣었다. 처음 컨테이너를 실행할 때 entrypoint로 bashrc를 자동으로 실행하는데, 두번째 부터는 같은 컨테이너에 붙여도 bashrc를 실행하지 않는다. docker exec 옵션에 없는 듯 하다.
now0930@amd2004:~/dockerBuild/ros$ docker exec -it noetic_ros /bin/bash root@amd2004:/# sds
매번 컨테이너에 들어간 후 sds를 실행해야 하여 귀찮다.
now0930@amd2004:~/dockerBuild/ros$ cat .bashrc alias eb='vi ~/.bashrc' alias sb='source ~/.bashrc' alias cma='catkin_make -DCATKIN_WHITELIST_PACKAGES=""' alias cop='catkin_make --only-pkg-with-deps' alias sds='source /opt/ros/noetic/setup.bash' alias axclient='rosrun actionlib axclient.py' set -o vi
xhost로 local을 추가하여 docker 출력을 돌린다. docer run을 다음과 같이 한다.
now0930@amd2004:~/dockerBuild/ros$ sudo xhost +local:docker [sudo] now0930 암호: non-network local connections being added to access control list now0930@amd2004:~/dockerBuild/ros$ xhost access control enabled, only authorized clients can connect LOCAL: INET:localhost SI:localuser:now0930 now0930@amd2004:~/dockerBuild/ros$
#!/bin/bash nvidia-docker run -it -v /run/user/1000:/run/user/1000 -v /dev:/dev -v /tmp/.X11-unix:/tmp/.X11-unix:ro \ -v /home/now0930/ros_test:/home/ros_test --name noetic_ros \ --privileged --ipc=host --shm-size=512m --net=host -e DISPLAY=$DISPLAY \ -e XDG_RUNTIME_DIR=/run/user/1000 --runtime=nvidia \ osrf/ros_custom:noetic-desktop-full