CLOiSim?
LG์์ ์ ์ํ Simulator๋ก, 3D ์ธ๊ณ ํ๊ฒฝ๊ณผ ๋ก๋ด ์ค๋ช ์ด ํฌํจ๋ SDF ํ์ผ์ ์ฌ์ฉํ๋ ๋ฉํฐ ๋ก๋ด ์๋ฎฌ๋ ์ดํฐ์ด๋ค. Unity 3D๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ฉฐ, ์ฌ๋ฌ ์ผ์๊ฐ ์ฅ์ฐฉ๋ ๋ก๋ด์ ์ง์ํ๋ ๋ฑ Gazebo์ ์ ์ฌํ๊ฒ ๋์ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ผ ์ ์๋ค.
- C#์ฉ SDF Parser
- ๋จ์ผ์ฑ์ ์ํ SDF ๋ก๋ด ๊ตฌํ > ์๊ฐ/์ถฉ๋/์ผ์/๋ฌผ๋ฆฌ ๊ด์
- Unity 3D์ฉ SDF ํ๋ฌ๊ทธ์ธ
- UI ๋ชจ๋ > ํ๋ฉด ์ ๋ณด ๋ชจ๋
- ๋คํธ์ํฌ ๋ชจ๋ -> ์ผ์ ๋ฐ์ดํฐ ๋๋ ์ ์ด ์ ํธ๋ฅผ ์ ์กํ๋ ๋ชจ๋
- ์น ์๋น์ค -> ์น ์ธํฐํ์ด์ค๋ฅผ ํตํ ์๋ฎฌ๋ ์ด์ ์ ์ด ๋ชจ๋
CLOiSim์ Gazebo์ ๋น๊ตํ์ฌ ์์ ๊ฐ์ ๊ธฐ๋ฅ์ ์ถ๊ฐ๋ก ์ ๊ณตํ๋ค. ๋ ์์ธํ ๋ด์ฉ์ ๊ณต์ Github๋ฅผ ์ฐธ์กฐํ์.
LGE-ROS2
'lge-ros2' project is now heading to next-generation robotics world by cloud robotics framework with 5G connections. - LGE-ROS2
github.com
CLOiSim Install
ํน์๋ ํ๋ ์ํฉ์ ์ฐ๋ถํฌ ์์ฒด๊ฐ ๋ ์๊ฐ๋ ๊ฑธ ๋ง๊ธฐ ์ํด ๋์ปค, ์ฝ๋ค ๋ฑ ๊ฐ์ํ๊ฒฝ ์ฌ์ฉ์ ์ต๊ดํํ๊ณ ์๋ค. ์ด๋ฒ์๋ ๋์ปค๋ฅผ ์ฌ์ฉํ ๊ฒ์ธ๋ฐ, ํด๋ก์ด์ฌ ๋ฐฐํฌ์ฌ์์ ๊ณต์ ๋์ปค ์ด๋ฏธ์ง๋ฅผ ์ง์ํ๊ณ ์์ผ๋ฏ๋ก ํด๋น ํ์ผ์ ์ฌ์ฉํ์.
GitHub - lge-ros2/cloisim: Unity3D based multi-robot simulator can bring-up simulation environment by SDF(Simulation Description
Unity3D based multi-robot simulator can bring-up simulation environment by SDF(Simulation Description File) easily. And it supports to connect ROS2 through cloisim_ros. - GitHub - lge-ros2/cloisim:...
github.com
CLOiSim Github์ Repository๋ฅผ Cloneํ๊ณ , Docker ๋๋ ํ ๋ฆฌ๋ก ์ด๋ํ์ฌ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๋ค.
docker build -t cloisim .
์ด๋ฏธ์ง๊ฐ ์์ฑ๋์๋ค๋ฉด(docker images ๋ช ๋ น ์ ๋ ฅํ์ฌ ํ์ธ ๊ฐ๋ฅ) sample_resources๋ฅผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก Cloneํด์ผ ํ๋ค.
# Cloneํ ๋๋ ํฐ๋ฆฌ๋ ์์์ ์ํฌ์คํ์ด์ค๋ก ์ง์ ํ๋ฉด๋จ.
$ git clone https://github.com/lge-ros2/sample_resources.git
$CLOISIM_RESOURCES_PATH ๋ณ์์ Cloneํ ๋ฆฌ์์ค์ PATH๋ฅผ ํ ๋นํด์ค๋ค. ์ฐ๊ณ๋ ํ์ผ์์ ๋ฆฌ์์ค๋ฅผ ๊ฐ์ ธ์ฌ ๋ ์ฌ์ฉ๋๋ ๊ฒฝ๋ก๋ก, ํ ๋นํด์ฃผ์ง ์์ผ๋ฉด ์คํ์ด ๋ถ๊ฐํ๋ ๊ผญ ํด์ฃผ์ด์ผ ํ๋ค.
export CLOISIM_RESOURCES_PATH=/<simulator-environment-PATH>/sample_resources/
./start.sh lg_seocho.world
์ฌ๊ธฐ๊น์ง ํ๋ค๋ฉด ์ปจํ ์ด๋๊ฐ ์๋์ผ๋ก ์์ฑ ๋ฐ ์คํ๋๊ณ , ๋์ปค ํ๊ฒฝ์์ ํด๋ก์ด์ฌ ๋ฐ๋ชจ(LG ์์ด๊ตฌ ์ฌ์ฅ์ธ ๊ฒ ๊ฐ์)๊ฐ ์คํ๋ ํ ๋ฐ, ๋ง์ฝ ์๋๋ค๋ฉด ๋๋ณด๊ธฐ๋์ ์ฐธ๊ณ ํ๋ฉด ๋๋ค.
CLOiSim์ Vulkan ํ๋ก์ ํธ์ ์ฐ๊ณ๋์ด ์์ด ์์ธก์ ์ ๋ฐ์ดํธ ๋ฒ์ ์ด ์ผ์นํด์ผ ์คํ์ด ๊ฐ๋ฅํ ๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ๊ทธ๋ฐ๋ฐ, Vulkan์ ๋ฒ์ ์ ์ ๊ทธ๋ ์ด๋๋์์ผ๋ CLOiSim์ ๋ฒ์ ์ด ์ ์ง๋๊ณ ์์ด ์๋ฎฌ๋ ์ดํฐ ์คํ์ด ๋ถ๊ฐํ ์ํฉ์ด ๋ฐ์ํ๋ค.
๋์ปค ์ด๋ฏธ์ง&์ปจํ ์ด๋ ๋น๋์ ์ฌ์ฉ๋๋ ์๋ ๋ ํ์ผ์์ ํด๋น ๋ถ๋ถ์ ์์ ํ์ฌ buildํ๋ฉด ์ ์์ ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
DockerFile
FROM ubuntu:20.04
# configuration for Nvidia capability
ENV DEBIAN_FRONTEND=noninteractive \
NVIDIA_VISIBLE_DEVICES=all \
NVIDIA_DRIVER_CAPABILITIES=graphics,display
# Prerequisite for Vulkan capability
#ADD https://gitlab.com/nvidia/container-images/vulkan/raw/master/nvidia_icd.json /etc/vulkan/icd.d/nvidia_icd.json
ADD https://github.com/Babbleshack/nvidia-vulkan-container/blob/master/nvidia_icd.json /etc/vulkan/icd.d/nvidia_icd.json
RUN apt-get update -qq && \
apt-get upgrade -qq -y && \
apt-get install --no-install-recommends -qq -y \
xz-utils wget curl ca-certificates libgl1 libvulkan1 libc6-dev libxcursor1 libminizip-dev \
&& rm -rf /var/lib/apt/lists/* \
&& apt-get clean
# Get version info and extract simulator and remove downloaded file
RUN export CLOISIM_VERSION=$(curl -Ls -o /dev/null -w %{url_effective} --url https://github.com/lge-ros2/cloisim/releases/latest | cut -d'/' -f8) && \
# export CLOISIM_TARGETFILE=CLOiSim-${CLOISIM_VERSION} && \
export CLOISIM_TARGETFILE=CLOiSim-linux-${CLOISIM_VERSION} && \
wget -q --directory-prefix /tmp "https://github.com/lge-ros2/cloisim/releases/download/${CLOISIM_VERSION}/${CLOISIM_TARGETFILE}.tar.xz" && \
tar -xf /tmp/${CLOISIM_TARGETFILE}.tar.xz -C /tmp && rm /tmp/${CLOISIM_TARGETFILE}.tar.xz && \
mv /tmp/${CLOISIM_TARGETFILE} /opt/ && \
ln -s /opt/${CLOISIM_TARGETFILE} /opt/CLOiSim
ENV CLOISIM_FILES_PATH=/opt/resources/media \
CLOISIM_MODEL_PATH=/opt/resources/models \
CLOISIM_WORLD_PATH=/opt/resources/worlds
# final simulatior location
WORKDIR /opt/CLOiSim
ENTRYPOINT ["./run.sh"]
start.sh
#!/bin/sh
export CLOISIM_RESOURCES_PATH=/home/idox23/cloisim_git/sample_resources/
xhost +
docker run -ti --rm --gpus all --net=host \
-e DISPLAY \
-v /tmp/.Xauthority:/tmp/.Xauthority \
-v /tmp/cloisim/unity3d:/root/.config/unity3d \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v /usr/share/fonts/:/usr/share/fonts/ \
-v ${CLOISIM_RESOURCES_PATH}/media:/opt/resources/media/ \
-v ${CLOISIM_RESOURCES_PATH}/models:/opt/resources/models/ \
-v ${CLOISIM_RESOURCES_PATH}/worlds:/opt/resources/worlds/ \
--name closim_test \
cloisim $1
+) 2022-07-26. Vulkan์ ๋ฒ์ ์ด ๋ ์ ๊ทธ๋ ์ด๋๋์๋๋ฐ, CLOiSim์์ ๋ฐ์๋์ง ์์ ๋ถ๋ถ์ด ์๋์ง ์ด๋ฏธ์ง ๋น๋๊ฐ ๋์ง์๋๋ค. ์ ์ฒด ํ์ผ ๊ตฌ์กฐ๋ฅผ ํ์ ํ์ง ๋ชปํ๊ธฐ์ ์ฐพ์ผ๋ ค๋ฉด ๊ฝค๋ ์ค๋๊ฑธ๋ฆด ๊ฒ ๊ฐ์ ์์ง๊น์ง๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์ด ๋ณด์ธ๋ค. ๊ธฐ์กด์ ์ฌ์ฉํ๋ ์ด๋ฏธ์ง๋ฅผ ์ฐ๋ ๊ฒ ๋ฐ์๋..
* start.sh ํ์ผ๋ก ๋์ปค ์ปจํ ์ด๋๋ฅผ ์คํํ ๊ฒฝ์ฐ, ํด๋น ๋์ปค ํฐ๋ฏธ๋์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๊ณ ์ถ๋ค๋ฉด(CLI) ์๋์ ๊ฐ์ ๋ฐฉ๋ฒ์ ์ด์ฉํ๋ฉด ๋๋ค.
# ๋ช
๋ น์ด๋ง ์
๋ ฅํ๊ณ ์ถ์ ๊ฒฝ์ฐ
$ docker exec <docker-name> <command>
# ์ฐ๊ฒฐ๋ ํฐ๋ฏธ๋ ํ๋ฉด์ ์ฌ์ฉํ๊ณ ์ถ์ ๊ฒฝ์ฐ
$ docker exec -it <docker-name> /bin/bash
CLOiSim ROS2 Install
์๋ฎฌ๋ ์ดํฐ๊ฐ ์ ์์ ์ผ๋ก ์คํ๋๋ค๋ฉด ROS๋ฅผ ์ด์ฉํ์ฌ ํด๋ก์ด์ฌ ๋ก๋ด(cloi1)์ ์กฐ์ข ํ ์ ์๋ค. ์ฌ๊ธฐ์๋ ๊ฐ๋จํ๊ฒ ํค๋ณด๋ ์ ๋ ฅ์ผ๋ก ๋ก๋ด์ ์๋ ์กฐ์ํ๋ ROS์ ๋ํ ์์ ๋ฅผ ์คํํด๋ณด๊ฒ ๋ค.
GitHub - lge-ros2/cloisim_ros: ROS2 simulation device packages to connect unity based multi-robot simulator CLOisim.
ROS2 simulation device packages to connect unity based multi-robot simulator CLOisim. - GitHub - lge-ros2/cloisim_ros: ROS2 simulation device packages to connect unity based multi-robot simulator C...
github.com
CLOiSim Github์ cloisim_ros ๋ ํฌ์งํ ๋ฆฌ๋ฅผ Cloneํ๊ณ , ๋์ปค ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ์.
$ git clone https://github.com/lge-ros2/cloisim_ros.git -b foxy
$ cd cloisim_ros
$ docker build -t cloisim_ros .
๋น๋๊ฐ ์๋ฃ๋์๋ค๋ฉด cloisim_ros ๋๋ ํฐ๋ฆฌ ๋ด์ launch.sh ํ์ผ์ ์คํํ์ฌ ๋์ปค ํ๊ฒฝ์ผ๋ก ์ ์ํ๋ค.
$ ./launch.sh
๋์ปค ํ๊ฒฝ์ ์ ์๋๋ฉด ํด๋น ํฐ๋ฏธ๋์ ์ ์ฌ์ง๊ณผ ๊ฐ์ด ์ ๋ ฅ์ด ๋ถ๊ฐํ ์ํ๊ฐ ๋๊ธฐ ๋๋ฌธ์, ์๋ก์ด ํฐ๋ฏธ๋์์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ ์ ์๋๋ก executeํด์ผ ํ๋ค. ์์ผ๋ก์ ๋ชจ๋ ๋ช ๋ น์ ์ง๊ธ ์ฐ ํฐ๋ฏธ๋์์ ์ ๋ ฅํ๋ฉด ๋๋ค.
$ docker exec -it cloisim_ros /bin/bash
ROS2 Foxy ๋ฒ์ ์ ์ค์นํ๋ค. ํด๋ก ํ ๊น์๋ ROS๊ฐ ์ค์น๋์ด ์์ง ์์ ์๋์ผ๋ก ์ค์นํด์ฃผ์ด์ผ ํ๋๋ผ.
$ apt-get update && apt-get install ros-foxy-teleop-twist-keyboard
$ source /opt/ros/foxy/setup.bash
$ cd /opt/lge-ros2
$ . install/local_setup.bash
์ด์ ์คํํ๋ ค๊ณ ํ ํค๋ณด๋ ์ ๋ ฅ ์์ ์ฝ๋๋ฅผ ์คํํ๋ค. ๋ณธ ์๋ฎฌ๋ ์ดํฐ์์ ๋ก๋ด์ ์ด๋ฆ์ด 'cloi1'์ด๋ฏ๋ก, args ์ธ์์ ๋ก๋ด ์ด๋ฆ์ ์ ๋ฌํด์ค๋ค.
$ ros2 run teleop_twist_keyboard teleop_twist_keyboard __ns:=/cloi1
๋์ปค์ --rm ์ต์ ์ ์ฌ์ฉํ์ฌ ์ปจํ ์ด๋๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์, ๊ฐ์ข ์ต์ ๊ณผ EXEC ๋ช ๋ น์ด ์ด๊ธฐํ๋ ๊ฒ์ด๋ค. ํฐ๋ฏธ๋์ ์ผค ๋๋ง๋ค ์ ๋ ฅํ๋ ๊ฒ์ด ๊ท์ฐฎ์ ๋๋ ์๋์ ๊ฐ์ด ๋ ์คํ ํ์ผ์ ์๋จ์ ๋ช ๋ น์ ์ถ๊ฐํ์ฌ ์ฌ์ฉํ๋ค.
~/cloisim/Docker/start.sh
#!/bin/sh
export CLOISIM_RESOURCES_PATH=/home/idox23/cloisim_git/sample_resources/
export CLOISIM_FILES_PATH=$CLOISIM_RESOURCES_PATH/media
export CLOISIM_WORLD_PATH=$CLOISIM_RESOURCES_PATH/worlds
export CLOISIM_MODEL_PATH=$CLOISIM_RESOURCES_PATH/models
xhost +
docker run --rm -ti --gpus all --net=host \
-e DISPLAY \
-v /tmp/.Xauthority:/tmp/.Xauthority \
-v /tmp/cloisim/unity3d:/root/.config/unity3d \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v /usr/share/fonts/:/usr/share/fonts/ \
-v ${CLOISIM_RESOURCES_PATH}/media:/opt/resources/media/ \
-v ${CLOISIM_RESOURCES_PATH}/models:/opt/resources/models/ \
-v ${CLOISIM_RESOURCES_PATH}/worlds:/opt/resources/worlds/ \
--name cloisim_test \
cloisim $1
~/cloisim_ros/launch.sh
#!/bin/bash
export CLOISIM_BRIDGE_IP=$(ip addr show dev docker0 | grep "inet" | awk 'NR==1{print $2}' | cut -d'/' -f 1)
export ROS_DOMAIN_ID=22
export CLOISIM_SERVICE_PORT=8080
docker run -it --rm --net=host --name cloisim_ros -e ROS_DOMAIN_ID=${ROS_DOMAIN_ID} cloisim_ros $@