【読書メモ】オブジェクト指向でなぜつくるのか 第二版

一応プログラマー的な働き方をしていますが、実はちゃんとクラスというやつを使いこなせていません。
自分一人で作るときは大抵、ポーリング制御で済むような、簡単なループもんばっかり作りますのでね……。
そんな私でも、Arduinoのライブラリを使う場合はライブラリの挙動を追ったり、必要なら改造する際にクラスに触れざるを得ず。

とはいえ、元が電子工学科で情報工学の勉強やってない事もあって、あまり難しいコードになるとお手上げなんですよね……。
というわけで、取っ掛かりの本を探そうにも、ブルーバックスってプログラミングの本が少ないんですよね。
で、あれこれ探っていたところ、そういえばこの本があったなと。

GNU Octaveで画像を重ね合わせ三次元モデルをつくる その1:isosurfaceメソッドで行列データをもとに三次元的にプロットする

isosurfaceは日本語で等値面といい、身近なトコだと地図の等高線みたいなもんです。
それを重ね合わせれば、三次元モデルができるというお話。
取っ掛かりとして、三次元データの重ね合わせで疑似的な3D表示をすることを目指します。

実際のところ

まずは写経。

 clf; # 画面クリア
 [x,y,z] = meshgrid (-2:0.5:2, -2:0.5:2, -2:0.5:2);
 v = x.^2 + y.^2 + z.^2;
 isosurface (x, y, z, v, 3);
 isosurface (x, y, z, v, 5);
 axis equal;
 title ("isosurfaces of two nested spheres");

f:id:shuzo_kino:20201206001736p:plain


で、実際にオリジナルをば。
数学クソ雑魚なので、平面を

clf; # 画面クリア
[x,y,z] = meshgrid (-2:0.5:2, -2:0.5:2, -2:0.5:2);
v = x.*2 + y.*2 + z.*2;
isosurface (x,y,z,v,1);
isosurface (x,y,z,v,2);
isosurface (x,y,z,v,3);

f:id:shuzo_kino:20201206004917p:plain
良さそうですね。

では間隔を密にして重ねてみましょうか

clf; # 画面クリア
[x,y,z] = meshgrid (-2:0.5:2, -2:0.5:2, -2:0.5:2);
v = x.*2 + y.*2 + z.*2;
for i = 1:100,
isosurface (x,y,z,v,0.01*i);
end;

f:id:shuzo_kino:20201206005900p:plain
f:id:shuzo_kino:20201206010121p:plain
図形の単純さの割にクッソ重いのができました。
字義通り等値な部分だけレンダリングすれば軽く早くなるのでしょうが……。

Intel Realsense D435の環境をUbuntu1804LTSに組む

KinectV2を弄っていたら色々欲がでてRealSenseD435を買ってしまいました。
このD435、Open Manipulator Xの治具データが出てるので個人的にも遊びやすいんですよね。

実際のところ

ubuntu18とROS melodic な構成が少ないのでメモ代わりに

うまくSDKが起動すると、こんな感じ。
f:id:shuzo_kino:20201202235536p:plain

今書いてまs

Ubuntu18系でUSBの通信頻度を変える


デフォのUSB速度
testdrive@testdrive-System-Product-Name:~/catkin_ws/build$ cat /sys/bus/usb-serial/devices/ttyUSB1/latency_timer
16

なんもせんとエラー
~/catkin_ws/build$ rosrun open_manipulator_controller create_udev_rules
[rospack] Error: package 'open_manipulator_controller' not found


環境を反映し、権限を付与
$ source ~/catkin_ws/devel/setup.bash

roscore Traceback (most recent call last) Permission denied

sudo rosdep fix-permissions

Problem with roscore - ROS Answers: Open Source Q&A Forum

udevで反映
$ rosrun open_manipulator_controller create_udev_rules

This script copies a udev rule to /etc to facilitate bringing
up the OpenManipulator usb connection.

[sudo] testdrive のパスワード:

Reload rules

testdrive@testdrive-System-Product-Name:~/catkin_ws/build$ cat /sys/bus/usb-serial/devices/ttyUSB1/latency_timer
1


python - How to fix "[rospack] Error: package 'my_package' not found" - Stack Overflow

ros-noetic-desktop-fullが入らないと思ったら作業環境が不一致の18.04だったおという話。

Ubuntu20……だと思っていた環境

E: 問題を解決することができません。壊れた変更禁止パッケージがあります。

なんのことはなく、使っていたのがUbuntu18系だったというオチ。
noeticは20系対応なので、インストールできんというわけです。

