정리노트
Jetson Xavier AGX - Jetpack5.0.1세팅(4) - ROS2 Galatic 설치 및 개발환경 구축 본문
Jetson Xavier AGX - Jetpack5.0.1세팅(4) - ROS2 Galatic 설치 및 개발환경 구축
Krex_Kim 2022. 7. 20. 01:44
지금까지의 Jetson Xavier세팅이 순조로웠다면,
ROS2 설치하는것 자체는 훨씬 간단하게 끝납니다.
https://docs.ros.org/en/galactic/Installation/Ubuntu-Install-Debians.html
정말정말 감사하게도
Jetson Device 의 arm64에서도 아무 문제없이 따라만 가면 깔리도록 설정이 되어있었습니다.
물론 이것 말고도 구성해야할 여러가지 환경 세팅이 있는데,
이번 포스팅에서는 이런 기본적인 ROS2 설치과정과
vscode 에 통합 개발환경(IDE)를 구축하는 일련의 과정,
그리고 QtCreator설치하는 과정까지 쭉 정리해보도록 하겠습니다.
◆ ROS2 기본 설치
## Locale 설정
$ locale # check for UTF-8
$ sudo apt update && sudo apt install locales
$ 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
$ locale # verify settings
## Set UP
$ apt-cache policy | grep universe
: 실행시 Output은
500 http://us.archive.ubuntu.com/ubuntu focal/universe amd64 Packages
release v=20.04,o=Ubuntu,a=focal,n=focal,l=Ubuntu,c=universe,b=amd64
이어야함.
$ sudo apt update && sudo apt install curl gnupg lsb-release
$ sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(source /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
## ROS 설치
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install ros-galactic-desktop
## Test
# Terminal 1에서 pub
$ source /opt/ros/galactic/setup.bash
$ ros2 run demo_nodes_cpp talker
# Terminal 2 에서 listen
$ source /opt/ros/galactic/setup.bash
$ ros2 run demo_nodes_py listener
두 노드간 통신이 원할하다면 정상적으로 설치가 완료된 것입니다
※아래 내용부터는 오로카 카페주소에서의 내용을 참조하여 작성하였습니다.
https://cafe.naver.com/openrt/25288
◆ ROS2 개발 툴 설치
$ sudo apt update && sudo apt install -y \
build-essential \
cmake \
git \
libbullet-dev \
python3-colcon-common-extensions \
python3-flake8 \
python3-pip \
python3-pytest-cov \
python3-rosdep \
python3-setuptools \
python3-vcstool \
wget
$ python3 -m pip install -U \
argcomplete \
flake8-blind-except \
flake8-builtins \
flake8-class-newline \
flake8-comprehensions \
flake8-deprecated \
flake8-docstrings \
flake8-import-order \
flake8-quotes \
pytest-repeat \
pytest-rerunfailures \
pytest
$ sudo apt install --no-install-recommends -y \
libasio-dev \
libtinyxml2-dev \
libcunit1-dev
◆ ROS2 빌드 테스트
$ source /opt/ros/galactic/setup.bash
$ mkdir -p ~/robot_ws/src
$ cd ~/robot_ws/
$ colcon build --symlink-install
* Workspace에 아무것도 없기 때문에
위 그림처럼 뜨면 정상.
workspace에 build, install, log폴더가 생성되는것을 확인할 수 있습니다.
◆ Run Commands설정 (Optional)
개발시 사용하면 편리한 alias를 ~/.bashrc 파일에 설정해놓으면 매우 편리합니다
$ gedit ~/.bashrc
gedit 편집기로 .bashrc파일아래에 기존내용은 그대로 두고 아래 내용을 추가해줍니다.
# ROS2 Run Commands
source /opt/ros/foxy/setup.bash
source ~/robot_ws/install/local_setup.bash
source /usr/share/colcon_argcomplete/hook/colcon-argcomplete.bash
source /usr/share/vcstool-completion/vcs.bash
source /usr/share/colcon_cd/function/colcon_cd.sh
export _colcon_cd_root=~/robot_ws
export ROS_DOMAIN_ID=7
export ROS_NAMESPACE=robot1
export RMW_IMPLEMENTATION=rmw_fastrtps_cpp
# export RMW_IMPLEMENTATION=rmw_connext_cpp
# export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
# export RMW_IMPLEMENTATION=rmw_gurumdds_cpp
# export RCUTILS_CONSOLE_OUTPUT_FORMAT='[{severity} {time}] [{name}]: {message} ({function_name}() at {file_name}:{line_number})'
export RCUTILS_CONSOLE_OUTPUT_FORMAT='[{severity}]: {message}'
export RCUTILS_COLORIZED_OUTPUT=1
export RCUTILS_LOGGING_USE_STDOUT=0
export RCUTILS_LOGGING_BUFFERED_STREAM=1
alias cw='cd ~/robot_ws'
alias cs='cd ~/robot_ws/src'
alias ccd='colcon_cd'
alias cb='cd ~/robot_ws && colcon build --symlink-install'
alias cbs='colcon build --symlink-install'
alias cbp='colcon build --symlink-install --packages-select'
alias cbu='colcon build --symlink-install --packages-up-to'
alias ct='colcon test'
alias ctp='colcon test --packages-select'
alias ctr='colcon test-result'
alias rt='ros2 topic list'
alias re='ros2 topic echo'
alias rn='ros2 node list'
alias killgazebo='killall -9 gazebo & killall -9 gzserver & killall -9 gzclient'
alias af='ament_flake8'
alias ac='ament_cpplint'
alias testpub='ros2 run demo_nodes_cpp talker'
alias testsub='ros2 run demo_nodes_cpp listener'
alias testpubimg='ros2 run image_tools cam2image'
alias testsubimg='ros2 run image_tools showimage'
◆ 통합 개발환경 IDE 설치
출처: 오로카카페 (ROS2로 시작하는 로봇 프로그래밍)
◎ Visual Studio Code (VSCode)
- 설치
Jetson Xavier AGX_ Jetpack5.0.1에서의 vs코드 설치에관한 내용은 아래 포스팅에서 다루었었습니다.
* Jetpack5.0.1에서는 최신버전을 비롯한 몇가지 VSCode 버전이 정상 작동하지 않는 듯 하니 참고 해보시길 바랍니다
https://roboharco12.tistory.com/45
- 실행
$ code
- Extensions 설치
정상적으로 VSCode가 설치되었다면,
C/C++/ROS/File Rofmat/유용한 Extension을 추가해줍니다.
Ctrl + Shift + x 를 누르면 설치가능한 Extension List들이 뜹니다
여기서
아래 해당하는 Extension을 깔아줍니다.
모든 출처는 오로카 카페에서 긁어온 것이나,
EOF Mark, Better Comments, Highlight Trailing White Spaces 같은 Extensions는 ..저는 오히려 불편해서 뺐습니다
* <참고>
추가로 저는 인공지능을 다룰일이 많아
Jupyter Notebook환경에서 자주 작업하다보니, 해당 Extension까지 추가해줬습니다. (ROS에 직접적인 연관은 X)
Extension List에서
이 녀석을 설치해 준 후,
Ctrl + Shift + P를 누른다음
" Jupyter: Specify local or remote Jupyter sercer for connections를 클릭해줍니다.
이후 터미널에서
$ code test.ipynb
로 새로운 ipynb확장자파일을 열어주면 오른쪽아래 install버튼이 생기고
이를 누르면 알아서 필요한 패키지들이 주르륵 깔립니다.
이후 test.ipynb 파일에서 오른쪽 위에 Python 3.8.10 64-bit:Idle 로 떠있는게 확인됐다면 (혹은 본인 Local 환경에 맞는 Python버전) 정상적으로 설치된 것입니다.
기존 Python 3.8.10에 깔린 패키지(PyTorch, Numpy등) 들이 정상 작동하는것을 확인할 수 있습니다.
* 저의 경우, 주피터 노트북을 설치하고난 뒤, 다른 패지는 다 괜찮은데
Scikit Learn 패키지가 정상적으로 import되지 않는 오류가 발생했습니다.
아래와같이
ImportError: /usr/local/lib/python3.8/dist-packages/sklearn/__check_build/../../scikit_learn.libs/libgomp-d22c30c5.so.1.0.0: cannot allocate memory in static TLS block
TLS Block 에러 메세지가 뜨며 import되지않았는데,
https://github.com/keras-team/autokeras/issues/1475
위 깃허브 디버그를 참조해서 문제를 해결했습니다.
.bashrc에 들어가서
libgomp-d22c30c5.so.1.0.0파일 위치만 추가해주면 됩니다.
$ gedit ~/.bashrc
export LD_PRELOAD='/usr/local/lib/python3.8/dist-packages/scikit_learn.libs/libgomp-d22c30c5.so.1.0.0'
추가 후 저장
VSCode를 껐다가 켜준뒤, import하여버전을 확인해주면
정상적으로 import되는것을 확인할 수 있습니다.
<참고>
제가 Jetpack 5.0.1에 scikit learn 패키지를 설치한 방법입니다
https://roboharco12.tistory.com/45
◎ VSCode의 개발환경 설정
이 개발환경 역시 표박사님의 설정방식을 따른것인데요,
라고 합니다.
$ sudo gedit <파일경로>
로 파일들을 생성해주면 됩니다.
하나하나 보겠습니다.
표박님이 foxy 버전인것과 다르게, galactic버전이 깔려있다는 점만 조심하면서 설치를 진행해주시면 됩니다.
- User Settings 설정 (settings.json)
표박사님의 책에 따르면,
"'settings.json'은 VSCode의 사용자별 글로벌 환경 설정을 지정하는 파일이다. 이 파일에 기술된 설정들은 모든 작업 공간(workspace)에서 적용된다. 예를 들어, 미니맵 사용, 세로 제한 줄 표시, 탭 사이즈 등 이다."
라고 합니다.
$ sudo gedit ~/.config/Code/User/settings.json
에서 아래내용을 추가해줍니다. 물론 본인이 즐겨 사용하는 설정이 있다면 함께 적어주면 된다고 합니다.
저는 주피터 노트북을 사용하다보니 ("jupyter.jupyterServerType": "local")옵션이 추가되었습니다.
{
"jupyter.jupyterServerType": "local",
"cmake.configureOnOpen": false,
"editor.minimap.enabled": false,
"editor.mouseWheelZoom": true,
"editor.renderControlCharacters": true,
"editor.rulers": [100],
"editor.tabSize": 2,
"files.associations": {
"*.repos": "yaml",
"*.world": "xml",
"*.xacro": "xml"
},
"files.insertFinalNewline": true,
"files.trimTrailingWhitespace": true,
"terminal.integrated.scrollback": 1000000,
"workbench.iconTheme": "vscode-icons",
"workbench.editor.pinnedTabSizing": "compact",
"ros.distro": "galactic",
"colcon.provideTasks": true
}
- C/C++ Properties 설정
표박사님 책에 따르면
"C/C++ 관련 설정이다. 현재 지정한 작업 공간 (여기서는 ~/robot_ws)의 운영체제는 무엇인지, include 폴더의 경로는 어떻게 되는지, C/C++ 규칙은 어떤 표준을 기준을 사용할지의 여부, 컴파일의 경로, intelliSense[24] 모드 등을 설정하게 된다."
라고 정리되어있습니다.
$ mkdir ~/robot_ws/.vscode
$ sudo gedit ~/robot_ws/.vscode/c_cpp_properties.json
에서 아래내용을 추가해줍니다.
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${default}",
"${workspaceFolder}/**",
"/opt/ros/galactic/include/**"
],
"defines": [],
"compilerPath": "/usr/bin/g++",
"cStandard": "c99",
"cppStandard": "c++14",
"intelliSenseMode": "linux-gcc-x64"
}
],
"version": 4
}
- Tasks 설정
책에나온대로,
$ sudo gedit ~/robot_ws/.vscode/tasks.json
에서 아래 내용을 추가해줍니다.
{
"version": "2.0.0",
"tasks": [
{
"label": "colcon: build",
"type": "shell",
"command": "colcon build --cmake-args '-DCMAKE_BUILD_TYPE=Debug'",
"problemMatcher": [],
"group": {
"kind": "build",
"isDefault": true
}
},
{
"label": "colcon: test",
"type": "shell",
"command": "colcon test && colcon test-result"
},
{
"label": "colcon: clean",
"type": "shell",
"command": "rm -rf build install log"
}
]
}
- Launch 설정
계속 따라해줍니다.
$ sudo gedit ~/robot_ws/.vscode/launch.json
에서 아래 내용을 추가합니다.
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug-rclpy(debugpy)",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal"
},
{
"name": "Debug-rclcpp(gbd)",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/install/${input:package}/lib/${input:package}/${input:node}",
"args": [],
"preLaunchTask": "colcon: build",
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
],
"inputs": [
{
"id": "package",
"type": "promptString",
"description": "package name",
"default": "topic_service_action_rclcpp_example"
},
{
"id": "node",
"type": "promptString",
"description": "node name",
"default": "argument"
}
]
}
이후의 자세한 내용은 위에서 언급한 https://cafe.naver.com/openrt/25288
오로카 카페에서 자세히 참조해보시기 바랍니다.
◎ QtCreator
qt creator는 여기서 간단하게만 다루도록 하겠습니다.
설치
$ sudo apt install qtcreator
Plugin 개발에 UI를 작성할때 유용합니다.
'잡다한 정리 > Jetson Xavier AGX Settings' 카테고리의 다른 글
Jetson Xavier AGX - Jetpack5.0.1세팅(5) - 나머지 라이브러리(VsCode, Scikitlearn,Terminator등) (0) | 2022.07.20 |
---|---|
Jetpack 5.0.1 Fan Mode 설정 (0) | 2022.07.20 |
Jetson Xavier AGX - Jetpack5.0.1세팅(3) - PyTorch v1.12.0 , torchvision 0.13.0 설치하기 (0) | 2022.07.20 |
Jetson Xavier AGX - Jetpack5.0.1세팅(2) - SSD 카드 부팅디스크 만들기 (Jetpack 5.0.1) (0) | 2022.07.20 |
Jetson Xavier AGX - Jetpack5.0.1세팅(1) - Jetpack 설치 (1) | 2022.07.20 |