Flutter for Desktop App (Mac OS)

|

Setup

flutter channel dev
flutter upgrade
flutter config --enable-macos-desktop


Device 확인

그 이후 flutter devices 명령어를 통해 현재 Mac PC가 발견되면 준비 끝입니다.

$ flutter devices

1 connected device:

macOS • macOS • darwin-x64 • Mac OS X 10.15.4 19E287


실행

flutter create snowdeer_flutter
cd snowdeer_flutter

flutter run -d macos

Flutter 설치 방법(MacOS)

|

Flutter 설치 방법

Flutter를 Mac OS에 설치 하는 방법입니다.

여기에서 Flutter SDK를 다운로드할 수 있으며, 그 중 Mac OS 버전은 여기에서 받을 수 있습니다.

설치 후 다음 명령어로 Flutter를 설치합니다.

mkdir ~/Development
cd ~/Development
unzip ~/Downloads/flutter_macos_1.17.2-stable.zip

그리고 .zshrc 파일에 아래 부분을 추가합니다.

# for Flutter
export PATH=$PATH:~/Development/flutter/bin


Pre-download Development Binaries

flutter precache


Flutter doctor

설치 후 flutter doctor 명령어를 이용해서 현재 시스템에 부족한 부분이 어떤 것이 있는 지 점검할 수 있습니다.

flutter doctor


점검 사항

안드로이드 라이센스가 수락되어 있지 않으면

flutter doctor --android-licenses

를 해줍니다.

XCode 설치가 불완전하면

sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
sudo xcodebuild -runFirstLaunch

sudo gem install cocoapods

를 실행합니다.

Android StudioIntelliJ, VSCode 같은 경우는 Flutter 플러그인을 설치해줍니다.


Flutter 프로젝트 생성하기

flutter create snowdeer_flutter

Git Commit Id를 문자열로 획득하는 방법

|

Git Commit Id 및 날짜 획득 방법

CMakeLists.txt 예제

CMakeLists.txt 파일에 다음 명령어를 추가하면 Git Commit IdCommit Date를 얻을 수 있습니다. add_definitions 명령어를 이용해서 C++ 코드에 전달할 수 있습니다.

execute_process(
		COMMAND git log -1 --format=%h
		WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
		OUTPUT_VARIABLE GIT_COMMIT_HASH
		OUTPUT_STRIP_TRAILING_WHITESPACE
)

execute_process(
		COMMAND git log -1 --format=%cd
		WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
		OUTPUT_VARIABLE GIT_COMMIT_DATE
		OUTPUT_STRIP_TRAILING_WHITESPACE
)

add_definitions("-DVERSION_HASH=\"${GIT_COMMIT_HASH}\"")
add_definitions("-DCOMMIT_DATE=\"${GIT_COMMIT_DATE}\"")


C++ 예제

실제 C++ 코드에서 사용하는 예제는 다음과 같습니다.

#ifndef VERSION_HASH
#define VERSION_HASH "0000000"
#endif

#ifndef COMMIT_DATE
#define COMMIT_DATE ""
#endif

string Prefs::GET_VERSION() {
  return VERSION_HASH;
}

string Prefs::GET_COMMIT_DATE() {
  return COMMIT_DATE;
}

MacOS에 ROS 2.0 설치하기(Eloquent Elusor)

|

기본 요소 설치

brew install python3
brew install asio tinyxml2
brew install tinyxml eigen pcre poco

brew install qt freetype assimp
brew install console_bridge
brew install log4cxx
brew install cunit

brew install graphviz

python3 -m pip install pygraphviz pydot
python3 -m pip install lxml
python3 -m pip install catkin_pkg cryptography empy ifcfg lark-parser lxml netifaces numpy pyparsing pyyaml setuptools argcomplete


ROS2 바이너리 다운로드

ROS 2.0 바이너리는 여기에서 다운로드 가능합니다.

mkdir -p ~/ros2_eloquent
cd ~/ros2_eloquent

tar xf ros2-eloquent-20200124-macos-amd64.tar.bz2


설치 확인

. ~/ros2_eloquent/ros2-osx/local_setup.zsh
ros2 run demo_nodes_cpp talker
. ~/ros2_eloquent/ros2-osx/local_setup.zsh
ros2 run demo_nodes_py listener


에러 발생시

Poco 버전 관련 에러

현재 MacOS(Catalina 버전 이후)에서 ROS 2.0 바이너리를 설치한 후 talker, listener와 같은 예제 명령어를 실행하면 아래와 같은 오류 메시지가 나오면서 실행이 되지 않습니다. Poco 라이브러리 버전 때문에 발생하는 문제입니다.

