Blog - Entries of category Miscellaneous
Kinect の LED を操作するという記事
http://exout.net/blog/?p=303
があったのですが,試したところ Windows では動きませんでした.(Mac用かな?)
そこで,検索したところ
http://akatukisiden.wordpress.com/2011/12/10/openniでkinectのチルトモーター首を動かす/
という記事がありましたので,2つを合わせてプログラムを作成しました.
なお,プログラムは書き換えると間違える可能性がありますので,使用している物の抜粋を
ほぼそのまま載せます.まあプログラマなら分かりますよ...ね.
VC++ 2008, 2010 で動くのを確認しています. xn の頭の :: は気にしないでください.惰性で付けてます.
ヘッダファイル
cppファイル
http://exout.net/blog/?p=303
があったのですが,試したところ Windows では動きませんでした.(Mac用かな?)
そこで,検索したところ
http://akatukisiden.wordpress.com/2011/12/10/openniでkinectのチルトモーター首を動かす/
という記事がありましたので,2つを合わせてプログラムを作成しました.
なお,プログラムは書き換えると間違える可能性がありますので,使用している物の抜粋を
ほぼそのまま載せます.まあプログラマなら分かりますよ...ね.
VC++ 2008, 2010 で動くのを確認しています. xn の頭の :: は気にしないでください.惰性で付けてます.
ヘッダファイル
// USB
#define OPENNI_VID_MICROSOFT 0x45e
#define OPENNI_PID_NUI_MOTOR 0x02b0
#define OPENNI_LED_OFF 0
#define OPENNI_LED_GREEN 1
#define OPENNI_LED_RED 2
#define OPENNI_LED_ORANGE 3
#define OPENNI_LED_BLINK_GREEN 4
#define OPENNI_LED_BLINK_RED 5
#define OPENNI_LED_BLINK_ORANGE 6
....
class COpenNiTool
{
public:
COpenNiTool(void) { init();}
....
....
// USB
BOOL openUSBDevice (void);
void closeUSBDevice(void);
void setLEDColor (int col);
void setTiltMotor(int ang);
....
// USB
XN_USB_DEV_HANDLE usb_dev;
XnUSBConnectionString* devPath;
....
}
cppファイル
void COpenNiTool::init()
{
....
//
usb_dev = NULL;
devPath = NULL;
....
}
....
....
/////////////////////////////////////////////////////////////////////////////////////////////////////
// USB
BOOL COpenNiTool::openUSBDevice(void)
{
rc = ::xnUSBInit();
if (rc!=XN_STATUS_OK && rc!=XN_STATUS_USB_ALREADY_INIT) return FALSE;
#ifdef WIN32
XnUInt32 count;
rc = ::xnUSBEnumerateDevices(OPENNI_VID_MICROSOFT, OPENNI_PID_NUI_MOTOR, (const XnUSBConnectionString**)&devPath, &count);
if (rc!=XN_STATUS_OK) {
::xnUSBShutdown();
return FALSE;
}
rc = ::xnUSBOpenDeviceByPath(*devPath, &usb_dev);
if (rc!=XN_STATUS_OK) {
::xnUSBFreeDevicesList(devPath);
return FALSE;
}
#else
rc = ::xnUSBOpenDevice(OPENNI_VID_MICROSOFT, OPENNI_PID_NUI_MOTOR, NULL, NULL, &usb_dev);
if (rc!=XN_STATUS_OK) {
::xnUSBShutdown();
return FALSE;
}
#endif
return TRUE;
}
void COpenNiTool::closeUSBDevice(void)
{
if (usb_dev!=NULL) {
::xnUSBCloseDevice(usb_dev);
usb_dev = NULL;
}
#ifdef WIN32
if (devPath!=NULL) {
::xnUSBFreeDevicesList(devPath);
devPath = NULL;
}
#endif
::xnUSBShutdown();
}
void COpenNiTool::setLEDColor(int col)
{
if (usb_dev==NULL) return;
::xnUSBSendControl(usb_dev, XN_USB_CONTROL_TYPE_VENDOR, 0x06, (XnUInt16)col, 0, NULL, 0, 0);
return;
}
void COpenNiTool::setTiltMotor(int ang)
{
if (usb_dev==NULL) return;
//if (ang>30 || ang<-30) return;
::xnUSBSendControl(usb_dev, XN_USB_CONTROL_TYPE_VENDOR, 0x31, (XnUInt16)(ang*2), 0, NULL, 0, 0);
return;
}
iphone で使用するSoftBankのIMAPは暗号化されておらず,非常に危なっかしいので,無線LAN部分だけでもSSLで暗号化することにする.
具体的にはSSLを中継するプログラムを作って,大学のマシンで中継させる.
プログラムはsl_proxy関連で最近同じようなやつをたくさん作っているので,15分できた.証明書も取り合えず流用.
iphone <----SSL----> 大学の中継サーバ <----通常通信----> imap.softbank.jp
しかし,iphoneは親切と言うべきか,おおきなお世話と言うべきか,入力した設定を勝手に解釈して変更するので困ってしまう.
例えば,SoftBankのIMAPのアカウントを登録して,さらに同じようなアカウントを登録しようとすると,既にある設定まで変わって,同じアカウントが2個できる.何なのだー.
仕方ないので,全然関係の無いようなアカウントを登録してから内容を変更.
IMAPのSSL通信も相手のポートは993に決め打ちのようで,いくらSSL通信のスイッチをONにしておいても,993番ポート以外では暗号化通信を行わない.
いい加減にしろー.このせいで30分くらいで終わるところ,半日つぶしたじゃないか!!!
SoftBankもたいした手間じゃないんだからSSL通信にすればいいのに.何を考えているのでしょう.
おっと.こらこら,この辺のマシンの993番ポートを叩いて回ろう何んてのは止めてね.
具体的にはSSLを中継するプログラムを作って,大学のマシンで中継させる.
プログラムはsl_proxy関連で最近同じようなやつをたくさん作っているので,15分できた.証明書も取り合えず流用.
iphone <----SSL----> 大学の中継サーバ <----通常通信----> imap.softbank.jp
しかし,iphoneは親切と言うべきか,おおきなお世話と言うべきか,入力した設定を勝手に解釈して変更するので困ってしまう.
例えば,SoftBankのIMAPのアカウントを登録して,さらに同じようなアカウントを登録しようとすると,既にある設定まで変わって,同じアカウントが2個できる.何なのだー.
仕方ないので,全然関係の無いようなアカウントを登録してから内容を変更.
IMAPのSSL通信も相手のポートは993に決め打ちのようで,いくらSSL通信のスイッチをONにしておいても,993番ポート以外では暗号化通信を行わない.
いい加減にしろー.このせいで30分くらいで終わるところ,半日つぶしたじゃないか!!!
SoftBankもたいした手間じゃないんだからSSL通信にすればいいのに.何を考えているのでしょう.
おっと.こらこら,この辺のマシンの993番ポートを叩いて回ろう何んてのは止めてね.
サイトのリニューアルもやっと一息
