cvl-robot's diary

研究ノート メモメモ https://github.com/dotchang/

カメラ画像をOpenCVで取得してJpegエンコードして、ZeroMQを通してネットワーク配信するプログラムサンプル

(メモ)
Windows10, Visual Studio2015環境で、openFrameworks9.3でofxZmq addonとOpenCV3.1を使用して高速に画像を配信するためのサンプルプログラムです。
ofxZmqにstd::vector& dataを受け取れるように、インターフェースの追加をちょっとだけしています。


ofApp.h

#pragma once

#include "ofMain.h"

#include "opencv2/opencv.hpp"

class ofxZmqSubscriber;
class ofxZmqPublisher;

class testApp : public ofBaseApp{

	public:
		void setup();
		void update();
		void draw();

		void keyPressed  (int key);
		void keyReleased(int key);
		void mouseMoved(int x, int y );
		void mouseDragged(int x, int y, int button);
		void mousePressed(int x, int y, int button);
		void mouseReleased(int x, int y, int button);
		void windowResized(int w, int h);
		void dragEvent(ofDragInfo dragInfo);
		void gotMessage(ofMessage msg);
		
		ofxZmqSubscriber* subscriber;
		ofxZmqPublisher* publisher;

		cv::VideoCapture cap;

		cv::Mat frame;
		std::vector<unsigned char> send_buf;
		std::vector<int> params;
		string type;

		cv::Mat image;
		std::vector<unsigned char> recv_buf;
};

ofApp.cpp

#include "testApp.h"

#include "ofxZmq.h"

#include "opencv2/opencv.hpp"

#pragma comment(lib, "opencv_calib3d310.lib")
#pragma comment(lib, "opencv_core310.lib")
#pragma comment(lib, "opencv_features2d310.lib")
#pragma comment(lib, "opencv_flann310.lib")
#pragma comment(lib, "opencv_highgui310.lib")
#pragma comment(lib, "opencv_imgcodecs310.lib")
#pragma comment(lib, "opencv_imgproc310.lib")
#pragma comment(lib, "opencv_ml310.lib")
#pragma comment(lib, "opencv_objdetect310.lib")
#pragma comment(lib, "opencv_photo310.lib")
#pragma comment(lib, "opencv_shape310.lib")
#pragma comment(lib, "opencv_stitching310.lib")
#pragma comment(lib, "opencv_superres310.lib")
#pragma comment(lib, "opencv_ts310.lib")
#pragma comment(lib, "opencv_video310.lib")
#pragma comment(lib, "opencv_videoio310.lib")
#pragma comment(lib, "opencv_videostab310.lib")

//--------------------------------------------------------------
void testApp::setup()
{
	ofSetFrameRate(30);

	cap.open(0);

	if (cap.isOpened()) {
		cout << "Camera is ready!" << endl;

        	cap.set(cv::CAP_PROP_FRAME_WIDTH, 1280);
	        cap.set(cv::CAP_PROP_FRAME_HEIGHT, 720);
        	cap.set(cv::CAP_PROP_FPS, 30);

		type = ".jpg";
		//type = ".webp";
		if (type == ".jpg") {
			params.push_back(CV_IMWRITE_JPEG_QUALITY);
			params.push_back(100);
			params.push_back(CV_IMWRITE_JPEG_OPTIMIZE);
			params.push_back(0);
			params.push_back(CV_IMWRITE_JPEG_PROGRESSIVE);
			params.push_back(0);
		}
		else if (type == ".webp") {
			params.push_back(CV_IMWRITE_WEBP_QUALITY);
			params.push_back(100);
		}

		// start server
		publisher = new ofxZmqPublisher();
                publisher->setHighWaterMark(1);
		publisher->bind("tcp://*:9999");
	}

	// start client
	subscriber = new ofxZmqSubscriber();
	subscriber->setHighWaterMark(1);
	subscriber->connect("tcp://localhost:9999");
}

