MAC OS에 ROS2 for Android 설치하는 방법

|

MAC OS에 ROS2 for Android 설치하는 방법

ROS 2.0 설치 방법은 자주 업데이트되거나 변경되기 때문에 아래 방법이 잘 되지 않으면 Esteve github를 참고하는 편이 좋습니다. 2018년 11월 6일 기준 제가 직접 설치하면서 검증한 방법입니다.


JAVA 8 설치

ROS 2 for Android는 Java 8 버전에서만 제대로 동작합니다. 저같은 경우는 그보다 높은 버전이 설치되어 있어서 하위 버전의 JDK를 추가로 설치해줬습니다. JDK 1.8은 여기에서 다운로드 할 수 있습니다.

다음 명령어를 이용해서 JAVA_HOME 설정을 해주고 gradle도 설치합니다.

$ brew tap caskroom/versions
$ brew cask install java8
$ export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_192.jdk/Contents/Home

$ brew cask install java

$ brew install gradle

맥 OS에는 vcstool도 기본적으로 설치되어 있지 않기 때문에 설치해줍니다.

pip3 install vcstool


ament_ws 설치

mkdir ament_ws/src
cd ament_ws
curl -skL https://raw.githubusercontent.com/esteve/ament_java/master/ament_java.repos -o ament_java.repos
vcs import src < ament_java.repos
src/ament/ament_tools/scripts/ament.py build --symlink-install --isolated


Anroid Studio 및 NDK 설치

Android NDK를 다운로드해서 설치합니다. 여기에서 다운로드 가능하며 버전은 16b 이상이면 가능합니다. 저는 17b 버전으로 설치했습니다. 물론 Android Studio나 Android SDK도 비슷한 방법으로 다 설치가 되어 있어야 합니다.

그 이후 환경 변수를 아래와 같이 설정합니다.

export ANDROID_PATH=/Users/snowdeer/Library/Android
export ANDROID_SDK=${ANDROID_PATH}/sdk
export ANDROID_NDK=${ANDROID_PATH}/ndk/android-ndk-r17b
export ANDROID_NDK_HOME=${ANDROID_NDK}
export ANDROID_HOME=${ANDROID_SDK}
export ANDROID_TOOLS=${ANDROID_SDK}/platform-tools
export PATH=$PATH:$ANDROID_SDK:$ANDROID_TOOLS:$ANDROID_NDK

ROOT_DIR=${HOME} AMENT_WORKSPACE=${ROOT_DIR}/ament_ws ROS2_ANDROID_WORKSPACE=${ROOT_DIR}/ros2_android_ws export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)

export PYTHON3_EXEC=”$( which python3 )” export ANDROID_ABI=armeabi-v7a export ANDROID_NATIVE_API_LEVEL=android-21 export ANDROID_TOOLCHAIN_NAME=arm-linux-androideabi-clang

ROS 2 for Android 소스 다운로드

mkdir -p ${ROS2_ANDROID_WORKSPACE}/src
cd ${ROS2_ANDROID_WORKSPACE}
wget https://raw.githubusercontent.com/esteve/ros2_java/master/ros2_java_android.repos
vcs import ${ROS2_ANDROID_WORKSPACE}/src < ros2_java_android.repos
source ${AMENT_WORKSPACE}/install_isolated/local_setup.sh


빌드

rcl_lifecycle 패키지 같은 경우 최근에 ROS 2에 추가되었는데 아직 ROS 2 for Android에서는 지원하지 않는 것 같아서 제외했습니다.

ament build --isolated --skip-packages test_msgs rcl_lifecycle \
  --cmake-args \
  -DPYTHON_EXECUTABLE=${PYTHON3_EXEC} \
  -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \
  -DANDROID_FUNCTION_LEVEL_LINKING=OFF \
  -DANDROID_NATIVE_API_LEVEL=${ANDROID_NATIVE_API_LEVEL} \
  -DANDROID_TOOLCHAIN_NAME=${ANDROID_TOOLCHAIN_NAME} \
  -DANDROID_STL=gnustl_shared \
  -DANDROID_ABI=${ANDROID_ABI} \
  -DANDROID_NDK=${ANDROID_NDK} \
  -DTHIRDPARTY=ON \
  -DCOMPILE_EXAMPLES=OFF \
  -DCMAKE_FIND_ROOT_PATH="$AMENT_WORKSPACE/install_isolated;$ROS2_ANDROID_WORKSPACE/install_isolated" \
  -- \
  --parallel \
  --ament-gradle-args \
  -Pament.android_stl=gnustl_shared -Pament.android_abi=$ANDROID_ABI -Pament.android_ndk=$ANDROID_NDK --