Linux Ubuntu 12.04 NiTE上的ROS hydro+OpenNI2+NiTE2无法初始化

ROS hydro + OpenNI2 + NiTE2 on Linux Ubuntu 12.04 NiTE fails to initialize

本文关键字:hydro+OpenNI2+NiTE2 初始化 ROS 上的 Ubuntu NiTE Linux      更新时间:2023-10-16

我面临的问题是,当我尝试初始化NiTE时,它失败了,错误代码为1(STATUS_error)

nite::NiTE::initialize();

我有一个设计机器人模仿项目的项目。以下是一些详细信息:

  • 我正在使用虚拟机在Linux上进行开发
  • 我已经测试了与Assus Xtion Pro Live的连接(示例),它正在工作
  • 我已经在Windows下构建了我的跟踪器,它们正在工作,我所需要做的就是将它们作为节点连接到ROS
  • 我已经在CMakeList.txt中连接了OpenNI2和NiTE2,如下所示

我开始做我自己的ROS hydro软件包-目前它的结构很简单:-catkin pkg……-src……….-beginner_pkg…………..-src…………..-发言人.cpp…………..-listener.cpp……-devel……-构建

beginner_pkg的CMakeList.txt如下:

cmake_minimum_required(VERSION 2.8.3)
project(beginner_tutorials)
## Find catkin and any catkin pack
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
genmsg
tf
)
#set(NITE2_INCLUDE "/home/evo/Desktop/NiTE-Linux-x64-2.2/Include/")
#set(NITE2_REDIST64 "/home/evo/Desktop/NiTE-Linux-x64-2.2/Redist/")
##Find pack for OpenNI2
find_path(OpenNI2_INCLUDEDIR
NAMES OpenNI.h
HINTS /usr/include/openni2)
find_library(OpenNI2_LIBRARIES
NAMES OpenNI2 DummyDevice OniFile PS1090
HINTS /usr/lib/ /usr/lib/OpenNI2/Drivers
PATH_SUFFIXES lib)
message (STATUS ${OpenNI2_LIBRARIES})
##Find pack for NiTE2
message(STATUS $ENV{NITE2_INCLUDE})
message(STATUS $ENV{NITE2_REDIST64})
#/home/evo/Desktop/NiTE-Linux-x64-2.2/Include/
find_path (NITE2_INCLUDEDIR
NAMES NiTE.h
HINTS "/home/evo/Desktop/NiTE-Linux-x64-2.2/Include/")
##/home/evo/Desktop/NiTE-Linux-x64-2.2/Redist/
find_library (NITE2_LIBRARY
NAMES NiTE2
HINTS "/home/evo/Desktop/NiTE-Linux-x64-2.2/Redist/"
PATH_SUFFIXES lib)

## Declare a catkin package
catkin_package()
## Build talker and listener 
include_directories(include ${catkin_INCLUDE_DIRS})
include_directories(${OpenNI2_INCLUDEDIR})
include_directories(${NITE2_INCLUDEDIR})
add_executable(talker src/talker.cpp)
target_link_libraries(talker ${catkin_LIBRARIES})
target_link_libraries(talker ${OpenNI2_LIBRARIES} ${NITE2_LIBRARY})
add_dependencies(talker beginner_tutorials_generate_messages_cpp)
add_executable(listener src/listener.cpp)
target_link_libraries(listener ${catkin_LIBRARIES})
add_dependencies(listener beginner_tutorials_generate_messages_cpp)

我留下了与CMakeList.txt 中相同的路径

讲话者的Cpp代码如下:

int main(int argc, char **argv)
{
bool active = true;
HandTracker hTracker;
Status status = STATUS_OK;
status = NiTE::initialize(); 
// iniciate the ROS communicator
ros::init(argc, argv, "talker");
ros::NodeHandle n;
ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000);
ros::Rate loop_rate(10);
// Define the msg
std_msgs::String msg;
std::stringstream ss;
// ros::ok()
if(!HandleStatus(status)) {
printf("ERROR: #%d, %s rn", status,openni::OpenNI::getExtendedError());
ss << "NITE NOT INITIALIZED";
msg.data = ss.str();
ROS_INFO("%s", msg.data.c_str());
chatter_pub.publish(msg);
return 1;
}else ss<<"NITE initialized";
...

我尝试过这个解决方案:

http://ariandy1.wordpress.com/2013/07/10/ros-openni2-nite2/

并从机器学习数据所在的文件夹中运行了我的beginer_tutorials,但没有什么不同。

有什么建议我可能会犯错误吗?事先非常感谢。

事实证明,我的CMakeList.txt没有正确定义,也没有在它所在的位置找到NiTE2。。。然后是中提到的初始化问题

http://ariandy1.wordpress.com/2013/07/10/ros-openni2-nite2/

在Redist文件夹中找不到机器学习文件。

我使用了位于的openni2_tracker中的CMakeList.txt

https://github.com/ros-drivers/openni2_tracker

经过一些调整,它就起了作用。