//--------------------------------------------------------------
void testApp::update()
{
	while (subscriber->hasWaitingMessage())
	{
		subscriber->getNextMessage(recv_buf);
		image = cv::imdecode(recv_buf, CV_LOAD_IMAGE_COLOR);

		cout << "received data: " << recv_buf.size() << endl;
	}

	if (!cap.isOpened()) return;

	if (cap.grab()) {
		cap >> frame;

		int msec_start = ofGetElapsedTimeMillis();
		bool ret = cv::imencode(type, frame, send_buf, params);
		int msec_stop = ofGetElapsedTimeMillis();

		if (ret) {
			publisher->send(send_buf);

			int lap = msec_stop - msec_start;
			int fps = (lap) ? 1000.0 / lap : ofGetFrameRate();
			cout << "encoded size(" << type << ") : " << send_buf.size()
			     << ", time : " << lap << ", fps : " << fps << endl;
		}
	}
}

//--------------------------------------------------------------
void testApp::draw()
{
	if (!image.empty()) {
		cv::imshow("image", image);
	}
}

//--------------------------------------------------------------
void testApp::keyPressed(int key)
{

}

//--------------------------------------------------------------
void testApp::keyReleased(int key)
{

}

//--------------------------------------------------------------
void testApp::mouseMoved(int x, int y)
{

}

//--------------------------------------------------------------
void testApp::mouseDragged(int x, int y, int button)
{

}

//--------------------------------------------------------------
void testApp::mousePressed(int x, int y, int button)
{

}

//--------------------------------------------------------------
void testApp::mouseReleased(int x, int y, int button)
{

}

//--------------------------------------------------------------
void testApp::windowResized(int w, int h)
{

}

//--------------------------------------------------------------
void testApp::gotMessage(ofMessage msg)
{

}

//--------------------------------------------------------------
void testApp::dragEvent(ofDragInfo dragInfo)
{

}

Core i7-4770S環境でJpegエンコードがおよそ10msec,出力データサイズが220kBytesでした。
WebPエンコードは、およそ60msecで、150kBytesでした。
WebPでQualityを70賭したときにはおよそ40msecで40kBytesでした。ストリーミングでも十分実用が見込めるぐらいの速さになってきました。

それぞれ、libjpeg-turboとMethod2でthreadを有効化したlibwebp1.5をOpenCVに静的リンクさせて使っています。

OpenCV3.1から標準で使えるようになった画像フォーマットWebPのスレッド処理を有効化する方法

(メモ)
C:\workspace\opencv\sources\3rdparty\libwebp\enc\config.c
内の
int WebPConfigInitInternal(WebPConfig* config,
WebPPreset preset, float quality, int version) {
if (WEBP_ABI_IS_INCOMPATIBLE(version, WEBP_ENCODER_ABI_VERSION)) {
return 0; // caller/system version mismatch!
}
if (config == NULL) return 0;

config->quality = quality;
config->target_size = 0;
config->target_PSNR = 0.;
config->method = 4; // 1-6, 2 (Low Quality, High Speed) or 6 (High Quality, Low Speed) is best.
config->sns_strength = 50;
config->filter_strength = 60; // rather high filtering, helps w/ gradients.
config->filter_sharpness = 0;
config->filter_type = 1; // default: strong (so U/V is filtered too)
config->partitions = 0;
config->segments = 4;
config->pass = 1;
config->show_compressed = 0;
config->preprocessing = 0;
config->autofilter = 0;
config->partition_limit = 0;
config->alpha_compression = 1;
config->alpha_filtering = 1;
config->alpha_quality = 100;
config->lossless = 0;
config->image_hint = WEBP_HINT_DEFAULT;
config->emulate_jpeg_size = 0;
config->thread_level = 1; // 0 or 1
config->low_memory = 0;

...(略)...
}
return WebPValidateConfig(config);
}

