28 May 2020
|
Flutter
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
28 May 2020
|
Flutter
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 Studio나 IntelliJ, VSCode 같은 경우는 Flutter 플러그인을 설치해줍니다.
Flutter 프로젝트 생성하기
flutter create snowdeer_flutter
28 May 2020
|
C++
Git Commit Id 및 날짜 획득 방법
CMakeLists.txt 예제
CMakeLists.txt 파일에 다음 명령어를 추가하면 Git Commit Id 및 Commit 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;
}
30 Apr 2020
|
ROS
기본 요소 설치
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
22 Apr 2020
|
ROS
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