あかすくぱるふぇ

同人サークル「あかすくぱるふぇ」のブログです。

・fun func_name(arg: Double) : Int
func_name : 関数名
arg : 引数名
Double : 引数の型
Int : 返り値の型

fun func_name(arg: Double) : Int
{
    return x + y
}
は、fun func_name(arg: Double) : Int = x + y
という風に書くこともできる。
さらに、返り値の型は省略可能。

・関数オブジェクト
関数オブジェクトを別関数の引数に指定
fun func_name(cal: (Double) -> Int)
cal : 引数名(関数オブジェクト)
(Double) -> Int : 関数オブジェクトの型(Doubleを引数にとり、Intを返す関数オブジェクト)

val p = ::func_obj_name
と書くと関数オブジェクトを変数に格納できる
func_obj_nameは関数オブジェクトにしたい(予め定義された)関数名

・無名関数
val p = fun(x: Double, y: Double) : Double = x + y
fun : 無名関数であるというキーワード
返り値の型は省略できるし、=の代わりに{}内に記述してもよい。

val p: (Double, Double) -> Double = fun(x, y) = x + y
と書くこともできる。
これは、pの型が(Double, Double) -> Double型であり、
 それはfun(x, y) { return x + y }という定義ですよ、という意味。

・ラムダ式
val p: (Double, Double) -> Double = {x, y -> x + y}
と書くこともできる。
{x, y -> x + y}の部分がラムダ式。
->の左側が引数、右側が返り値、というだけ。

関数オブジェクトを関数の引数として渡す場合もラムダ式を使える。
printResult({x, y -> x+y})
また、
printResult(){x, y -> x+y}
printResult{x, y -> x+y}
と書いてもよい。

・List
list.filter{p: Person -> p.age==5}
Person型のListの要素の年齢が5かどうかを返す関数を使って、返り値がtrueの要素だけ残す
引数の型Personは省略可能

list.maxBy{p: Person -> p.age}
Person型のListの要素の年齢を返す関数を使って、年齢が最大の要素を選ぶ




Helen Dataset

・ダウンロード
以下のリンクから"a. All Images"と"c. Annotation"をダウンロード

・ファイル配置
annotationフォルダとimageフォルダを同階層に作る。
annotationフォルダはダウンロードしたものそのままでOK。
imageフォルダにはダウンロードした画像を突っ込む(フォルダ分けせず直下に画像ファイルが来るように)。

・データ確認
import cv2

with open('annotation/1.txt', 'r') as file:
img_file_name = file.readline().replace('\n', '')
img_file_name = 'images/' + img_file_name + '.jpg'
img = cv2.imread(img_file_name)

for line in file:
x, y = line.replace('\n', '').replace('\r', '').replace(' ', '').split(',')
cv2.drawMarker(img, (int(float(x)), int(float(y))), (21, 255, 12),
markerType=cv2.MARKER_CROSS, thickness=2)
height_before = img.shape[0]
width_before = img.shape[1]
height_after = 512
width_after = int(width_before * height_after / height_before)
img = cv2.resize(img, (width_after, height_after))

cv2.imshow('', img)
cv2.waitKey()


300W

・ダウンロード
以下のリンクからpart1-part4をダウンロードし、catした上で解凍

・データ確認
import cv2

with open('01_Indoor/indoor_001.pts', 'r') as file:

img = cv2.imread('01_Indoor/indoor_001.png')

for i in range(3):
file.readline()
for i in range(68):
x, y = file.readline().split(' ')
cv2.drawMarker(img, (int(float(x)), int(float(y))), (21, 255, 12),
markerType=cv2.MARKER_CROSS, thickness=1)

cv2.imshow('', img)
cv2.waitKey()



・必要パッケージのインストール
sudo apt-get install python-rosinstall libglew-dev cmake
sudo apte-get install libjpeg-dev libpng12-dev libtiff5-dev libopenexr-dev

・Pangolinのインストール
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
mkdir build
cd build
cmake ..
make -j
sudo make install

・ORB_SLAM2(本体)のコンパイル
git clone https://github.com/raulmur/ORB_SLAM2.git
cd ORB_SLAM2
chmod +x build.sh
./build.sh

・ORB_SLAM2(本体)のテスト
 ./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml data/rgbd_dataset_freiburg1_xyz/

※データのダウンロードは以下のページから。
https://vision.in.tum.de/rgbd/dataset/freiburg1/rgbd_dataset_freiburg1_xyz.tgz

・ORB_SLAM2(ROSノード)のコンパイル準備

・ORB_SLAM2(ROSノード)のコンパイル
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/PATH/ORB_SLAM2/Examples/ROS
chmod +x build_ros.sh
./build_ros.sh

・ORB_SLAM2(ROSノード)のテスト
7. ROS Examples のRunning Stereo Node参照

・RGBDノード

rosrun ORB_SLAM2 RGBD Vocabulary/ORBvoc.txt Examples/RGB-D/d435.yaml /camera/rgb/image_raw:=/camera/color/image_raw /camera/depth_registered/image_raw:=/camera/depth/image_rect_raw


↑このページのトップヘ