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

Posted

技术标签:

【中文标题】Linux Ubuntu 12.04 NiTE 上的 ROS hydro + OpenNI2 + NiTE2 无法初始化【英文标题】:ROS hydro + OpenNI2 + NiTE2 on Linux Ubuntu 12.04 NiTE fails to initialize 【发布时间】:2014-02-13 23:21:06 【问题描述】:

我面临的问题是,当我尝试初始化 NiTE 时,它失败并显示错误代码 1 (STATUS_ERROR)

nite::NiTE::initialize();

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

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

我从做我自己的 ROS 水电包开始 - 目前有一个简单的结构: -catkin pkg ....-源 ....... - 初学者_pkg ...... - 源代码 ............. -talker.cpp ............. -listerner.cpp .... - 开发 .... - 构建

我的初学者 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 $ENVNITE2_INCLUDE)
message(STATUS $ENVNITE2_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 中相同的路径

talker的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 \r\n", 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/

并从机器学习数据所在的文件夹中运行我的初学者教程,但它没有任何区别。

我可能会犯错误的任何建议? 非常感谢您提前。

【问题讨论】:

【参考方案1】:

原来我的 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

经过一些调整,它就奏效了。

【讨论】:

以上是关于Linux Ubuntu 12.04 NiTE 上的 ROS hydro + OpenNI2 + NiTE2 无法初始化的主要内容,如果未能解决你的问题,请参考以下文章

ubuntu12.04上手动安装mysql

ubuntu12.04下怎么在桌面上新建文件夹和空白文档?

在 Ubuntu 12.04 上使用 Kivy 和 Buildozer 制作 apk

Xtion pro live OpenNI2.2 Nite 2.2 安装配置1.0

Ubuntu 12.04嵌入式交叉编译环境arm-linux-gcc搭建过程图解

Linux - Ubuntu中文输入法安装(Ubuntu 12.04)