もちろんqualityと同じようにmethod, thread_levelもOpenCVのインターフェースを整えて外から呼べるようにしてもよい。

C:\workspace\opencv\sources\modules\imgcodecs\include\opencv2\imgcodecs\imgcodecs_c.h
C:\workspace\opencv\sources\modules\imgcodecs\src\grfmt_webp.cpp
あたりを参照のこと。

OpenCVのWEBPはバージョン3で、AVXを使用してないのでほのかに遅い。。。

[1] WebP入門
[2] WebPの画質とファイルサイズを評価する|サイバーエージェント 公式エンジニアブログ
[3] http://static.googleusercontent.com/media/www.webmproject.org/ja//media/pdf/udpsample.pdf WEBMを使ったビデオ会議のサンプル(古い)
[4] CMake プロジェクトの C++ アプリで webp 形式の読み書きに libwebp で対応することはじめ - Qiita
[5] WebP Advanced API の使い方 - Qiita

[6] GitHub - konlil/libbpg-0.9.4: Build bpg library via Visual Studio 2012. C99 codes have been modified to C89

今日の本文

春です。起きましょう。

LIVE555 Streaming MediaをVisual Studio2015でコンパイル

(メモ)

WindowsLinuxで動画配信をしたい場合に便利なライブラリLIVE555 Streaming MediaWindowsコンパイルするときのメモです。
Gstreamerがプログラミングのために欲しい資料がなかなか手に入らないのに対して、Live555は比較的素直なソースで書かれているので資料無しでも理解しやすいのが特徴です。
LGPLライセンスです。

1.ダウンロード

http://www.live555.com/liveMedia/から、live555-latest.tar.gz ファイルをダウンロードしてきて解凍します.

2.コンフィグファイルwin32configをワードパッドで開いて、2か所編集します

標準の場所にインストールしたVisual Studio2015の例です。

TOOLS32	=	C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC
LINK_OPTS_0 =		$(linkdebug) msvcrt.lib

いったん.txtファイル形式で保存しておいて、元のファイルを削除してから、ファイル名を編集して.txt拡張子を削ります.

3.Windows SDKをインストールする

Windowsのバージョンに合わせて、WindowsSDKをインストールします。一部のmakeルールを利用するために必要です。
Windows 10 SDK – Windows アプリ開発

4.スタートメニューのすべてのアプリからVisualStudio2015のフォルダを開き、VS2015_x86_Native_Toolsコマンドプロンプトを開く

  • [5]を参考にインクルードパスをWindowsSDKに通します。
SET Include=%Include%;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include
  • liveのフォルダに移動します。
cd c:\workspace\live
  • genWindowsMakefiles.cmdを実行します。
genWidnwowsMakefiles

5.各フォルダに降りて、コンパイルしていきます

[6]を参考に、ビルドしていきます。

cd liveMedia
nmake /B -f liveMedia.mak

cd ..\groupsock
nmake /B -f groupsock.mak
cd ..\UsageEnvironment
nmake /B -f UsageEnvironment.mak
cd ..\BasicUsageEnvironment
nmake /B -f BasicUsageEnvironment.mak
cd ..\testProgs
nmake /B -f testProgs.mak
cd ..\mediaServer
nmake /B -f mediaServer.mak

お疲れ様でした。

[2] LIVE555 Streaming Media
[3] 【RTP】Live555の使い方と解説【RTSPserver】 | FiS Project
[4] VC2008でLIVE555 Streaming Mediaのコンパイル - Junk Blog
[5] https://support.microsoft.com/ja-jp/kb/2791460
[6] Use .mak files on Visual Studio 2010 - Stack Overflow
[7] カメラモジュールの映像をH.264で圧縮してRTSPプロトコルによりストリーミング配信
[8] Don't Blog Me. I'll Blog You.: Streaming JPEG images over RTP using live555 streaming media
[9] GitHub - kylezhou/jpeg_webcam_streamer: a streaming application using JPEG (MJPEG) webcam based on Live555 library OpenCVで圧縮したjpegを送るにはこれのtestを参考にするとよさそう。
[10] GitHub - tklab-tud/umundo: Distributed Publish/Subscribe middleware for MacOSX, Linux, Windows, Android and iOS RTPを簡単に送りたいとき
[11] umundo/umundo-rtp-pub.cpp at master · tklab-tud/umundo · GitHub

