1. 기본 개발 패키지 설치
libuvc-dev, GeographicLib, glog 등의 일부 패키지는 Ubuntu universe 저장소를 사용합니다.
sudo add-apt-repository universe
sudo apt update
sudo apt full-upgrade -y



빌드 도구를 설치합니다.
sudo apt install -y \
build-essential \
ninja-build \
pkg-config \
python3-pip \
python3-setuptools \
python3-dev \
python3-numpy \
python3-opencv \
python3-colcon-common-extensions \
python3-rosdep \
python3-vcstool

ROS 2 Desktop이 설치되지 않았다면 설치합니다.
sudo apt install -y ros-humble-desktop
2. 저장소에서 빠진 시스템 라이브러리 설치
Astra 카메라 CMake는 Eigen3, glog, libuvc, magic_enum, OpenCV 및 OpenNI2를 직접 찾습니다. 그러나 해당 항목 중 일부는 astra_camera/package.xml에 선언되지 않았습니다. 따라서 rosdep이 자동 설치하지 못할 수 있습니다.
다음 패키지를 직접 설치하십시오.
sudo apt install -y \
libboost-all-dev \
libeigen3-dev \
libgeographic-dev \
geographiclib-tools \
libgflags-dev \
libgoogle-glog-dev \
libusb-1.0-0-dev \
libudev-dev \
libuvc-dev \
libopencv-dev \
libopenni2-dev

Ubuntu 22.04에는 libuvc-dev, libgeographic-dev, libgoogle-glog-dev, libgflags-dev 패키지가 제공됩니다.
설치 상태를 확인합니다.
dpkg -l | grep -E \
'libeigen3-dev|libgeographic-dev|libgoogle-glog-dev|libuvc-dev|libopenni2-dev'

3. 누락된 ROS 2 패키지 설치
다음 패키지는 LIMO 베이스, Astra 카메라, robot_localization, Nav2, Cartographer에서 사용합니다.
sudo apt install -y \
ros-humble-ament-cmake \
ros-humble-ament-index-cpp \
ros-humble-rosidl-default-generators \
ros-humble-rosidl-default-runtime \
ros-humble-rclcpp \
ros-humble-rclcpp-components \
ros-humble-rcutils \
ros-humble-class-loader \
ros-humble-builtin-interfaces \
ros-humble-geometry-msgs \
ros-humble-nav-msgs \
ros-humble-sensor-msgs \
ros-humble-std-msgs \
ros-humble-std-srvs \
ros-humble-visualization-msgs \
ros-humble-tf2 \
ros-humble-tf2-ros \
ros-humble-tf2-eigen \
ros-humble-tf2-geometry-msgs \
ros-humble-tf2-sensor-msgs \
ros-humble-cv-bridge \
ros-humble-camera-info-manager \
ros-humble-image-geometry \
ros-humble-image-publisher \
ros-humble-image-transport \
ros-humble-magic-enum \
ros-humble-angles \
ros-humble-diagnostic-msgs \
ros-humble-diagnostic-updater \
ros-humble-geographic-msgs \
ros-humble-message-filters \
ros-humble-yaml-cpp-vendor \
ros-humble-xacro \
ros-humble-joint-state-publisher \
ros-humble-joint-state-publisher-gui \
ros-humble-rviz2


Astra CMake는 camera_info_manager, tf2_eigen, magic_enum, libuvc, glog 등을 직접 요구합니다.
Nav2 설치
wego_2d_nav/package.xml에는 거의 ros2launch만 선언되어 있지만, 실제 Launch 파일에서는 다음 Nav2 컴포넌트를 실행합니다.
nav2_map_servernav2_amclnav2_controllernav2_smoothernav2_plannernav2_behaviorsnav2_bt_navigatornav2_waypoint_followernav2_velocity_smoothernav2_lifecycle_manager
따라서 Nav2 전체를 설치하는 편이 안전합니다.
sudo apt install -y \
ros-humble-navigation2 \
ros-humble-nav2-bringup

