ROS2 with openvr always fails
Hi, I'm porting robosavvy's vive_ros repo into ros2 and no matter what I do, every time I start a ROS2 node it always fails with error
[ros2run]: Aborted
I'm using Ubuntu 22.04, ROS2 Humble, openvr 1.23.7 cpp, and a NULL HMD
A very basic ROS2 node call with cause the failure:
#include "rclcpp/rclcpp.hpp"
int main(int argc, char **argv) {
rclcpp::init(argc, argv);
auto node = std::make_shared<rclcpp::Node>("my_node_name");
rclcpp::spin(node);
rclcpp::shutdown();
return 0;
}
And my CMakelist.txt is the following:
cmake_minimum_required(VERSION 3.5) project(vive_ros)
## set definition, path, compileflags add_definitions(-DLINUX -DLINUX64
-DPOSIX) set(OPENVR "$ENV{HOME}/libraries/openvr") add_definitions(-DOPENVR_PATH="${OPENVR}")
## for source code to get sample textures and shader files path set(THIRDPARTY_DIR ${OPENVR}/samples/thirdparty) set(SHARED_SRC_DIR ${OPENVR}/samples/shared) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17
-include ${SHARED_SRC_DIR}/compat.h") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall
-Wextra -pedantic -g") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2")
## find openvr
find_library(OPENVR_LIBRARIES
NAMES
openvr_api
PATHS
${OPENVR}/bin
${OPENVR}/lib
PATH_SUFFIXES
linux64
NO_DEFAULT_PATH
NO_CMAKE_FIND_ROOT_PATH
)
set(OPENVR_INCLUDE_DIR ${OPENVR}/headers ${OPENVR}/samples)
## find SDL
set(SDL_REQUIRED_LIBRARIES SDL2)
foreach(lib ${SDL_REQUIRED_LIBRARIES})
find_library(${lib}_LIBRARY
NAMES
${lib}
PATHS
${THIRDPARTY_DIR}/sdl2-2.0.3/bin
PATH_SUFFIXES
linux64
)
list(APPEND SDL2_LIBRARIES ${${lib}_LIBRARY})
endforeach()
set(SDL2_INCLUDE_DIR ${THIRDPARTY_DIR}/sdl2-2.0.3/include)
## common src from openvr sample
file(GLOB SHARED_SRC_FILES
${SHARED_SRC_DIR}/*.cpp
${SHARED_SRC_DIR}/*.h
)
## find opengl (OpenGL specific)
find_package(OpenGL REQUIRED)
find_package(GLEW 1.11 REQUIRED)
## find vulkan (vulkan specific)
find_library(VULKAN_LIBRARY
NAMES
vulkan-1
vulkan
PATHS
${THIRDPARTY_DIR}/vulkan-1.0.49.0/lib
PATH_SUFFIXES
linux64
NO_DEFAULT_PATH
)
set(VULKAN_INCLUDE_DIR ${THIRDPARTY_DIR}/vulkan-1.0.49.0/include)
## add include path
include_directories(
${SDL2_INCLUDE_DIR}
${OPENVR_INCLUDE_DIR}
${OPENGL_INCLUDE_DIR} ## (OpenGL specific)
${GLEW_INCLUDE_DIR} ## (OpenGL specific)
${VULKAN_INCLUDE_DIR} ## (Vulkan specific)
)
find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
find_package(tf2 REQUIRED)
find_package(tf2_ros REQUIRED)
find_package(std_srvs REQUIRED)
find_package(std_msgs REQUIRED)
find_package(geometry_msgs REQUIRED)
find_package(cv_bridge REQUIRED)
find_package(image_transport REQUIRED)
set(CMAKE_BUILD_TYPE "Release")
include_directories(
./include
)
# VIVE node:
add_executable(minimal_controller_node
${SHARED_SRC_FILES}
src/minimal_controller_node.cpp
src/vr_interface.cpp
)
ament_target_dependencies(minimal_controller_node rclcpp std_srvs std_msgs cv_bridge image_transport geometry_msgs tf2 tf2_ros)
target_link_directories(minimal_controller_node PUBLIC ${OPENVR}/lib/linux64)
## link all
target_link_libraries(minimal_controller_node
${OPENGL_LIBRARIES} ## (OpenGL specific)
${GLEW_LIBRARIES} ## (OpenGL specific)
${VULKAN_LIBRARY} ## (Vulkan specific)
${SDL2_LIBRARIES}
${OPENVR_LIBRARIES}
${CMAKE_DL_LIBS}
${EXTRA_LIBS}
)
install(TARGETS
minimal_controller_node
DESTINATION lib/${PROJECT_NAME}
)
install(DIRECTORY launch
DESTINATION share/${PROJECT_NAME}
)
ament_package()
Copy of my post on the openvr Github issues page:
https://github.com/ValveSoftware/openvr/issues/1744
Asked by buckley.toby on 2023-05-22 10:07:01 UTC
Comments