新生活で料理を始めるときにそろえるべき調理器具、など。

春です。
新しく一人暮らしや二人暮らしを始める方など、健康と節約のために自炊をしたいと考えている人も多いのではないでしょうか。
料理には、いろいろな道具や器具が必要になりますが、いろいろありすぎて初心者はどれを買いそろえればいいのかわからない人も多いかと思います。
このページでは、最初に準備するべきものをまとめたいと思います。

料理マニュアル

まず、料理の常識を勉強しましょう。最初は、難しい事はなかなか理解できませんから、簡単に教えてくれる教科書を選びます。
今どき、料理レシピはインターネットでいくらでも調べられますので、無くても良いです。

キッチン・ルール―台所の法則

キッチン・ルール―台所の法則

  • 包丁は、使ったらすぐ水洗いして拭いてしまう。
  • 鍋の取っ手は、コンロに乗せたらひっかけてしまわないように横に向ける。
  • 火をかけている間は、キッチンを離れない。

など、とても大事なことを易しく教えてくれます。1時間もあれば、十分全部読めます。

調理家電

とりあえず、炊飯器と冷蔵庫は必須です。電子レンジなどはあれば便利ですが、無くても何とかなりますので後回しでもいいです。

炊飯器

失敗が少なく美味しく炊ける圧力IHを何としても手に入れてください。
水加減が合わないとき、普通の米も無洗米設定で炊くとべちょべちょにはなりにくいです。

冷蔵庫

本格的に料理を始めるつもりなら、野菜室があるタイプが良いです。あと、消費電力に注意。新しくて、ちょっと大きいタイプの方が消費電力が小さめです。

日立 冷蔵庫 265L 3ドア ライトブラウン R-27HV T

日立 冷蔵庫 265L 3ドア ライトブラウン R-27HV T

日立の真空チルドは魅力的です。安い電気屋さんで7~8万円ぐらいから取り扱いがあります。

調理器具

包丁とまな板

物の本には良い包丁を買うように書いてあることが多いのですが、包丁は定期的に研ぐメンテナンスが必要なので最初はダメにしてしまうことも多いです。なので、そこそこちゃんとした良い普通のものを選んでおいて、本当にいいものは料理に自信が持てるようになってから選んでもいいと思います。

関孫六 2000ST 三徳 165mm AB-5250

関孫六 2000ST 三徳 165mm AB-5250

また、セラミックナイフを一本用意しておくと便利です。ナイフ一本で十分なんでも料理できてしまいます。ですが、腕が上達しないので、ちゃんとした包丁もそろえておくことをお勧めします。
京セラ セラミック 三徳包丁 ピンク 140mm 漂白除菌OK 無料研ぎ直し券付 FKR-140PK

京セラ セラミック 三徳包丁 ピンク 140mm 漂白除菌OK 無料研ぎ直し券付 FKR-140PK

まな板も、物の本には木製が良いとお勧めされていることが多いのですが、初心者は洗い方や乾かし方のメンテナンスに失敗してカビを生やしてしまうことも多いです。まな板にカビを生やしてしまうと、料理する気がなくなってしまいますから、抗菌機能のついたプラスチック製を入門用にはお勧めします。
料理に慣れてくると、シンクに渡せるぐらい大きいまな板の方が使いやすいのですが、頻繁に出し入れするものなので、最初は洗いやすい中くらいの大きさのまな板を用意することをお勧めします。

