SHA256
265 lines
5.5 KiB
CMake
265 lines
5.5 KiB
CMake
cmake_minimum_required(VERSION 3.16)
|
|
|
|
project(r1_vision LANGUAGES CXX)
|
|
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
|
|
|
option(BUILD_VISION "Build vision components" ON)
|
|
option(BUILD_VOICE "Build R1 voice assistant" ON)
|
|
|
|
set(
|
|
UNITREE_SDK2_DIR
|
|
"/home/jvizner/unitree_sdk2"
|
|
CACHE PATH
|
|
"Path to unitree_sdk2"
|
|
)
|
|
|
|
# ============================================================
|
|
# Unitree SDK2
|
|
# ============================================================
|
|
|
|
if(BUILD_VISION OR BUILD_VOICE)
|
|
|
|
if(NOT EXISTS "${UNITREE_SDK2_DIR}/CMakeLists.txt")
|
|
message(
|
|
FATAL_ERROR
|
|
"Invalid UNITREE_SDK2_DIR: ${UNITREE_SDK2_DIR}"
|
|
)
|
|
endif()
|
|
|
|
add_subdirectory(
|
|
"${UNITREE_SDK2_DIR}"
|
|
"${CMAKE_BINARY_DIR}/unitree_sdk2"
|
|
EXCLUDE_FROM_ALL
|
|
)
|
|
|
|
endif()
|
|
|
|
# ============================================================
|
|
# Vision / Motion
|
|
# ============================================================
|
|
|
|
if(BUILD_VISION)
|
|
|
|
find_package(Eigen3 REQUIRED)
|
|
|
|
find_package(
|
|
OpenCV REQUIRED
|
|
COMPONENTS
|
|
core
|
|
imgproc
|
|
highgui
|
|
imgcodecs
|
|
calib3d
|
|
)
|
|
|
|
find_package(pinocchio REQUIRED)
|
|
find_package(fmt REQUIRED)
|
|
|
|
# --------------------------------------------------------
|
|
# Shared vision dependencies
|
|
# --------------------------------------------------------
|
|
|
|
add_library(
|
|
r1_vision_common
|
|
INTERFACE
|
|
)
|
|
|
|
target_include_directories(
|
|
r1_vision_common
|
|
INTERFACE
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/include"
|
|
"${UNITREE_SDK2_DIR}/include"
|
|
${OpenCV_INCLUDE_DIRS}
|
|
)
|
|
|
|
target_link_libraries(
|
|
r1_vision_common
|
|
INTERFACE
|
|
Eigen3::Eigen
|
|
pinocchio::pinocchio
|
|
${OpenCV_LIBS}
|
|
unitree_sdk2
|
|
)
|
|
|
|
target_compile_definitions(
|
|
r1_vision_common
|
|
INTERFACE
|
|
UNITREE_SDK2_DIR="${UNITREE_SDK2_DIR}"
|
|
)
|
|
|
|
# --------------------------------------------------------
|
|
# Camera frame publisher
|
|
#
|
|
# Named r1_vision_node because Unitree SDK2 already
|
|
# defines its own "vision_node" target.
|
|
# --------------------------------------------------------
|
|
|
|
add_executable(
|
|
r1_vision_node
|
|
src/vision_node.cc
|
|
)
|
|
|
|
target_link_libraries(
|
|
r1_vision_node
|
|
PRIVATE
|
|
r1_vision_common
|
|
)
|
|
|
|
# --------------------------------------------------------
|
|
# Motion controller
|
|
#
|
|
# Reads YOLO detections and controls R1 head.
|
|
# fmt is required by Unitree ArmSdk / spdlog.
|
|
# --------------------------------------------------------
|
|
|
|
add_executable(
|
|
r1_motion_node
|
|
src/motion_node.cc
|
|
)
|
|
|
|
target_link_libraries(
|
|
r1_motion_node
|
|
PRIVATE
|
|
r1_vision_common
|
|
fmt::fmt
|
|
)
|
|
|
|
# --------------------------------------------------------
|
|
# Hand / camera calibration
|
|
# --------------------------------------------------------
|
|
|
|
add_executable(
|
|
r1_hand_calibrate
|
|
src/r1_hand_calibrate.cc
|
|
)
|
|
|
|
target_link_libraries(
|
|
r1_hand_calibrate
|
|
PRIVATE
|
|
r1_vision_common
|
|
)
|
|
|
|
endif()
|
|
|
|
# ============================================================
|
|
# Voice
|
|
# ============================================================
|
|
|
|
if(BUILD_VOICE)
|
|
|
|
find_package(CURL REQUIRED)
|
|
|
|
# --------------------------------------------------------
|
|
# Voice assistant
|
|
# --------------------------------------------------------
|
|
|
|
add_executable(
|
|
r1_voice
|
|
src/voice_node.cc
|
|
src/stt.cc
|
|
src/llm.cc
|
|
src/tts.cc
|
|
src/conversation.cc
|
|
src/vision_context.cc
|
|
)
|
|
|
|
target_include_directories(
|
|
r1_voice
|
|
PRIVATE
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/include"
|
|
"${UNITREE_SDK2_DIR}/include"
|
|
)
|
|
|
|
target_link_libraries(
|
|
r1_voice
|
|
PRIVATE
|
|
unitree_sdk2
|
|
CURL::libcurl
|
|
)
|
|
|
|
# --------------------------------------------------------
|
|
# Raw microphone test
|
|
# --------------------------------------------------------
|
|
|
|
add_executable(
|
|
r1_mic_test
|
|
src/r1_mic_test.cc
|
|
)
|
|
|
|
target_include_directories(
|
|
r1_mic_test
|
|
PRIVATE
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/include"
|
|
"${UNITREE_SDK2_DIR}/include"
|
|
)
|
|
|
|
target_link_libraries(
|
|
r1_mic_test
|
|
PRIVATE
|
|
unitree_sdk2
|
|
)
|
|
|
|
endif()
|
|
|
|
# ============================================================
|
|
# Install
|
|
# ============================================================
|
|
|
|
set(INSTALL_TARGETS "")
|
|
|
|
if(BUILD_VISION)
|
|
|
|
list(
|
|
APPEND INSTALL_TARGETS
|
|
r1_vision_node
|
|
r1_motion_node
|
|
r1_hand_calibrate
|
|
)
|
|
|
|
endif()
|
|
|
|
if(BUILD_VOICE)
|
|
|
|
list(
|
|
APPEND INSTALL_TARGETS
|
|
r1_voice
|
|
r1_mic_test
|
|
)
|
|
|
|
endif()
|
|
|
|
if(INSTALL_TARGETS)
|
|
|
|
install(
|
|
TARGETS
|
|
${INSTALL_TARGETS}
|
|
RUNTIME DESTINATION bin
|
|
)
|
|
|
|
endif()
|
|
|
|
# ============================================================
|
|
# Install configuration / scripts
|
|
# ============================================================
|
|
|
|
if(BUILD_VISION)
|
|
|
|
install(
|
|
DIRECTORY
|
|
config/
|
|
DESTINATION
|
|
share/r1_vision/config
|
|
)
|
|
|
|
install(
|
|
PROGRAMS
|
|
scripts/yolo_detector.py
|
|
DESTINATION
|
|
share/r1_vision/scripts
|
|
)
|
|
|
|
endif()
|