[ros-users] Problem in compiling the code for kinect driver
Mr cnn lakshmen
cnnlakshmen_2000 at yahoo.com
Mon Jun 6 08:30:52 UTC 2011
Hi guys,
I need you help. I written a code for the Kinect driver. I do not intend to plot
the image out that is why i have not included the OpenGL header files. I can
compile but i can't seem to link the file.I get a lot of errors when i link.Do
anyone of know what the error? Any Help will be appreciated.
#include "libfreenect.h"
#include "libfreenect.hpp"
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <cmath>
#include <vector>
#include <fstream>
#include <pthread.h>
class Mutex {
public:
Mutex() {
pthread_mutex_init( &m_mutex, NULL );
}
void lock() {
pthread_mutex_lock( &m_mutex );
}
void unlock() {
pthread_mutex_unlock( &m_mutex );
}
class ScopedLock
{
Mutex & _mutex;
public:
ScopedLock(Mutex & mutex)
: _mutex(mutex)
{
_mutex.lock();
}
~ScopedLock()
{
_mutex.unlock();
}
};
private:
pthread_mutex_t m_mutex;
};
class FreenectDevice;
Freenect::Freenect freenect;
Freenect::FreenectDevice::FreenectDevice* device;
freenect_video_format requested_format(FREENECT_VIDEO_RGB);
class FreenectDevice : public Freenect::FreenectDevice {
public:
FreenectDevice(freenect_context *_ctx, int _index)
: Freenect::FreenectDevice(_ctx, _index),
m_buffer_depth(freenect_find_video_mode(FREENECT_RESOLUTION_MEDIUM,
FREENECT_VIDEO_RGB).bytes),m_buffer_video(freenect_find_video_mode(FREENECT_RESOLUTION_MEDIUM,
FREENECT_VIDEO_RGB).bytes), m_gamma(2048), m_new_depth_frame(false)
{
float m_depth[2048];
for( unsigned int i = 0 ; i < 2048 ; i++) {
const float k1 = 1.1863;
const float k2 = 2842.5;
const float k3 = 0.1236;
m_depth[i] = k3 * tan(i/k2 + k1);
}
}
virtual void DepthCallback(void* _depth, uint32_t timestamp) {
Mutex::ScopedLock lock(m_depth_mutex);
uint16_t* depth = static_cast<uint16_t*>(_depth);
m_new_depth_frame = true;
}
bool getDepth(std::vector<uint8_t> &buffer) {
Mutex::ScopedLock lock(m_depth_mutex);
if (!m_new_depth_frame)
return false;
buffer.swap(m_buffer_depth);
m_new_depth_frame = false;
return true;
}
private:
std::vector<uint8_t> m_buffer_depth;
std::vector<uint8_t> m_buffer_video;
std::vector<uint16_t> m_gamma;
Mutex m_depth_mutex;
bool m_new_depth_frame;
virtual void VideoCallback(void *video, uint32_t timestamp);
//virtual void DepthCallback(void *depth, uint32_t timestamp) = 0;
};
int g_argc;
char **g_argv;
int main(int argc, char **argv) {
using namespace std;
device = &freenect.createDevice<FreenectDevice>(0);
uint16_t m_depth[640*480]; // depth data from Kinect in a 1-D array
float x[480*640]; // point cloud x values
float y[480*640]; // point cloud y values
float z[480*640]; // point cloud z values
float cx = 320.0; // center of projection
float cy = 240.0; // center of projection
float fx = 600.0; // focal length in pixels
float fy = 600.0; // focal length in pixels
float minDistance = -10;
float scaleFactor = 0.0021;
device->startDepth();
for (int v=0, n=0 ; v<480 ; v++)
{
for ( int u=0 ; u<640 ; u++, n++)
{
// note that values will be in meters, with the camera at the origin,
and the Kinect has a minimum range of ~0.5 meters
x[n] = (u - cx) * (z[n]+ minDistance) * scaleFactor * (cx/cy);
y[n] = (v - cy) * (z[n]+ minDistance) * scaleFactor;
z[n] = m_depth[n];
}
}
ofstream outf("Sample.dat");
for (int v=0 ; v<480 ; v++)
{
for ( int n=0 ; n<640 ; n++)
{
outf << z[n];
}
outf << endl;
}
device->stopDepth();
return 0;
};
The error is laksh.o: In function
`Freenect::FreenectDevice::FreenectDevice(_freenect_context*, int)':
laksh.cpp:(.text._ZN8Freenect14FreenectDeviceC2EP17_freenect_contexti[Freenect::FreenectDevice::FreenectDevice(_freenect_context*,
int)]+0x35): undefined reference to `freenect_open_device'
laksh.cpp:(.text._ZN8Freenect14FreenectDeviceC2EP17_freenect_contexti[Freenect::FreenectDevice::FreenectDevice(_freenect_context*,
int)]+0x12e): undefined reference to `freenect_set_user'
laksh.cpp:(.text._ZN8Freenect14FreenectDeviceC2EP17_freenect_contexti[Freenect::FreenectDevice::FreenectDevice(_freenect_context*,
int)]+0x149): undefined reference to `freenect_find_video_mode'
laksh.cpp:(.text._ZN8Freenect14FreenectDeviceC2EP17_freenect_contexti[Freenect::FreenectDevice::FreenectDevice(_freenect_context*,
int)]+0x184): undefined reference to `freenect_set_video_mode'
laksh.cpp:(.text._ZN8Freenect14FreenectDeviceC2EP17_freenect_contexti[Freenect::FreenectDevice::FreenectDevice(_freenect_context*,
int)]+0x19f): undefined reference to `freenect_find_depth_mode'
laksh.cpp:(.text._ZN8Freenect14FreenectDeviceC2EP17_freenect_contexti[Freenect::FreenectDevice::FreenectDevice(_freenect_context*,
int)]+0x1da): undefined reference to `freenect_set_depth_mode'
laksh.cpp:(.text._ZN8Freenect14FreenectDeviceC2EP17_freenect_contexti[Freenect::FreenectDevice::FreenectDevice(_freenect_context*,
int)]+0x1f0): undefined reference to `freenect_set_depth_callback'
laksh.cpp:(.text._ZN8Freenect14FreenectDeviceC2EP17_freenect_contexti[Freenect::FreenectDevice::FreenectDevice(_freenect_context*,
int)]+0x206): undefined reference to `freenect_set_video_callback'
laksh.o: In function `Freenect::FreenectDevice::~FreenectDevice()':
laksh.cpp:(.text._ZN8Freenect14FreenectDeviceD2Ev[Freenect::FreenectDevice::~FreenectDevice()]+0x1b):
undefined reference to `freenect_close_device'
laksh.o: In function `Freenect::FreenectDevice::~FreenectDevice()':
laksh.cpp:(.text._ZN8Freenect14FreenectDeviceD1Ev[Freenect::FreenectDevice::~FreenectDevice()]+0x1b):
undefined reference to `freenect_close_device'
laksh.o: In function `Freenect::FreenectDevice::~FreenectDevice()':
laksh.cpp:(.text._ZN8Freenect14FreenectDeviceD0Ev[Freenect::FreenectDevice::~FreenectDevice()]+0x1b):
undefined reference to `freenect_close_device'
laksh.o: In function `Freenect::FreenectDevice::startDepth()':
laksh.cpp:(.text._ZN8Freenect14FreenectDevice10startDepthEv[Freenect::FreenectDevice::startDepth()]+0x13):
undefined reference to `freenect_start_depth'
laksh.o: In function `Freenect::FreenectDevice::stopDepth()':
laksh.cpp:(.text._ZN8Freenect14FreenectDevice9stopDepthEv[Freenect::FreenectDevice::stopDepth()]+0x13):
undefined reference to `freenect_stop_depth'
laksh.o: In function
`Freenect::FreenectDevice::freenect_depth_callback(_freenect_device*, void*,
unsigned int)':
laksh.cpp:(.text._ZN8Freenect14FreenectDevice23freenect_depth_callbackEP16_freenect_devicePvj[Freenect::FreenectDevice::freenect_depth_callback(_freenect_device*,
void*, unsigned int)]+0xd): undefined reference to `freenect_get_user'
laksh.o: In function
`Freenect::FreenectDevice::freenect_video_callback(_freenect_device*, void*,
unsigned int)':
laksh.cpp:(.text._ZN8Freenect14FreenectDevice23freenect_video_callbackEP16_freenect_devicePvj[Freenect::FreenectDevice::freenect_video_callback(_freenect_device*,
void*, unsigned int)]+0xd): undefined reference to `freenect_get_user'
laksh.o: In function `Freenect::Freenect::Freenect()':
laksh.cpp:(.text._ZN8Freenect8FreenectC1Ev[Freenect::Freenect::Freenect()]+0x38):
undefined reference to `freenect_init'
laksh.cpp:(.text._ZN8Freenect8FreenectC1Ev[Freenect::Freenect::Freenect()]+0x141):
undefined reference to `pthread_create'
laksh.o: In function `Freenect::Freenect::~Freenect()':
laksh.cpp:(.text._ZN8Freenect8FreenectD1Ev[Freenect::Freenect::~Freenect()]+0x92):
undefined reference to `pthread_join'
laksh.cpp:(.text._ZN8Freenect8FreenectD1Ev[Freenect::Freenect::~Freenect()]+0x9f):
undefined reference to `freenect_shutdown'
laksh.o: In function `Freenect::Freenect::operator()()':
laksh.cpp:(.text._ZN8Freenect8FreenectclEv[Freenect::Freenect::operator()()]+0x17):
undefined reference to `freenect_process_events'
laksh.o: In function `FreenectDevice::FreenectDevice(_freenect_context*, int)':
laksh.cpp:(.text._ZN14FreenectDeviceC1EP17_freenect_contexti[FreenectDevice::FreenectDevice(_freenect_context*,
int)]+0x29): undefined reference to `vtable for FreenectDevice'
laksh.cpp:(.text._ZN14FreenectDeviceC1EP17_freenect_contexti[FreenectDevice::FreenectDevice(_freenect_context*,
int)]+0x53): undefined reference to `freenect_find_video_mode'
laksh.cpp:(.text._ZN14FreenectDeviceC1EP17_freenect_contexti[FreenectDevice::FreenectDevice(_freenect_context*,
int)]+0xc8): undefined reference to `freenect_find_video_mode'
collect2: ld returned 1 exit status
More information about the ros-users
mailing list