パール金属 抗菌 まな板 M 320×200×13mm 白 食洗機対応 HB-1533

パール金属 抗菌 まな板 M 320×200×13mm 白 食洗機対応 HB-1533

お鍋: 両手鍋22cmと片手鍋18cm、ふた付き

片手鍋と両手鍋をひとつづつそろえると、調理が捗ります。いっぱいありすぎても場所をとってしまうので、最初は2つあれば十分です。鍋のふたはとても重要です。ガラス製で中が見えるやつがやっぱり便利です。まだ若いと、引っ越しする機会があったりして次の家ではガスが使えずIHだけ、なんてこともありえます。なので、IH対応でこびりつきにくいやつをお勧めします。
無加水鍋とか、圧力鍋とか、取っ手がとれる、とか、とても料理の幅が広がってよいのですが、初心者にはお勧めしません。料理の勘を身に着けてから、購入した方が良いと思います。大きさは、両手鍋22cm、片手鍋18cmをお勧めです。初心者向けの定番料理「カレー」を作るとき、あまり小さいとやりづらいですからね。

パール金属 両手鍋 22cm ガラス鍋蓋付 IH対応 3層底 シンプル・ウェア HW-7205

パール金属 両手鍋 22cm ガラス鍋蓋付 IH対応 3層底 シンプル・ウェア HW-7205

フライパン24-26cm

鉄製のおしゃれなフライパンは焦がしてしまいがちで最初は使いこなせないと思います。なので、表面加工付きでIH対応で、そこそこの大きさの物を選びます。28cmだと明らかに大きいので、それよりちょっと小さいやつを。
ちょっと高めですが、北陸アルミのこれが良いです。蓋も必要なので、忘れずに。立てられるやつが、狭いキッチンで意外と便利。

北陸アルミ フライパン IHハイキャスト 26cm 「オール熱源対応」

北陸アルミ フライパン IHハイキャスト 26cm 「オール熱源対応」

北陸アルミ ルックインスタンド カバー L (26~30cm) JY-703

北陸アルミ ルックインスタンド カバー L (26~30cm) JY-703

お湯を沸かす道具: ヤカンか電気ケトル、もしくは電気ポット

ヤカンなら安全第一で音が鳴るものを選びます。火が使えるならヤカンが一番お勧めです。

貝印 笛吹き ケトル 2.5L IH対応 シェフトロン DY05056

貝印 笛吹き ケトル 2.5L IH対応 シェフトロン DY05056

ケトルは安定性の良いものをお勧めします。電気ポットは、あまり大きすぎないものの方が使いやすいです。魔法瓶形式で、消費電力の少ないものを選びます。
ティファール 電気ケトル 1.2L ジャスティン プラス ホワイト KO340175象印 電動ポット2.2L ホワイト CD-XC22-WA

ボール大中小

ステンレス製の安いセットのやつで十分です。

金属ざる大中小

これもステンレス製の安いセットのやつで十分です。でも、100均などで売ってるアルミ製はやめておきましょう。アルミがアルツハイマーの原因では?なんて噂もあります。

菜箸

シリコン樹脂製のおしゃれなやつも魅力的ですが、竹や木製の安いやつで十分実用的です。よほどへまをしなければ、表面加工を傷つけることもありません。紐はあっても邪魔なので、ついてないシンプルなやつを。

唐巻菜箸 2P20016

唐巻菜箸 2P20016

おたま、フライ返し

表面加工をした鍋やフライパンを使うときは、金属製は避けて必ず樹脂製を選びます。意外といいやつが無いのですが、町のスーパーなどで安く見つけられることがあります。

ピーラー

ピーラーは初心者にはとても便利ですが、慣れないと意外と深い切り傷を作りやすいので、持ちやすいものを選びます。
京セラのセラミック製は、ドンキホーテなどでナイフとセットで安く売っていることもあります。

京セラ セラミックピーラー ピンク CP-99PK