Cartographer 설치
wego/launch/cartographer_launch.py는 cartographer_ros의 cartographer_node와 cartographer_occupancy_grid_node를 직접 실행합니다.
sudo apt install -y \
ros-humble-cartographer \
ros-humble-cartographer-ros

Cartographer ROS 패키지는 Humble용으로 릴리스되어 있습니다.
4. YDLidar SDK 별도 설치
이 부분이 가장 흔한 컴파일 실패 원인입니다.
ydlidar_ros2_driver/CMakeLists.txt에는 다음 명령이 있습니다.
find_package(ydlidar_sdk REQUIRED)
하지만 YDLidar SDK는 ROS 패키지가 아니며 저장소에도 포함되어 있지 않습니다. YDLidar 공식 문서와 LIMO 저장소 README 모두 ROS 드라이버를 컴파일하기 전에 SDK를 별도로 설치하도록 안내합니다.
SDK 설치
mkdir -p ~/third_party
cd ~/third_party
git clone --depth 1 https://github.com/YDLIDAR/YDLidar-SDK.git
cd YDLidar-SDK
cmake -S . -B build \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=ON
cmake --build build -j"$(nproc)"
sudo cmake --install build
sudo ldconfig





공식 설치 절차도 CMake 구성 후 make와 sudo make install을 실행하는 구조입니다.
설치 결과를 확인합니다.
find /usr/local -iname '*ydlidar*Config.cmake' -o \
-iname '*ydlidar*config.cmake'
ldconfig -p | grep -i ydlidar


다음과 유사한 파일이 검색되어야 합니다.
/usr/local/lib/cmake/ydlidar_sdk/ydlidar_sdkConfig.cmake
CMake가 계속 SDK를 찾지 못하면 다음 환경 변수를 설정합니다.
export CMAKE_PREFIX_PATH="/usr/local:${CMAKE_PREFIX_PATH}"
export LD_LIBRARY_PATH="/usr/local/lib:${LD_LIBRARY_PATH}"
sudo ldconfig
자동 적용이 필요하면 다음을 추가합니다.
grep -qxF 'export CMAKE_PREFIX_PATH="/usr/local:${CMAKE_PREFIX_PATH}"' ~/.bashrc || \
echo 'export CMAKE_PREFIX_PATH="/usr/local:${CMAKE_PREFIX_PATH}"' >> ~/.bashrc
grep -qxF 'export LD_LIBRARY_PATH="/usr/local/lib:${LD_LIBRARY_PATH}"' ~/.bashrc || \
echo 'export LD_LIBRARY_PATH="/usr/local/lib:${LD_LIBRARY_PATH}"' >> ~/.bashrc
5. Astra 카메라 의존성 확인
Astra 카메라 CMake는 다음 패키지를 직접 검색합니다.
camera_info_manager
Eigen3
glog
image_geometry
image_publisher
image_transport
libuvc
magic_enum
OpenCV
tf2_eigen
tf2_sensor_msgs
OpenNI2
다음 명령으로 주요 CMake 설정 파일을 확인합니다.
find /usr /usr/local \
\( -iname 'glogConfig.cmake' \
-o -iname 'libuvcConfig.cmake' \
-o -iname 'magic_enumConfig.cmake' \
-o -iname 'OpenCVConfig.cmake' \) \
2>/dev/null

libuvc를 찾지 못하는 경우
Ubuntu 패키지 설치를 먼저 사용합니다.
sudo apt install --reinstall -y libuvc-dev
sudo ldconfig
그래도 아래 오류가 발생한다면 소스 설치를 사용합니다.
Could not find a package configuration file provided by "libuvc"
Target "LibUVC::UVCShared" not found
mkdir -p ~/third_party
cd ~/third_party
git clone --depth 1 https://github.com/libuvc/libuvc.git
cmake -S libuvc -B libuvc/build \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=ON
cmake --build libuvc/build -j"$(nproc)"
sudo cmake --install libuvc/build
sudo ldconfig