実際のところ

$ sudo apt-get install ros-noetic-desktop-full
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
インストールすることができないパッケージがありました。おそらく、あり得
ない状況を要求したか、(不安定版ディストリビューションを使用しているの
であれば) 必要なパッケージがまだ作成されていなかったり Incoming から移
動されていないことが考えられます。
以下の情報がこの問題を解決するために役立つかもしれません:

以下のパッケージには満たせない依存関係があります:
 ros-noetic-desktop-full : 依存: ros-noetic-desktop しかし、インストールされようとしていません
                           依存: ros-noetic-perception しかし、インストールされようとしていません
                           依存: ros-noetic-simulators しかし、インストールされようとしていません
                           依存: ros-noetic-urdf-sim-tutorial しかし、インストールされようとしていません
E: 問題を解決することができません。壊れた変更禁止パッケージがあります。

後世への戒めとして我が恥を遺す

aptitudeが有効という噂を聞いたので

$ sudo apt install aptitude

何やら依存関係らしきものを解消してくれている

$ sudo aptitude install ros-noetic-desktop-full
以下の新規パッケージがインストールされます:
  blt{a} bzip2-doc{a} curl{a} cython{a} default-libmysqlclient-dev{a} dh-python{a} docutils-common{a} 
  fltk1.3-doc{a} fluid{a} fonts-lato{a} fonts-lyx{a} gazebo11{ab} gazebo11-common{a} 
  gazebo11-plugin-base{ab} gir1.2-gtk-2.0{a} gir1.2-harfbuzz-0.0{a} google-mock{a} googletest{a} 
...
...
  xml-core{a} 
0 個のパッケージを更新、 782 個を新たにインストール、 0 個を削除予定、0 個が更新されていない。
アーカイブの 376 MB/376 MB を取得する必要があります。 展開後に 1,692 MB のディスク領域が新たに消費されます。
以下のパッケージには満たされていない依存関係があります:
 ros-noetic-laser-filters : 依存: libboost-filesystem1.71.0 いずれの利用可能なパッケージからも提供されていない仮想パッケージです

                            依存: libc6 (>= 2.29) 2.27-3ubuntu1.3 がインストール済みです
                            依存: libgcc-s1 (>= 3.0) いずれの利用可能なパッケージからも提供されていない仮想パッケージです

                            依存: libstdc++6 (>= 9) 8.4.0-1ubuntu1~18.04 がインストール済みです
                            依存: libtinyxml2-6a (>= 5.0.0) いずれの利用可能なパッケージからも提供されていない仮想パッケージです
...
...

 ros-noetic-dynamic-reconfigure : 依存: libgcc-s1 (>= 3.0) いずれの利用可能なパッケージからも提供されていない仮想パッケージです

以下のアクションでこれらの依存関係の問題は解決されます:

       以下のパッケージを現在のバージョンに一時固定する:                         
1)       gazebo11 [インストールされていません]                                   
2)       gazebo11-plugin-base [インストールされていません]                       
3)       libgazebo11 [インストールされていません]                                
...
...
237)     ros-noetic-xacro [インストールされていません]                           
238)     ros-noetic-xmlrpcpp [インストールされていません]                        



この解決方法を受け入れますか? [Y/n/q/?] 

Yで進める。

以下の新規パッケージがインストールされます:
  blt{a} bzip2-doc{a} curl{a} fonts-lyx{a} graphviz{a} hdf5-helpers{a} libaec-dev{a} libann0{a} 
  libcdt5{a} libcgraph6{a} libcurl4-openssl-dev{a} libgts-0.7-5{a} libgts-bin{a} libgvc6{a} libgvpr2{a} 
  libhdf4-alt-dev{a} libhdf5-cpp-100{a} libhdf5-dev{a} liblab-gamut1{a} libldap2-dev{a} 
  libnetcdf-dev{a} libpathplan4{a} libssl-dev{a} mpi-default-bin{a} python3-setuptools{a} python3-tk{a} 
  tcl{a} tcl8.6{a} tk{a} tk8.6{a} tk8.6-blt2.5{a} ttf-bitstream-vera{a} 
0 個のパッケージを更新、 32 個を新たにインストール、 0 個を削除予定、0 個が更新されていない。
アーカイブの 8,909 kB を取得する必要があります。 展開後に 40.7 MB のディスク領域が新たに消費されます。
先に進みますか? [Y/n/?]

ダラダラと導入がすすみ……冒頭のように、だめでした。