京セラ セラミックピーラー ピンク CP-99PK

おろし器

たまにしか使わないので、安いやつで良いです。受けが付いていると便利です。

貝印 おろし専科 DA-1204

貝印 おろし専科 DA-1204

計量スプーン

レシピに出てくるのは、決まって大さじか小さじですから2つあれば十分です。
おばあちゃんのように直感で量が分かるぐらいに感覚を身に着けるまで、計量スプーンは持っておいた方が良いです。
計量カップは、炊飯器についてきたものでもなんとかなります。

SW 18-8 極厚 計量スプーン 2本組

SW 18-8 極厚 計量スプーン 2本組

食器

茶碗

食べ過ぎを防ぐため、あまり深くないタイプで、自分の気に入った陶器製のやつを選べばよいです。

お椀

日本人ですから、必ず木製で熱の伝わりにくい、お味噌汁によく合うタイプを選びます。アマゾンにはあまりいいやつは置いていませんので、お茶碗と一緒に街に探しに出たら良いでしょう。

[2017/11/15追記]
クラフト木の実のこれがなかなか良さそう。

皿 大中小

好きなデザインの物をそろえると良いです。特に色が大事で、白色よりも料理に合わせて映える色の皿を選ぶようにすると、実際の味以上に美味しく感じることができます。
選ぶ元気がない人は、とりあえずこちらの安いセットでどうでしょう。でも、白色だけでは必ずいつか物足らなくなります。

エムズスタイル ホワイトライン洋食器セット(1人用) MS-50106

エムズスタイル ホワイトライン洋食器セット(1人用) MS-50106

お箸

使いやすい木製か竹製にしてください。

イシダ お箸 天然竹 抗菌 千筋 5膳組 23cm 67136-1

イシダ お箸 天然竹 抗菌 千筋 5膳組 23cm 67136-1

ナイフ・フォーク・スプーン

お気に入りの物を。

【まとめ買いセット】 1人用 ディナー 3pcセット

【まとめ買いセット】 1人用 ディナー 3pcセット

お盆

一人暮らしなら、ちょっと大きめのお盆を一枚持っておくと配膳と片付けが楽でよいです。

清掃道具とか補助具

ふきん(カウンタークロス)

キッチン回りを料理中もきれいに掃除していくことが、料理上達のコツです。一人暮らしでは油汚れの付いたふきんを洗ったり干したりもなかなか大変ですので、使い捨てのカウンタークロスがお勧めです。超重要アイテムですよ。

スポンジ

安いやつを、毎週交換してください。

東和産業 スポンジ PK 抗菌ネットクリーナー 5個入

東和産業 スポンジ PK 抗菌ネットクリーナー 5個入

食器用洗剤

定番のやつを。

除菌ジョイ コンパクト 食器用洗剤 本体 200ml

除菌ジョイ コンパクト 食器用洗剤 本体 200ml

水切りかご

これがシンプルで場所も取らず、使いやすい。金属製のおしゃれなやつは、良い奥様になってから。

アスベル 水切りセット中 「Nポゼ」 ホワイト 4309

アスベル 水切りセット中 「Nポゼ」 ホワイト 4309

ジップロック

袋とケースをそろえておきます。

ジップロック フリーザーバッグ 大 (27.3cm x 26.8cm) 36枚入

ジップロック フリーザーバッグ 大 (27.3cm x 26.8cm) 36枚入

ラップ

サランでもクレでもいいので、ちょっと長めの30cmレギュラー幅のやつを。

サランラップ 30cm×20m 2本パック

サランラップ 30cm×20m 2本パック

【まとめ買い】NEWクレラップ レギュラー 30cm×50m 3本パック

【まとめ買い】NEWクレラップ レギュラー 30cm×50m 3本パック

アルミホイル

めったに使いませんので、何でもいいです。無くても良いです。

サンホイル 徳用 15M

サンホイル 徳用 15M