Orbbec의 Astra 설치 문서도 glog, Eigen, USB 라이브러리 설치와 libuvc 소스 빌드를 별도로 안내합니다.
OpenNI2 링커 오류가 발생하는 경우
/usr/bin/ld: cannot find -lOpenNI2
먼저 다음을 실행합니다.
sudo apt install --reinstall -y libopenni2-dev
sudo ldconfig
저장소 자체에도 x64, arm, arm64용 OpenNI2 라이브러리가 포함되어 있으며 CMake가 uname -m 결과에 따라 플랫폼을 선택합니다.
설치된 라이브러리를 확인합니다.
ldconfig -p | grep OpenNI2
find /usr /usr/local -name 'libOpenNI2.so*' 2>/dev/null
6. 워크스페이스 구성
기존 빌드 파일이 있다면 깨끗한 새 워크스페이스를 사용하는 것이 좋습니다.
mkdir -p ~/limo_ws/src
cd ~/limo_ws/src
git clone https://github.com/WeGo-Robotics/limo_pro.git


구조는 다음과 같아야 합니다.
~/limo_ws/
└── src/
└── limo_pro/
├── limo_ros2/
├── limo_ros2_application/
├── robot_localization/
├── ros2_astra_camera/
├── wego/
├── wego_2d_nav/
├── wego_msgs/
└── ydlidar_ros2_driver/
저장소에는 차체, 메시지, 카메라, 라이다, 위치추정, 내비게이션 패키지가 함께 들어 있습니다.
7. rosdep 초기화와 의존성 설치
rosdep은 package.xml에 선언된 의존성을 운영체제 패키지로 변환해 설치합니다. 따라서 먼저 실행해야 하지만, 이 저장소처럼 선언이 빠진 경우에는 앞에서 설명한 수동 설치도 필요합니다.
최초 한 번만 실행합니다.
sudo rosdep init
rosdep update

다음 메시지는 이미 초기화된 것이므로 오류가 아닙니다.
ERROR: default sources list file already exists
그 경우에는 다음만 실행합니다.
rosdep update
워크스페이스 의존성을 설치합니다.
cd ~/limo_ws
source /opt/ros/humble/setup.bash
rosdep install \
--from-paths src \
--ignore-src \
--rosdistro humble \
-y \
-r

-r 옵션은 일부 키를 해결하지 못해도 나머지 의존성 설치를 계속 진행하도록 합니다. 다만 마지막 출력에서 실제로 해결되지 않은 키가 무엇인지 확인해야 합니다.
8. 패키지 인식 확인
cd ~/limo_ws
source /opt/ros/humble/setup.bash
colcon list

