f1tenth particle_filter 패키지를 설치하려고 했다. range_libc 패키지를 컴파일 하는 과정에서 많은 문제가 생겼다. 결국 컴파일을 했지만 다시 컴파일하더라도 패키지에 적용할 수 없었다.
작업 내용
1. particle filter를 설치하기에 앞서 map server와 range_libc를 설치한다. compile_with_cuda.sh 파일에서 봤을 때, setup.py가 python2로 작성된 것을 python3 문법으로 바꿔줬다. (print 구문, iteritems를 items로 바꿔준 것과 tab과 space를 통일시킨 것)
dawgs_nx@dawgs:~/dawgs_f1tenth/range_libc/pywrapper$ ./compile_with_cuda_p3.sh
Compiling with CUDA support
Compiling without trace enabled for Bresenham's Line
$ sudo TRACE=ON python setup.py install
--------------
running install
running build
running build_ext
cythoning RangeLibc.pyx to RangeLibc.cpp
/usr/lib/python3/dist-packages/Cython/Compiler/Main.py:369: FutureWarning: Cython directive 'language_level' not set, using 2 for now (Py2). This will change in a later release! File: /home/dawgs_nx/dawgs_f1tenth/range_libc/pywrapper/RangeLibc.pyx
tree = Parsing.p_module(s, pxd, full_module_name)
building 'range_libc' extension
creating build
creating build/temp.linux-aarch64-3.8
creating build/vendor
creating build/vendor/lodepng
creating build/includes
aarch64-linux-gnu-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I../ -I/usr/lib/python3/dist-packages/numpy/core/include -I/usr/local/cuda/include -I/usr/include/python3.8 -c RangeLibc.cpp -o build/temp.linux-aarch64-3.8/RangeLibc.o -w -std=c++11 -march=native -ffast-math -fno-math-errno -O3 -DUSE_CUDA=1 -DCHUNK_SIZE=262144 -DNUM_THREADS=256
aarch64-linux-gnu-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I../ -I/usr/lib/python3/dist-packages/numpy/core/include -I/usr/local/cuda/include -I/usr/include/python3.8 -c ../vendor/lodepng/lodepng.cpp -o build/temp.linux-aarch64-3.8/../vendor/lodepng/lodepng.o -w -std=c++11 -march=native -ffast-math -fno-math-errno -O3 -DUSE_CUDA=1 -DCHUNK_SIZE=262144 -DNUM_THREADS=256
/usr/local/cuda/bin/nvcc -I../ -I/usr/lib/python3/dist-packages/numpy/core/include -I/usr/local/cuda/include -I/usr/include/python3.8 -c ../includes/kernels.cu -o build/temp.linux-aarch64-3.8/../includes/kernels.o -arch=sm_20 --ptxas-options=-v -c --compiler-options '-fPIC' -w -std=c++11 -DUSE_CUDA=1 -DCHUNK_SIZE=262144 -DNUM_THREADS=256
nvcc fatal : Value 'sm_20' is not defined for option 'gpu-architecture'
error: command '/usr/local/cuda/bin/nvcc' failed with exit status 1
sm architecture과 cuda version이 안 맞아서 에러코드를 띄웠다. xavier nx 보드의 경우, sm_72를 쓴다고 합니다.