調味料

基本的に、和食の朝ごはんを作るつもりで料理を練習すると良いです。そのための基本セットをそろえます。

砂糖

伯方の塩 1kg

伯方の塩 1kg

ミツカン 穀物酢(銘撰)ペットボトル 1800ml

ミツカン 穀物酢(銘撰)ペットボトル 1800ml

料理酒

みりん

顆粒だし

味の素 ほんだし 26本入

味の素 ほんだし 26本入

小分けになっているものが便利です。

少し料理ができるようになって来たら、クックドゥを使わない中華料理に挑戦すると良いでしょう。
簡単で、よほど失敗しない限り美味しくできます。
このページがとても参考になります。
cside.hatenablog.com

豆板醤
ウェイパー
オイスターソース

を常備しておくとレパートリーが広がりそうです。

お金の計算

ざっくり初期投資にいくらぐらい必要か調べてみましょう。
本:      1,000円
家電:   100,000円
調理器具:  24,500円
食器: 8,500円
清掃用品: 4,800円
調味料: 3,000円

小計    140,300円

本当に良いものばかり選んではいますが、暮らすってもの入りですね。
まあ、冷蔵庫が7万ほどですので半分は冷蔵庫代ですが。

MRPTリンク集

MRPT | Empowering C++ development in robotics本家
Tutorials | MRPTC++チュートリアル
Mobile Robot Programming Toolkit (MRPT) 日本語情報トップページ - OSDNVer.1.3のWindowsバイナリ
GitHub - MRPT/mrpt: The Mobile Robot Programming Toolkit (MRPT)最新版ソースコード
MRPT入門 - 研究紹介ページWindows7インストール方法
MRPTを用いた環境地図作成用RTコンポーネント | OpenRTM-aistOpenRTM用コンポーネント
MRPTの導入 - lloy-loy’s diaryインストール記
mrptでDepth画像を取得する - alt-ctrl-todayKinectでデプス取得
自宅をSLAMったー。 - alt-ctrl-todayKindectでSLAM
http://www.wakayama-u.ac.jp/~ntakayuk/mrptrobots-j.htm和歌山大学のMRPTを用いた自律ナビゲーションシステムに関する研究
wxWidgets と MRPT、あるいは如何にして MSB6001 に対応するか - Memento Mori古いインストール履歴
MRPT(移動ロボット用プログラミングツールキット)古いバージョンのインストール方法
http://kurolab.cntl.kyutech.ac.jp/sice13/pdf/yamashita.pdf九州工業大学の卒研?
MRPTのコンパイルの仕方 - Tech Learningコンパイルメモ
http://www.rls.mse.tcu.ac.jp/robotics/papers/2014/54thStdSotsuken/1010.pdf使用事例
http://bipl.his.teikyo-u.ac.jp/pdf/Toyama2015b.pdf使用事例

[1]KARTO: Karto 日本語情報トップページ - OSDN
[2]OMPL: http://robotics.naist.jp/edu/text/?Robotics%2FOMPL
[3] GitHub - AtsushiSakai/MATLABRobotics: MATLAB Sample Code for Robotics

トラ技2016年1月号で紹介されていたcm精度のRTK GPSキットのEMLID Reachが届いたので、開封の儀。

(編集中)
メーカーの商品紹介ページ
www.emlid.com

Reachの設定ドキュメント
Emlid

Quickstartの雑な翻訳

電源

マイクロUSBで供給される5Vです。
もしくは、マイクロUSBとは排他利用でDF13ポートに5Vを供給してもかまいません。DF13ポートを使用する場合、USBに接続できるのはメモリなど電源を供給しないデバイスに限ります。

GPSアンテナ

MCXソケットにアンテナを接続します。

Reachに接続

最初にReachに電源供給すると、Wi-Fiホットスポットが作られます。
名前: reach:"MACアドレス"
パスワード: emildreach