다음 패키지들이 보여야 합니다.
astra_camera
astra_camera_msgs
limo_base
limo_description
limo_msgs
limo_ros2_application
robot_localization
wego
wego_2d_nav
wego_msgs
ydlidar_ros2_driver
패키지가 보이지 않으면 저장소를 ~/limo_ws/src가 아닌 다른 위치에 복제했거나, 중간 디렉터리에 COLCON_IGNORE 파일이 있는지 확인합니다.
find ~/limo_ws/src -name COLCON_IGNORE -print
find ~/limo_ws/src -name package.xml -print
9. 첫 번째 클린 빌드
기존 빌드 캐시를 제거합니다.
cd ~/limo_ws
rm -rf build install log
처음에는 병렬 빌드보다 순차 빌드가 좋습니다. 최초 오류가 명확하게 표시되고 Jetson에서 메모리 부족도 줄어듭니다.
또한 정상 실행용 빌드에서는 테스트 의존성을 끄십시오. 저장소의 robot_localization은 테스트가 활성화되면 ament_cmake_cppcheck, ament_cmake_cpplint, ament_cmake_uncrustify 등 추가 패키지를 요구합니다.
source /opt/ros/humble/setup.bash
colcon build \
--symlink-install \
--executor sequential \
--event-handlers console_direct+ \
--cmake-args \
-DBUILD_TESTING=OFF \
-DCMAKE_BUILD_TYPE=Release
성공하면 다음을 실행합니다.
source ~/limo_ws/install/setup.bash
ros2 pkg list | grep -E \
'astra_camera|limo_base|limo_msgs|robot_localization|wego|ydlidar'
자동 적용합니다.
grep -qxF 'source ~/limo_ws/install/setup.bash' ~/.bashrc || \
echo 'source ~/limo_ws/install/setup.bash' >> ~/.bashrc
10. 오류 발생
find_package(libuvc REQUIRED)는 성공했지만, 현재 설치된 Ubuntu 22.04용 libuvc-dev 0.0.6은 CMake 타깃을 uvc라는 이름으로 내보냅니다. 반면 limo_pro의 astra_camera/CMakeLists.txt는 더 최신 libuvc에서 사용하는 LibUVC::UVCShared 타깃을 요구합니다. 저장소에서는 이 타깃을 두 곳에서 직접 링크하고 있습니다.
가장 안전한 해결 방법은 CMakeLists.txt가 구형·신형 libuvc 타깃을 모두 지원하도록 수정하는 것입니다.
1) 현재 설치 상태 확인
dpkg -l | grep libuvc
dpkg-query -W -f='${Version}\n' libuvc-dev

Ubuntu 22.04 기본 패키지라면 보통 다음 버전입니다.
0.0.6-1.1
설치된 CMake 설정 파일도 확인합니다.
find /usr /usr/local \
\( -name 'libuvcConfig.cmake' -o -name 'libuvcTargets.cmake' \) \
2>/dev/null