2. sm_20 플래그는 setup.py에 있어서 python3버전으로 수정한 setup_p3.py에 적용해둡니다.
dawgs_nx@dawgs:~/dawgs_f1tenth/range_libc$ ls /usr/local/ | grep cuda
cuda
cuda-11
cuda-11.4
dawgs_nx@dawgs:~/dawgs_f1tenth/range_libc$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Sun_Oct_23_22:16:07_PDT_2022
Cuda compilation tools, release 11.4, V11.4.315
Build cuda_11.4.r11.4/compiler.31964100_0
dawgs_nx@dawgs:~/dawgs_f1tenth/range_libc/pywrapper$ grep -r "sm_" *
Binary file build/includes/kernels.o matches
Binary file build/lib.linux-aarch64-3.8/range_libc.cpython-38-aarch64-linux-gnu.so matches
setup_p3.py:nvcc_flags = ['-arch=sm_72', '--ptxas-options=-v', '-c', '--compiler-options', "'-fPIC'", "-w","-std=c++11"]
setup.py:nvcc_flags = ['-arch=sm_20', '--ptxas-options=-v', '-c', '--compiler-options', "'-fPIC'", "-w","-std=c++11"]
그대로 컴파일 했을 때,
dawgs_nx@dawgs:~/dawgs_f1tenth/range_libc/pywrapper$ ./compile_with_cuda_p3.sh
Compiling with CUDA support
Compiling without trace enabled for Bresenham's Line
$ sudo TRACE=ON python setup.py install
--------------
running install
running build
running build_ext
cythoning RangeLibc.pyx to RangeLibc.cpp
/usr/lib/python3/dist-packages/Cython/Compiler/Main.py:369: FutureWarning: Cython directive 'language_level' not set, using 2 for now (Py2). This will change in a later release! File: /home/dawgs_nx/dawgs_f1tenth/range_libc/pywrapper/RangeLibc.pyx
tree = Parsing.p_module(s, pxd, full_module_name)
building 'range_libc' extension
aarch64-linux-gnu-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I../ -I/usr/lib/python3/dist-packages/numpy/core/include -I/usr/local/cuda/include -I/usr/include/python3.8 -c RangeLibc.cpp -o build/temp.linux-aarch64-3.8/RangeLibc.o -w -std=c++11 -march=native -ffast-math -fno-math-errno -O3 -DUSE_CUDA=1 -DCHUNK_SIZE=262144 -DNUM_THREADS=256
aarch64-linux-gnu-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I../ -I/usr/lib/python3/dist-packages/numpy/core/include -I/usr/local/cuda/include -I/usr/include/python3.8 -c ../vendor/lodepng/lodepng.cpp -o build/temp.linux-aarch64-3.8/../vendor/lodepng/lodepng.o -w -std=c++11 -march=native -ffast-math -fno-math-errno -O3 -DUSE_CUDA=1 -DCHUNK_SIZE=262144 -DNUM_THREADS=256
/usr/local/cuda/bin/nvcc -I../ -I/usr/lib/python3/dist-packages/numpy/core/include -I/usr/local/cuda/include -I/usr/include/python3.8 -c ../includes/kernels.cu -o build/temp.linux-aarch64-3.8/../includes/kernels.o -arch=sm_72 --ptxas-options=-v -c --compiler-options '-fPIC' -w -std=c++11 -DUSE_CUDA=1 -DCHUNK_SIZE=262144 -DNUM_THREADS=256
ptxas info : 24 bytes gmem
ptxas info : Compiling entry function '_Z22cuda_eval_sensor_tablePfS_PdS0_iifi' for 'sm_72'
ptxas info : Function properties for _Z22cuda_eval_sensor_tablePfS_PdS0_iifi
0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info : Used 26 registers, 400 bytes cmem[0]
ptxas info : Compiling entry function '_Z38cuda_ray_marching_angles_world_to_gridPfS_S_iifiifffffff' for 'sm_72'
ptxas info : Function properties for _Z38cuda_ray_marching_angles_world_to_gridPfS_S_iifiifffffff
32 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info : Used 24 registers, 424 bytes cmem[0], 16 bytes cmem[2]
ptxas info : Compiling entry function '_Z31cuda_ray_marching_world_to_gridPfS_S_iififffffff' for 'sm_72'
ptxas info : Function properties for _Z31cuda_ray_marching_world_to_gridPfS_S_iififffffff
32 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info : Used 24 registers, 420 bytes cmem[0], 16 bytes cmem[2]
ptxas info : Compiling entry function '_Z17cuda_ray_marchingPfS_S_iifi' for 'sm_72'
ptxas info : Function properties for _Z17cuda_ray_marchingPfS_S_iifi
32 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info : Used 26 registers, 392 bytes cmem[0], 16 bytes cmem[2]
creating build/lib.linux-aarch64-3.8
aarch64-linux-gnu-g++ -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro -g -fwrapv -O2 -Wl,-Bsymbolic-functions -Wl,-z,relro -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 build/temp.linux-aarch64-3.8/RangeLibc.o build/temp.linux-aarch64-3.8/../vendor/lodepng/lodepng.o build/temp.linux-aarch64-3.8/../includes/kernels.o -L/usr/local/cuda/lib64 -Wl,--enable-new-dtags,-R/usr/local/cuda/lib64 -lcudart -o build/lib.linux-aarch64-3.8/range_libc.cpython-38-aarch64-linux-gnu.so -std=c++11
running install_lib
copying build/lib.linux-aarch64-3.8/range_libc.cpython-38-aarch64-linux-gnu.so -> /usr/local/lib/python3.8/dist-packages
running install_egg_info
Writing /usr/local/lib/python3.8/dist-packages/range_libc-0.1.egg-info
왜 파이썬 2를 쓴다고 얘기했을까 싶지만 당장은 컴파일이 잘 됐습니다. 이제 particle_filter 패키지를 실행해봅니다.
dawgs_nx@dawgs:~/dawgs_f1tenth/particle_filter$ ros2 launch particle_filter localize_launch.py
[INFO] [launch]: All log files can be found below /home/dawgs_nx/.ros/log/2025-01-25-16-40-21-131695-dawgs-10537
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [lifecycle_manager-1]: process started with pid [10539]
[INFO] [map_server-2]: process started with pid [10541]
[INFO] [particle_filter-3]: process started with pid [10543]
[lifecycle_manager-1] [INFO] [1737790822.010935255] [lifecycle_manager_localization]: Creating
[lifecycle_manager-1] [INFO] [1737790822.185624940] [lifecycle_manager_localization]: Creating and initializing lifecycle service clients
[lifecycle_manager-1] [INFO] [1737790822.557259225] [lifecycle_manager_localization]: Starting managed nodes bringup...
[lifecycle_manager-1] [INFO] [1737790822.557451899] [lifecycle_manager_localization]: Configuring map_server
[map_server-2] [INFO] [1737790822.637503510] [map_server]:
[map_server-2] map_server lifecycle node launched.
[map_server-2] Waiting on external lifecycle transitions to activate
[map_server-2] See https://design.ros2.org/articles/node_lifecycle.html for more information.
[map_server-2] [INFO] [1737790822.638135614] [map_server]: Creating
[lifecycle_manager-1] [ERROR] [1737790822.645204795] [lifecycle_manager_localization]: Failed to change state for node: map_server
[lifecycle_manager-1] [ERROR] [1737790822.645361725] [lifecycle_manager_localization]: Failed to bring up all requested nodes. Aborting bringup.
[particle_filter-3] Traceback (most recent call last):
[particle_filter-3] File "/home/dawgs_nx/dawgs_f1tenth/particle_filter/install/particle_filter/lib/particle_filter/particle_filter", line 11, in <module>
[particle_filter-3] load_entry_point('particle-filter', 'console_scripts', 'particle_filter')()
[particle_filter-3] File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 490, in load_entry_point
[particle_filter-3] return get_distribution(dist).load_entry_point(group, name)
[particle_filter-3] File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 2854, in load_entry_point
[particle_filter-3] return ep.load()
[particle_filter-3] File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 2445, in load
[particle_filter-3] return self.resolve()
[particle_filter-3] File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 2451, in resolve
[particle_filter-3] module = __import__(self.module_name, fromlist=['__name__'], level=0)
[particle_filter-3] File "/home/dawgs_nx/dawgs_f1tenth/particle_filter/build/particle_filter/particle_filter/particle_filter.py", line 29, in <module>
[particle_filter-3] import range_libc
[particle_filter-3] File "RangeLibc.pyx", line 11, in init range_libc
[particle_filter-3] ModuleNotFoundError: No module named 'tf'
[ERROR] [particle_filter-3]: process has died [pid 10543, exit code 1, cmd '/home/dawgs_nx/dawgs_f1tenth/particle_filter/install/particle_filter/lib/particle_filter/particle_filter --ros-args -r __node:=particle_filter --params-file /home/dawgs_nx/dawgs_f1tenth/particle_filter/install/particle_filter/share/particle_filter/config/localize.yaml'].
^C[WARNING] [launch]: user interrupted with ctrl-c (SIGINT)
[map_server-2] [INFO] [1737790827.707809060] [rclcpp]: signal_handler(signal_value=2)
[lifecycle_manager-1] [INFO] [1737790827.707835205] [rclcpp]: signal_handler(signal_value=2)
[map_server-2] [INFO] [1737790827.715083652] [map_server]: Destroying
[lifecycle_manager-1] [INFO] [1737790827.725391083] [lifecycle_manager_localization]: Destroying
[INFO] [lifecycle_manager-1]: process has finished cleanly [pid 10539]
[INFO] [map_server-2]: process has finished cleanly [pid 10541]
range_libc를 불러오는 과정에서 tf가 문제가 됐다. 여기서 tf가 tensorflow인지 생각해서 어리버리했다. 파이썬에서 따로 불러도 안 됐다. import tf.transformations였기 때문에 ros1에서 ros2로 옮기는 과정에서 문제가 생긴 것이었다.
dawgs_nx@dawgs:~/dawgs_f1tenth/particle_filter$ python3
Python 3.8.10 (default, Jan 17 2025, 14:40:23)
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import range_libc
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "RangeLibc.pyx", line 12, in init range_libc
ModuleNotFoundError: No module named 'tf'
jetson에서 tensorflow를 설치할 때는 여러 의존 패키지들의 버전이 꽤나 정해져 있다. 참고자료에 tensorflow를 설치하는 방법을 붙여뒀다. 말고도 Module ‘importlib’ has no attribute ‘metadata’, ERROR: Failed building wheel for h5py, Tensorboard : module 'importlib_metadata' has no attribute 'entry_points', error: failed building wheel for grpcio, ERROR: launchpadlib 1.10.13 requires testresources, which is not installed. 같은 여러 문제들이 있었지만 nvidia에서 설명하는 대로 설치하면 tensorflow, tensorboard 모두 설치할 수 있었다.
이번 작업에는 tf_transformations으로 바꿔서 import해야 했다. RangeLibc.pyx를 수정해서 다시 컴파일했는 데도 계속 같은 에러(Nomodule named 'tf')를 내고 있었다. 마지막으로 build파일과 dist파일을 모두 제거한 상태에서 다시 컴파일 했지만 크게 달라지지 않았다. (아래는 컴파일할 때 로깅)
dawgs_nx@dawgs:~/dawgs_f1tenth/range_libc/pywrapper$ ./compile_with_cuda_p3.sh
[sudo] password for dawgs_nx:
Compiling with CUDA support
Compiling without trace enabled for Bresenham's Line
$ sudo TRACE=ON python3 setup_p3.py install
--------------
running install
/usr/local/lib/python3.8/dist-packages/setuptools/command/install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.
warnings.warn(
/usr/local/lib/python3.8/dist-packages/setuptools/command/easy_install.py:144: EasyInstallDeprecationWarning: easy_install command is deprecated. Use build and pip and other standards-based tools.
warnings.warn(
running bdist_egg
running egg_info
writing range_libc.egg-info/PKG-INFO
writing dependency_links to range_libc.egg-info/dependency_links.txt
writing top-level names to range_libc.egg-info/top_level.txt
reading manifest file 'range_libc.egg-info/SOURCES.txt'
writing manifest file 'range_libc.egg-info/SOURCES.txt'
installing library code to build/bdist.linux-aarch64/egg
running install_lib
running build_ext
building 'range_libc' extension
/usr/local/cuda/bin/nvcc -I../ -I/usr/local/lib/python3.8/dist-packages/numpy/core/include -I/usr/local/cuda/include -I/usr/include/python3.8 -c ../includes/kernels.cu -o build/temp.linux-aarch64-cpython-38/../includes/kernels.o -arch=sm_72 --ptxas-options=-v -c --compiler-options '-fPIC' -w -std=c++11 -DUSE_CUDA=1 -DCHUNK_SIZE=262144 -DNUM_THREADS=256
ptxas info : 24 bytes gmem
ptxas info : Compiling entry function '_Z22cuda_eval_sensor_tablePfS_PdS0_iifi' for 'sm_72'
ptxas info : Function properties for _Z22cuda_eval_sensor_tablePfS_PdS0_iifi
0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info : Used 26 registers, 400 bytes cmem[0]
ptxas info : Compiling entry function '_Z38cuda_ray_marching_angles_world_to_gridPfS_S_iifiifffffff' for 'sm_72'
ptxas info : Function properties for _Z38cuda_ray_marching_angles_world_to_gridPfS_S_iifiifffffff
32 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info : Used 24 registers, 424 bytes cmem[0], 16 bytes cmem[2]
ptxas info : Compiling entry function '_Z31cuda_ray_marching_world_to_gridPfS_S_iififffffff' for 'sm_72'
ptxas info : Function properties for _Z31cuda_ray_marching_world_to_gridPfS_S_iififffffff
32 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info : Used 24 registers, 420 bytes cmem[0], 16 bytes cmem[2]
ptxas info : Compiling entry function '_Z17cuda_ray_marchingPfS_S_iifi' for 'sm_72'
ptxas info : Function properties for _Z17cuda_ray_marchingPfS_S_iifi
32 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info : Used 26 registers, 392 bytes cmem[0], 16 bytes cmem[2]
aarch64-linux-gnu-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -fPIC -I../ -I/usr/local/lib/python3.8/dist-packages/numpy/core/include -I/usr/local/cuda/include -I/usr/include/python3.8 -c ../vendor/lodepng/lodepng.cpp -o build/temp.linux-aarch64-cpython-38/../vendor/lodepng/lodepng.o -w -std=c++11 -march=native -ffast-math -fno-math-errno -O3 -DUSE_CUDA=1 -DCHUNK_SIZE=262144 -DNUM_THREADS=256
aarch64-linux-gnu-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -fPIC -I../ -I/usr/local/lib/python3.8/dist-packages/numpy/core/include -I/usr/local/cuda/include -I/usr/include/python3.8 -c RangeLibc.cpp -o build/temp.linux-aarch64-cpython-38/RangeLibc.o -w -std=c++11 -march=native -ffast-math -fno-math-errno -O3 -DUSE_CUDA=1 -DCHUNK_SIZE=262144 -DNUM_THREADS=256
aarch64-linux-gnu-g++ -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro -g -fwrapv -O2 build/temp.linux-aarch64-cpython-38/../includes/kernels.o build/temp.linux-aarch64-cpython-38/../vendor/lodepng/lodepng.o build/temp.linux-aarch64-cpython-38/RangeLibc.o -L/usr/local/cuda/lib64 -L/usr/lib -Wl,--enable-new-dtags,-R/usr/local/cuda/lib64 -lcudart -o build/lib.linux-aarch64-cpython-38/range_libc.cpython-38-aarch64-linux-gnu.so -std=c++11
creating build/bdist.linux-aarch64/egg
copying build/lib.linux-aarch64-cpython-38/range_libc.cpython-38-aarch64-linux-gnu.so -> build/bdist.linux-aarch64/egg
creating stub loader for range_libc.cpython-38-aarch64-linux-gnu.so
byte-compiling build/bdist.linux-aarch64/egg/range_libc.py to range_libc.cpython-38.pyc
creating build/bdist.linux-aarch64/egg/EGG-INFO
copying range_libc.egg-info/PKG-INFO -> build/bdist.linux-aarch64/egg/EGG-INFO
copying range_libc.egg-info/SOURCES.txt -> build/bdist.linux-aarch64/egg/EGG-INFO
copying range_libc.egg-info/dependency_links.txt -> build/bdist.linux-aarch64/egg/EGG-INFO
copying range_libc.egg-info/top_level.txt -> build/bdist.linux-aarch64/egg/EGG-INFO
writing build/bdist.linux-aarch64/egg/EGG-INFO/native_libs.txt
zip_safe flag not set; analyzing archive contents...
__pycache__.range_libc.cpython-38: module references __file__
creating 'dist/range_libc-0.1-py3.8-linux-aarch64.egg' and adding 'build/bdist.linux-aarch64/egg' to it
removing 'build/bdist.linux-aarch64/egg' (and everything under it)
Processing range_libc-0.1-py3.8-linux-aarch64.egg
creating /usr/lib/python3.8/site-packages/range_libc-0.1-py3.8-linux-aarch64.egg
Extracting range_libc-0.1-py3.8-linux-aarch64.egg to /usr/lib/python3.8/site-packages
Adding range-libc 0.1 to easy-install.pth file
Installed /usr/lib/python3.8/site-packages/range_libc-0.1-py3.8-linux-aarch64.egg
Processing dependencies for range-libc==0.1
Finished processing dependencies for range-libc==0.1
잘했던 부분
1. cython까지 문제를 잘 파악해뒀다.
아쉬웠던 부분
1. python에서 패키지를 불러오는 방법을 잘 모른다.
2.
참고자료
1. f1tenth particle_filter: f1tenth/particle_filter: A fast particle filter localization algorithm for the MIT Racecar. Uses RangeLibc for accelerated ray casting.
3. python에서 tab과 space: python - "inconsistent use of tabs and spaces in indentation" - Stack Overflow
4. sm architecture과 cuda: https://arnon.dk/matching-sm-architectures-arch-and-gencode-for-various-nvidia-cards/
5. import tensorflow as tf: python - ModuleNotFoundError: No module named 'tf' - Stack Overflow
6. ros2 tf_transformations: ROS Package: tf_transformations
7. install tensorflow in jetson: Installing TensorFlow for Jetson Platform - NVIDIA Docs
8. jetson_zoo: Jetson Zoo - eLinux.org
9. iteritems to items: python - When should iteritems() be used instead of items()? - Stack Overflow
10. python import 순서: Python | 모듈과 패키지 찾는 방법
'작업 일지 > F1Tenth' 카테고리의 다른 글
| [작업 일지] f1tenth lab5.SLAM and pure pursuit (0) | 2025.02.06 |
|---|---|
| [작업 일지] f1tenth lab5.SLAM and pure pursuit (0) | 2025.02.06 |
| [작업 일지] f1tenth lab5.SLAM and pure pursuit (0) | 2025.01.26 |
| [작업 일지] f1tenth lab4.follow the gap (0) | 2025.01.08 |
| [작업 일지] f1tenth labX.frenet_coordinate (0) | 2024.12.22 |