これで入れない場合は、バグファームウェアの可能性があるのでアップデートしろとあります。

Wi-Fiの設定

ブラウザで
http://reach.local:5000
または、
http://192.168.42.1:5000
にアクセスし、Reachのホットスポットから常用しているWi-Fiネットワークへ接続を切り替えます。

ここまで書いておいてなんですが、いい資料を見つけたのでこのブログを参考にしてください!

REACH RTK | MKNOD

日記・備考録

EMLIDのMikhailからReachと呼ぶ、Intel Edisonベースの超小型RTKモジュールの試作品を送ってもらったので、RTKRCVをポートして動作試験。GNSSモジュールはNEO-M8Nなので普通にRTKが動く。ただしM8Nなので1Hzまでで、GLOとBDSのアンビギュイティは解けない。GPS+GLO 1Hz RTKでEdisonのCPU負荷2%位。NEO-M8Tの正式版が出ればそれに置き換えて5HzまでのRTKでBDSのアンビギュイティも問題なく解けるはず。ただ、RTKRCVのコード書いたのがずいぶん前なので今一つ操作性が悪い。もう少し使いやすくするのとGNSS/INS統合もちゃんと入れて書き直したいなあ。

1HzまでGLO,BDSは解けない、というのはM8Nを使った開発版の制限かな?M8Tでも5Hzまで、BDSはOKでGLOは?

BASE座標の調べ方。緯度経度の他に正確な高度の情報も必要です。

正確に(使用資格に注意してください。)

基準点成果等閲覧サービス


RTKLIBに詳しくなる必要がありそう。
RTKLIB - OSQZSS

OpenRaveをソースからコンパイル

GitHUBからダウンロードしてきたOpenRaveをソースからコンパイルするときの作業メモです。
環境は、Windows10上のVirtualBoxに入れたUbuntu12.04LTSです。
要らないことも一杯やってますが、メモ。

1 sudo apt-get update
2 sudo apt-get upgrade
3 sudo apt-get upgrade --fix-missing
5 sudo apt-get update
6 sudo apt-get upgrade
8 mv openrave-master/ openrave
15 sudo add-apt-repository ppa:openrave/release
16 sudo apt-get update
17 sudo apt-get install openrave
19 cd openrave/
25 sudo apt-get install cmake-curses-gui
29 sudo apt-get install assimp
33 sudo apt-get install libboost-dev
40 sudo apt-get install libxml2-dev
49 sudo apt-get install libpcre++-dev
55 sudo apt-get install libpcre++0
56 sudo apt-get install libpcre3-dev
57 sudo apt-get install libpcre3
69 sudo apt-get install bzip2
81 sudo apt-get install liblog4c-dev
84 sudo apt-get install collada-dom-dev
87* sudo apt-get install liblog4cxx10-de
93 sudo apt-get install qt
96 sudo apt-get install libfparser-dev
99 sudo apt-get install fparser
102 sudo apt-get install libboost-all-dev
109 sudo apt-get install libsoqt4-dev
112 sudo apt-get install libgmp-dev
115 sudo apt-get install libmpfr-dev
118 sudo apt-get install libmpfi-dev
121 sudo apt-get install zlib-bin
125 sudo apt-get install octave3.2
128 sudo apt-get install libbullet-dev
132 sudo apt-get install libavformat-dev
135 sudo apt-get install libswscale-dev
140 sudo apt-get install libode-dev
145 sudo apt-get install openscenegraph
148 sudo apt-get install libopenscenegraph-dev
149 cmake .
150 make clean
151 make
153 sudo make install


後でとても良いページが見つかりました。綺麗にまとまっていますので、こちらを参照してください。
sites.google.com

2016/11/20現在、openraveのインストールにはもう少し追加のライブラリが必要になっているようです。
・libccd
・octomap
・fcl (最新版ではなくfcl-0.5)
いずれもgithubからソースを入手して自前でコンパイルします。