Failed to load entry point 'launch': dlopen(/Users/justinmarple/ros2_eloquent/ros2-osx/lib/python3.7/site-packages/rclpy/_rclpy.cpython-37m-darwin.so, 2): Library not loaded: /usr/local/opt/poco/lib/libPocoFoundation.63.dylib
  Referenced from: /Users/justinmarple/ros2_eloquent/ros2-osx/lib/librosidl_typesupport_c.dylib
  Reason: image not found
The C extension '/Users/justinmarple/ros2_eloquent/ros2-osx/lib/python3.7/site-packages/rclpy/_rclpy.cpython-37m-darwin.so' failed to be imported while being present on the system. Please refer to 'https://index.ros.org/doc/ros2/Troubleshooting/#import-failing-even-with-library-present-on-the-system' for possible solutions
Failed to load entry point 'info': dlopen(/Users/justinmarple/ros2_eloquent/ros2-osx/lib/python3.7/site-packages/rclpy/_rclpy.cpython-37m-darwin.so, 2): Library not loaded: /usr/local/opt/poco/lib/libPocoFoundation.63.dylib
  Referenced from: /Users/justinmarple/ros2_eloquent/ros2-osx/lib/librosidl_typesupport_c.dylib
  Reason: image not found

이 경우는 ROS 2.0 을 소스로 다운받아서 빌드 후 설치하거나 아래 명령어로 임시로 실행되도록 헐 수 있습니다.

ln -s /usr/local/opt/poco/lib/libPocoFoundation.71.dylib /usr/local/opt/poco/lib/libPocoFoundation.63.dylib

sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat libsdl1.2-dev xterm


TinyXml2 버전 관련 에러

dyld: Library not loaded: /usr/local/opt/tinyxml2/lib/libtinyxml2.7.dylib
  Referenced from: /Users/snowdeer/ros2_eloquent/ros2-osx/lib/libbuiltin_interfaces__rosidl_typesupport_fastrtps_c.dylib
  Reason: image not found

만약 위와 같은 오류가 발생한다면 먼저 tinyxml2 라이브러리 버전을 최신으로 설치합니다.

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" < /dev/null 2> /dev/null

brew install tinyxml2

이 글을 포스팅하는 현 시점에는 tinyxml2 8.0이 설치가 되네요. ROS2는 7.0 이후부터 지원합니다. 하지만 바이너리 빌드시 7.0으로 링크가 되어 있기 때문에 8.0을 7.0 버전으로 사용할 수 있도록 다음 명령어를 추가로 실행합니다.

cd /usr/local/opt/tinyxml2/lib
cp libtinyxml2.8.dylib libtinyxml2.7.dylib

ROS 2.0 Eloquent 설치 방법(apt 이용)

|

Ubuntu 18.04 기준입니다. 언제부턴가 apt install 명령어를 통해 ROS 2.0 설치가 가능해져서 설치가 아주 수월해졌습니다. Dashing 버전과 설치 방법이 동일합니다.


Locale 설정

sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8


GPG Key 설치

sudo apt update && sudo apt install curl gnupg2 lsb-release
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
sudo sh -c 'echo "deb [arch=amd64,arm64] http://packages.ros.org/ros2/ubuntu `lsb_release -cs` main" > /etc/apt/sources.list.d/ros2-latest.list'


ROS2 패키지 설치

sudo apt update
sudo apt install ros-eloquent-desktop


그리고 ROS2 실행 환경을 실행하려면

source /opt/ros/eloquent/setup.bash

와 같은 명령어를 실행하면 되며, .bashrc 등에 위 명령어를 추가할 수도 있습니다. 저는 ZShell을 사용 중이고 ROS_DOMAIN_ID 등을 별도로 지정하기 때문에 ~/.zshrc 파일에 아래 내용을 설정해놓고 사용합니다.

function ros2env() {
  export ROS_DOMAIN_ID=$1
  source /opt/ros/eloquent/local_setup.zsh
  echo "ROS Domain ID =" $ROS_DOMAIN_ID
}

이러면 어디서나 ros2env 110과 같은 명령어로 ROS 2.0 환경을 불러올 수 있습니다. 띄어쓰기 뒤의 파라메터는 ROS_DOMAIN_ID 값입니다.


부가적 설치

부가적으로 아래 항목들도 설치해놓으면 개발할 때 편리합니다. 특히 가장 아래 부분의 colcon 컴파일러는 꼭 설치하는 편이 좋습니다.

sudo apt update
sudo apt install -y python-rosdep
sudo rosdep init
rosdep update

sudo apt install -y libpython3-dev

sudo apt install python3-argcomplete

sudo apt install python3-colcon-common-extensions


테스트 명령어

각각 다른 터미널에서 아래 명령어를 실행합니다.

ros2 run demo_nodes_cpp talker

ros2 run demo_nodes_py listener