실제 타깃 이름을 확인합니다.
grep -R "add_library" \
/usr/lib/*/cmake/libuvc \
/usr/lib/cmake/libuvc \
/usr/local/lib/cmake/libuvc \
2>/dev/null

Ubuntu 22.04 기본 libuvc에서는 다음과 비슷하게 나올 가능성이 큽니다.
add_library(uvc SHARED IMPORTED)
2) Astra Camera 디렉터리로 이동
워크스페이스가 ~/limo_ws라는 기준입니다.
cd ~/limo_ws/src/limo_pro/ros2_astra_camera/astra_camera
원본을 백업합니다.
cp CMakeLists.txt CMakeLists.txt.backup

3) 자동 호환 패치 적용
다음 명령을 그대로 실행하십시오.
python3 - <<'PY'
from pathlib import Path
path = Path("CMakeLists.txt")
text = path.read_text()
find_line = "find_package(libuvc REQUIRED)\n"
compatibility_block = """
# Support both Ubuntu 22.04 libuvc 0.0.6 and newer libuvc releases.
if(TARGET LibUVC::UVCShared)
set(LIBUVC_TARGET LibUVC::UVCShared)
elseif(TARGET LibUVC::UVC)
set(LIBUVC_TARGET LibUVC::UVC)
elseif(TARGET uvc)
set(LIBUVC_TARGET uvc)
else()
message(FATAL_ERROR
"libuvc was found, but no supported CMake target exists. "
"Expected LibUVC::UVCShared, LibUVC::UVC, or uvc.")
endif()
"""
if compatibility_block.strip() not in text:
if find_line not in text:
raise RuntimeError("find_package(libuvc REQUIRED) line was not found.")
text = text.replace(
find_line,
find_line + compatibility_block,
1
)
text = text.replace(
" LibUVC::UVCShared\n",
" ${LIBUVC_TARGET}\n"
)
path.write_text(text)
print("CMakeLists.txt libuvc compatibility patch applied.")
PY

4) 패치 결과 확인
grep -n -A17 -B2 "find_package(libuvc" CMakeLists.txt
grep -n "LIBUVC_TARGET" CMakeLists.txt


다음 형태가 나와야 합니다.
find_package(libuvc REQUIRED)
if(TARGET LibUVC::UVCShared)
set(LIBUVC_TARGET LibUVC::UVCShared)
elseif(TARGET LibUVC::UVC)
set(LIBUVC_TARGET LibUVC::UVC)
elseif(TARGET uvc)
set(LIBUVC_TARGET uvc)
else()
message(FATAL_ERROR
"libuvc was found, but no supported CMake target exists. "
"Expected LibUVC::UVCShared, LibUVC::UVC, or uvc.")
endif()
기존 두 곳의 다음 코드:
LibUVC::UVCShared
가 다음으로 변경되어야 합니다.
${LIBUVC_TARGET}
5) Astra Camera 빌드 캐시 제거
CMake 캐시에는 기존 LibUVC::UVCShared 설정이 남아 있으므로 반드시 삭제해야 합니다.
cd ~/limo_ws
rm -rf build/astra_camera
rm -rf install/astra_camera

전체 워크스페이스를 깨끗하게 다시 빌드해도 됩니다.
rm -rf build install log
다만 다른 8개 패키지가 이미 빌드됐으므로 우선 astra_camera만 다시 빌드하는 편이 빠릅니다.
6) Astra Camera만 다시 빌드
cd ~/limo_ws
source /opt/ros/humble/setup.bash
source install/setup.bash 2>/dev/null || true
colcon build \
--symlink-install \
--packages-select astra_camera \
--cmake-clean-cache \
--event-handlers console_direct+ \
--cmake-args \
-DBUILD_TESTING=OFF
정상이라면 다음 단계까지 진행됩니다.
Finished <<< astra_camera
수정하고 재 컴파일해도 다시 에러가 발생할 수 있습니다.

현재 libuvc 설정을 확인합니다.
cat /usr/lib/x86_64-linux-gnu/cmake/libuvc/libuvcConfig.cmake 2>/dev/null
cat /usr/lib/cmake/libuvc/libuvcConfig.cmake 2>/dev/null

보통 다음 내용이 나옵니다.
set(libuvc_INCLUDE_DIRS "/usr/include")
set(libuvc_LIBRARIES "/usr/lib/x86_64-linux-gnu/libuvc.so")
실제 변수값은 다음으로도 확인할 수 있습니다.
grep -R "libuvc_LIBRARIES\|libuvc_INCLUDE_DIRS" \
/usr/lib/x86_64-linux-gnu/cmake/libuvc \
/usr/lib/cmake/libuvc \
/usr/local/lib/cmake/libuvc \
2>/dev/null

CMakeLists.txt를 다시 패치합니다.
아래 명령을 그대로 실행하십시오.
cd /home/sjyong/limo_ws/src/limo_pro/ros2_astra_camera/astra_camera
cp CMakeLists.txt CMakeLists.txt.before_libuvc_fix

이제 Python 스크립트로 기존의 잘못된 호환 코드를 제거하고 올바른 코드를 넣습니다.
python3 - <<'PY'
from pathlib import Path
import re
path = Path("CMakeLists.txt")
text = path.read_text()
# 이전에 추가했던 libuvc 호환 블록 제거
patterns = [
r'''
# Support both Ubuntu 22\.04 libuvc 0\.0\.6 and newer libuvc releases\.
if\(TARGET LibUVC::UVCShared\).*?
endif\(\)
''',
r'''
# libuvc target compatibility
if\(TARGET LibUVC::UVCShared\).*?
endif\(\)
'''
]
for pattern in patterns:
text = re.sub(pattern, "\n", text, flags=re.DOTALL | re.VERBOSE)
# 현재 find_package 줄 뒤에 새 호환 블록 추가
marker = "find_package(libuvc REQUIRED)\n"
compat_block = r'''
# libuvc compatibility:
# Ubuntu 22.04 libuvc 0.0.6 exports variables but no imported CMake target.
set(ASTRA_LIBUVC_LIBRARIES "")
set(ASTRA_LIBUVC_INCLUDE_DIRS "")
if(TARGET LibUVC::UVCShared)
set(ASTRA_LIBUVC_LIBRARIES LibUVC::UVCShared)
elseif(TARGET LibUVC::UVC)
set(ASTRA_LIBUVC_LIBRARIES LibUVC::UVC)
elseif(TARGET uvc)
set(ASTRA_LIBUVC_LIBRARIES uvc)
elseif(DEFINED libuvc_LIBRARIES AND libuvc_LIBRARIES)
set(ASTRA_LIBUVC_LIBRARIES ${libuvc_LIBRARIES})
set(ASTRA_LIBUVC_INCLUDE_DIRS ${libuvc_INCLUDE_DIRS})
else()
find_package(PkgConfig REQUIRED)
pkg_check_modules(LIBUVC REQUIRED libuvc)
set(ASTRA_LIBUVC_LIBRARIES ${LIBUVC_LINK_LIBRARIES})
if(NOT ASTRA_LIBUVC_LIBRARIES)
set(ASTRA_LIBUVC_LIBRARIES ${LIBUVC_LIBRARIES})
endif()
set(ASTRA_LIBUVC_INCLUDE_DIRS ${LIBUVC_INCLUDE_DIRS})
endif()
message(STATUS "Astra libuvc libraries: ${ASTRA_LIBUVC_LIBRARIES}")
message(STATUS "Astra libuvc include dirs: ${ASTRA_LIBUVC_INCLUDE_DIRS}")
'''
if marker not in text:
raise RuntimeError("find_package(libuvc REQUIRED) was not found")
if "set(ASTRA_LIBUVC_LIBRARIES" not in text:
text = text.replace(marker, marker + compat_block, 1)
# 이전 패치에서 ${LIBUVC_TARGET}로 변경되었을 수도 있으므로 모두 교체
text = text.replace("LibUVC::UVCShared", "${ASTRA_LIBUVC_LIBRARIES}")
text = text.replace("${LIBUVC_TARGET}", "${ASTRA_LIBUVC_LIBRARIES}")
# 위 replace가 조건문의 target 이름까지 건드릴 수 있으므로 복구
text = text.replace(
"if(TARGET ${ASTRA_LIBUVC_LIBRARIES})",
"if(TARGET LibUVC::UVCShared)"
)
text = text.replace(
"set(ASTRA_LIBUVC_LIBRARIES ${ASTRA_LIBUVC_LIBRARIES})",
"set(ASTRA_LIBUVC_LIBRARIES LibUVC::UVCShared)",
1
)
# target include directories에 libuvc include 추가
include_marker = " ${OpenCV_INCLUDED_DIRS}\n"
if " ${ASTRA_LIBUVC_INCLUDE_DIRS}\n" not in text:
text = text.replace(
include_marker,
include_marker + " ${ASTRA_LIBUVC_INCLUDE_DIRS}\n"
)
path.write_text(text)
print("Updated:", path)
PY


다음 명령을 실행하여 패치 내용을 확인합니다.
grep -n -A45 -B3 "find_package(libuvc" CMakeLists.txt

중요한 부분은 다음과 같아야 합니다.
find_package(libuvc REQUIRED)
set(ASTRA_LIBUVC_LIBRARIES "")
set(ASTRA_LIBUVC_INCLUDE_DIRS "")
if(TARGET LibUVC::UVCShared)
set(ASTRA_LIBUVC_LIBRARIES LibUVC::UVCShared)
elseif(TARGET LibUVC::UVC)
set(ASTRA_LIBUVC_LIBRARIES LibUVC::UVC)
elseif(TARGET uvc)
set(ASTRA_LIBUVC_LIBRARIES uvc)
elseif(DEFINED libuvc_LIBRARIES AND libuvc_LIBRARIES)
set(ASTRA_LIBUVC_LIBRARIES ${libuvc_LIBRARIES})
set(ASTRA_LIBUVC_INCLUDE_DIRS ${libuvc_INCLUDE_DIRS})
else()
find_package(PkgConfig REQUIRED)
pkg_check_modules(LIBUVC REQUIRED libuvc)
...
endif()

링크 부분도 확인합니다.
grep -n -A12 "target_link_libraries" CMakeLists.txt

두 개의 target_link_libraries()에서 다음 항목이 보여야 합니다.
${ASTRA_LIBUVC_LIBRARIES}
다음 항목이 남아 있으면 안 됩니다.
LibUVC::UVCShared
${LIBUVC_TARGET}
검사합니다.
grep -n "LibUVC::UVCShared\|LIBUVC_TARGET" CMakeLists.txt

조건문의 다음 한 줄만 나오는 것은 정상입니다.
if(TARGET LibUVC::UVCShared)
링크 부분에서 나온다면 직접 교체하십시오.
sed -i \
's/^[[:space:]]*LibUVC::UVCShared[[:space:]]*$/ ${ASTRA_LIBUVC_LIBRARIES}/' \
CMakeLists.txt
libuvc 라이브러리 파일을 확인합니다.
ls -l /usr/lib/x86_64-linux-gnu/libuvc.so*

정상적인 예:
/usr/lib/x86_64-linux-gnu/libuvc.so
/usr/lib/x86_64-linux-gnu/libuvc.so.0
없다면 다시 설치합니다.
sudo apt update
sudo apt install --reinstall -y \
libuvc-dev \
libuvc0 \
libusb-1.0-0-dev \
libjpeg-dev \
pkg-config
sudo ldconfig
확인:
ldconfig -p | grep libuvc
pkg-config --modversion libuvc
pkg-config --cflags --libs libuvc

정상 출력 예:
0.0.6
-I/usr/include
-luvc
기존 실패 정보가 캐시에 남아 있으므로 해당 패키지 캐시를 완전히 삭제해야 합니다.
cd /home/sjyong/limo_ws
rm -rf build/astra_camera
rm -rf install/astra_camera

필요하면 colcon 로그도 삭제합니다.
rm -rf log
astra_camera를 다시 빌드합니다.
cd /home/sjyong/limo_ws
source /opt/ros/humble/setup.bash
source install/setup.bash 2>/dev/null || true
colcon build \
--symlink-install \
--packages-select astra_camera \
--executor sequential \
--event-handlers console_direct+ \
--cmake-args \
-DBUILD_TESTING=OFF
CMake 출력에 다음과 비슷한 메시지가 표시되어야 합니다.
-- Astra libuvc libraries: /usr/lib/x86_64-linux-gnu/libuvc.so
-- Astra libuvc include dirs: /usr/include
그리고 최종적으로 다음 결과가 나와야 합니다.
Finished <<< astra_camera
다시 컴파일 했는데 다시 에러가 발생할 수 있습니다.
잘못 수정된 CMakeLists.txt 백업
cd /home/sjyong/limo_ws/src/limo_pro
cp ros2_astra_camera/astra_camera/CMakeLists.txt \
ros2_astra_camera/astra_camera/CMakeLists.txt.failed_backup

CMakeLists.txt를 Git 원본으로 복구
git restore ros2_astra_camera/astra_camera/CMakeLists.txt

구형 Git에서 git restore가 안 되면 다음을 사용합니다.
git checkout -- ros2_astra_camera/astra_camera/CMakeLists.txt
복구 확인:
grep -n "FATAL_ERROR\|ASTRA_LIBUVC\|LIBUVC_TARGET" \
ros2_astra_camera/astra_camera/CMakeLists.txt

아무것도 출력되지 않아야 정상입니다.
필요한 부분만 다시 수정
다음 명령을 그대로 실행하십시오.
cd /home/sjyong/limo_ws/src/limo_pro/ros2_astra_camera/astra_camera
python3 - <<'PY'
from pathlib import Path
path = Path("CMakeLists.txt")
text = path.read_text()
old_link = " LibUVC::UVCShared\n"
new_link = " ${libuvc_LIBRARIES}\n"
link_count = text.count(old_link)
if link_count != 2:
raise RuntimeError(
f"Expected exactly 2 LibUVC::UVCShared entries, found {link_count}"
)
text = text.replace(old_link, new_link)
old_include = " ${OpenCV_INCLUDED_DIRS}\n"
new_include = (
" ${OpenCV_INCLUDED_DIRS}\n"
" ${libuvc_INCLUDE_DIRS}\n"
)
include_count = text.count(old_include)
if include_count != 2:
raise RuntimeError(
f"Expected exactly 2 OpenCV include entries, found {include_count}"
)
text = text.replace(old_include, new_include)
path.write_text(text)
print("Patched successfully.")
print("libuvc links replaced:", link_count)
print("libuvc include paths added:", include_count)
PY
수정 결과 확인
grep -n \
"find_package(libuvc\|libuvc_LIBRARIES\|libuvc_INCLUDE_DIRS\|FATAL_ERROR" \
CMakeLists.txt
다음과 비슷하게 나와야 합니다.
25:find_package(libuvc REQUIRED)
97: ${libuvc_INCLUDE_DIRS}
108: ${libuvc_LIBRARIES}
120: ${libuvc_INCLUDE_DIRS}
130: ${libuvc_LIBRARIES}
FATAL_ERROR는 출력되면 안 됩니다.
다음도 확인하십시오.
grep -n "LibUVC::UVCShared\|ASTRA_LIBUVC\|LIBUVC_TARGET" CMakeLists.txt
아무것도 출력되지 않아야 합니다.
최종 CMake 구조
첫 번째 라이브러리는 다음 형태가 됩니다.
target_include_directories(${PROJECT_NAME} PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
${OpenCV_INCLUDED_DIRS}
${libuvc_INCLUDE_DIRS}
)
target_link_libraries(${PROJECT_NAME}
${OpenCV_LIBS}
Eigen3::Eigen
glog::glog
magic_enum::magic_enum
${libuvc_LIBRARIES}
-lOpenNI2
-L${ORBBEC_OPENNI2_REDIST}
)
list_devices_node도 같은 방식이어야 합니다.
target_include_directories(list_devices_node PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
${OpenCV_INCLUDED_DIRS}
${libuvc_INCLUDE_DIRS}
)
target_link_libraries(list_devices_node
${OpenCV_LIBS}
Eigen3::Eigen
glog::glog
magic_enum::magic_enum
${libuvc_LIBRARIES}
-lOpenNI2
-L${ORBBEC_OPENNI2_REDIST}
${PROJECT_NAME}
)

기존 CMake 캐시 삭제
반드시 이전 캐시를 삭제하십시오.
cd /home/sjyong/limo_ws
rm -rf build/astra_camera
rm -rf install/astra_camera
rm -rf log/latest_build
astra_camera만 다시 빌드
cd /home/sjyong/limo_ws
source /opt/ros/humble/setup.bash
source install/setup.bash 2>/dev/null || true
colcon build \
--symlink-install \
--packages-select astra_camera \
--executor sequential \
--event-handlers console_direct+ \
--cmake-args \
-DBUILD_TESTING=OFF


이제 기존의 다음 메시지는 나오지 않아야 합니다.
libuvc was found, but no supported CMake target exists
전체 워크스페이스 빌드
Astra 패키지가 성공하면 전체 빌드를 실행합니다.
cd /home/sjyong/limo_ws
source /opt/ros/humble/setup.bash
source install/setup.bash
colcon build \
--symlink-install \
--executor sequential \
--event-handlers console_direct+ \
--cmake-args \
-DBUILD_TESTING=OFF


