【その他】応用情報合格してた!!

応用情報受ける

基本情報は去年合格したので、応用を受けてみます!!
基本と違い、国家試験の中ではそれなりの難易度になります。

応用情報技術者試験は、業務経験が5~6年程度ある中堅のプログラマーシステムエンジニアを対象としています。

応用情報技術者の推定偏差値は、65程度といわれています。偏差値65程度の国家資格には、社会保険労務士や通訳案内士などがあります。

形式はこんな感じ↓になります。

基本と比べると国語に近い問題が多いので、割といけるのでは?(フラグ)

過去問といた感じだと午後より午前の方が不安です💦

ただなんだかんだ夏休み含めて2,3ヶ月くらいは勉強したので、合格できると信じて、、!

試験

場所は吉祥寺の成蹊大学でした。

近所で安心してたら遅刻しかけた。

感想

午前自己採点では余裕。

午後も記述次第だけどTwitter見る限りではそんなに的外れなことは書いてなさそう!!

いけてるだと思うんだけどなー🙏🙏

12/22追記 合格してた!

正直午後もう少し取れた気がするけど、合格できてよかった!

デスぺ、ネスぺあたり来年以降受けてみたい!

終わり!!

【工作/プログラミング】自作PC内でホログラムを動かす

概要

ホログラムとは

こういうものです。

これをアクリルの位置や映像を工夫してうまく自作PC内に隠蔽して、ホログラムをやってみます。

目標これ。

www.youtube.com

完成動画がこちらになります。正直微妙です。

youtu.be

www.youtube.com

以下制作過程↓

ハードの用意

ハードオフでジャンクのフォトフレームを買ってきました。 500円くらいの激安です。 これを分解して液晶を取り出します。

取り出しました。

このままではジャンクなので、型番が一致するLCD基盤をネットで探してきて、 これと液晶を接続して、映像を流します。 こんな感じです。

↑では試しにMacから映像を流してみたものになります。 こんな感じで、今回はRaspiで映像を流します。 raspiは種類がたくさんありますが、 今回は映像再生だけで、スペック的にはRaspiで間に合いそうです。 ということで、Raspi zero を購入しました。

https://www.amazon.co.jp/gp/product/B07BHMRTTY/ref=ppx_od_dt_b_asin_title_s00?ie=UTF8&psc=1

ちなみに、LCD基盤はアナログ入力なので、A/D変換ケーブルも一緒に買ってます。

Raspiにはメディア再生専用のOS、OSMCをインストールしました。

インストールしてスクリプトを書きました。 動画は都度microsdに書き込むのは面倒なので、NASをマウントしてそこから読み込むようにします。

OSMCのスクリプトや設定周りはこの辺を参考にさせていただきました。

mattenn.fkgt.net

qiita.com

PC内部に設置

DesktopPCの内部に配置します。 いい感じに設置できる場所がないです。クーラーの通りが悪くなっても嫌なので、手間ですが3Dプリンターでケースを作って、そこに設置することにしました。ケース自体はPC上部からネジで止めます。

モデリングしてプリントしました。

アクリル板を適当な大きさにカットして、それを5号の釣り糸使って、上から吊り下げます。

こんな感じです。

セッティングできたら、映像を流してみます。 完成動画は以下になります。

完成動画

ミクVer

youtu.be

少し離れてみるとこんな感じ

www.youtube.com

地球Ver

youtu.be

淡々と書いてけど、本当はめちゃめちゃエラーと戦ってました。結構頑張った!

終わり!

【プログラミング】自宅内ファイルサーバーやってみた

ファイルサーバーって何

自宅内でだけ繋がるgoogleドライブみたいなイメージです。
PCでも携帯でも同じファイルが見れます。

やりたいこと

ラズパイにOMVを乗っけてファイルサーバーを運用します。
Googledriveは容量が足りないし、NAS買ってRAIDを組むほど大したデータを乗っけないので、個人的にはこれで十分です。

用意

256GBのSSDを買ってきました。
USB接続のケースに入れて、ラズパイと繋ぎます。

https://www.amazon.co.jp/gp/product/B09WRCS713/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1www.amazon.co.jp

Raspiは一昨年くらいに買った4のmodelBをつかいます。
今見たら2万超えてて驚き。(一昨年は6千円くらいだったような?)

https://www.amazon.co.jp/gp/product/B07WR5W2D6/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1www.amazon.co.jp

OMVのインストール

https://github.com/OpenMediaVault-Plugin-Developers/installScript RaspiとSSDを繋いで、↑をクローンしてきて、ビルドします。
ビルドは3時間くらいかかりました。

↑Raspiに電源とSSDをつないだ絵です。

ちなみにラズパイOSのCUI版でないと動かないみたいです。

動かしてみる

これ感動したんですが、猿でもわかるようなUI↑で、しかも日本語版まである!
以前CUIベースでubuntu上にSMBサーバーを立てたことがありましたが、遅くぶつぶつ切れるので、実用に耐えなかったのですが、これはすごい、、!

Mac,Ubuntuでログインしてみる

Mac,Ubuntuでそれぞれファイルマネージャーからログインしてみました。 shishamoidというユーザーを作って、ログインしてます。

各種設定

SMBとFTPで立てます。
やり方はいじればわかるので省略

感想

使ってみた感想ですが、クラウドストレージと比べると、

  • 逐一ダウンロードする必要がない
  • 読み書きが早い
  • パーミッションの管理がしやすい(管理はしない笑)

ストレスフリーで良い。

一ヶ月24時間ずっと運用しましたが、特に問題ありません。
ラズパイのmicroSDの寿命の方が先に来そう。

終わり!

【インターネット回線】IPoEでインターネット高速化した話

やりたいこと

IPoE回線を開通してもらい、またそれにルーターやHGWも対応させることで、インターネットの速度を改善します。

1. IPoE申し込み

うちはDocomo光(@t-com)ですが、光電話を契約している場合、追加料金なしでIPoEを開通できるそうです。
インターネットから申し込んで、1日で開通の連絡が来ました。

ちなみに家のネットワーク構成は以下のような感じになります。
HGWはPR-400MIという機種になります。

2. HGWの設定

まず、ntt.setupにアクセスして,IDとパスワードを入力し、GUI画面に入ります。
次に初期化します。
そのあと、プロバイダとの接続情報を入力せずにすすむことで、IPoEの設定ができました。
初期化しなくても、勝手に設定が降ってくるみたいなことが書いてありましたが、そんなことはなかったです。
ファームウェアの更新かなんかで参考サイトと微妙に画面が違うのと、設定の反映に時間がかかるのが結構面倒でした。

3. ルーター(RTX1210)の設定

これがけっこう大変でした,,

試行錯誤して、以下の設定に落ち着きました。
PPPoeの設定もバックアップ回線として、一応残しておきます。

フィルター関連は長いのでカットしました。

ip route default gateway tunnel 1 filter 500000 gateway pp 1
ip icmp log on
ip keepalive 1 icmp-echo 10 5 dhcp lan2
ipv6 prefix 1 ra-prefix@lan2::/64
ip lan1 address 192.168.100.1/24
ipv6 lan1 address ra-prefix@lan2::1/64
ipv6 lan1 rtadv send 1 o_flag=on
ipv6 lan1 dhcp service server
description lan2 ipv6lan
ip lan2 dhcp service server
ipv6 lan2 dhcp service client ir=on
pp select 1
 pp keepalive interval 30 retry-interval=30 count=12
 pppoe use lan2
 pppoe auto disconnect off
 pp auth accept pap chap
 pp auth myname 〇〇 △△
 ppp lcp mru on 1454
 ppp ipcp ipaddress on
 ppp ipcp msext on
 ppp ccp type none
 ip pp nat descriptor 1000
 pp enable 1
tunnel select 1
 tunnel encapsulation map-e
 ip tunnel mtu 1460
 ip tunnel nat descriptor 20000
 tunnel enable 1

nat descriptor log on
nat descriptor type 2 nat-masquerade
nat descriptor address outer 2 map-e
nat descriptor masquerade incoming 2 through
nat descriptor type 1000 masquerade
nat descriptor type 20000 masquerade
nat descriptor address outer 20000 map-e
ospf use on

telnetd host lan
dhcp service server
dhcp server rfc2131 compliant except remain-silent
dhcp scope 1 192.168.100.2-192.168.100.191/24
dns host lan1
dns service fallback on
dns server pp 1
dns server dhcp lan2
dns server select 500000 dhcp lan2 any .
dns server select 500001 pp 1 any . restrict pp 1
dns private address spoof on
httpd host lan1
sshd service on
sftpd host any
statistics traffic on
statistics nat on

メモ)

  • v6plusはMap-eを利用しているため、Map-eの設定をいれる
  • HGW配下にルーターをつなげる場合は、光電話の契約の有無にかかわらず、DHCPではなくRAでIPアドレスをもらう

4. 結果

V6plusでつながりました。

どれくらい早くなったか、試してみます。

試す日時は日曜日の夜の最もインターネットが混雑する(多分)時間です。

Before:

After:

2倍以上速くなりました!嬉しい!!

感想

難しいというか知らないことが多かったが、その分勉強になった。

はまったこと

HGWにログインできない(パスワードがわからない)

HGWは、192.168.1.1かntt.setupのどちらかでアクセスできます。 HGWにログインして、色々設定をしたいのですが、ログインのパスワードがわかりません。

ホームゲートウェイ(xx-xxxMI)|インターネット接続用ID・パスワードの設定方法|インターネット接続で困ったときは | 個人向けOCNお客さまサポート

↑などによると、「0000」や「1111」、「Password」や「ntt」を試せと書いてあるのですが、どれも上手く行きません。
最終的にちょっとしたブルートフォース攻撃まで試しましたが、うまくいかず、、

どうも業者が勝手に設定して、多分それを親に伝えたけど親が忘れたみたいな感じのようです。
ドコモ光に電話したところ、「初期化しかないですね!」だそうで。 はがきかなんかでパスワード送ってもらって、なんて方法も考えてましたが、対応しかねるそうです。

結局家中を探し回ってHGWをみつけ出し、HGWの物理ボタンから初期化をしました。

IPv6で繋がらない

自分の場合、IPv6ではつながるのですが、IPv4では何故か繋がりませんでした。
試行錯誤した結果、問題はHGW側でした。
どうも設定の反映に時間がかかるようです。

その他

ヤマハの公式コマンドリファレンスが結構充実しているのと、RTX1210はユーザーも多いので、調べながらなんとかなりました。

参考サイト

フレッツ光+IPoE化でハマった記録 | ITとガジェットあれこれ

ヤマハルータ「RTX1210」でv6プラスを使う | The modern stone age.

【電子工作?】冷蔵庫作るよ

最近暑い

ペルチェ素子を使って、小型の冷蔵庫を作ります。

https://www.amazon.co.jp/dp/B01FWAKC2I?ref_=cm_sw_r_cp_ud_dp_62NNHWF533BEZ5BND0NX

準備

材料を用意

・冷却モジュール: ペルチェ素子 ×2
・筐体: スタイロフォーム
・電源: 500W(デスクトップPC用を流用)
・ファン:12V×2
・取手
・蝶番
・断熱テープ
サーモスタット
・ジャンパー線+ビニル線
・その他はんだ,ベニヤ板,ビスなど

断熱材について

youtubeなどには発泡スチロールを使った例が多くありましたが、少し安っぽいので、スタイルフォームを使います。

サーモスタットについて

過冷却を防ぎます。ペルチェ素子と直列に繋いで、5℃以下になったらスイッチがオフになるように設定します。 https://www.amazon.co.jp/dp/B07JLC8Y1Q?ref_=cm_sw_r_cp_ud_dp_RTZPK7DMPZW9A22S4RF8

電源について

500Wのデスクトップ用が余ってたので、これを使います。 久しぶりに出してきたら埃まみれになってた、、

この電源にATX24pinのブレイクアウトボードをつなげて、DC12Vピン8つを得ます。 ペルチェの素子必要電源が12V,その他サーモスタットとファンもそれぞれ12V必要なので、割とカツカツになりました。

https://www.amazon.co.jp/dp/B08PFY1ZKN?ref_=cm_sw_r_cp_ud_dp_3HVB0EG0Z91987HDRP6G

製図

図面を引きます。1Lの紙のパックが4つ入るサイズにしました。横30cm×縦30cm×高さ35cmです。

少しでも冷却性能を上げるため、この後中蓋も設計しました。

制作

断熱材を切断+組み立て

切断

けがいて、切ります。カッターで切れるので楽。

組み立て

切り終わったので、組み立てます。

接着はグルーガンでやってます。

取手+蝶番取り付け

取手と蝶番をつけて、開けやすくします。 直接スタイロフォールにビスは打てないので、適当に余ってたベニヤ板を切って、そこにビスを打って固定します。

はんだづけ+配線

はんだづけ

ビニル線の先5mmくらいの皮膜を剥がして、銅線を露出させ、露出した部分を捻り、そこにハンダを馴染ませて、太い一本の線にします。

配線

できたら繋げます。 ビニル線の色は適当です(黒と赤は切れた)。

とりあえずできた

↑内部のファンから冷気が出て、それで冷えます。
ちなみに銀色の部分は断熱テープです。
切断面の凹凸をカバーしています。

試運転

試しに動かしてみます。

市販の冷蔵庫は10℃以下と決められているらしいので、10℃以下を目標にします。

youtube.com

冷え方は良い感じですが、ファンがうるさい、、

改善

とりあえずアマゾンで代わりのファンを買ってきました。
回転数が心配ですが、名前からして静音性はありそうです。

ファンを増設しました。
どうだろ。

youtu.be

だいぶ静かになりました。完成です。

使ってみる

牛乳を冷やしてみます。

2,3時間放置したら良い感じに冷えました。

ミルクティーを作りました。

苦労して作った分格別でした!美味しかったです!

終わり!

【研究室】Isaac SimのロボットモデルをROS2で制御する

1. はじめに

Isaac simについて

Isaac Sim とは、2019年にNvidiaから発表された新しいシミュレーションソフトウェアになります。

ロボット開発における既存のシミュレーションソフトは、gazeboなどがメジャーですが、Isaac Simは、それらと比べて

  1. リッチなシミュレーション画面
  2. Nvidiaが提供するソフトウェア+AI(物体検出,セグメンテーションなど)との親和性の高さ
  3. シミュレーションツールとして必要なものは一通り(というかほぼ全て)揃っている、フルスタックなシミュレーションツール

が特徴としてあるように思います。 動かせる環境が限定されていることと、それに加えて新しいソフトであるため、参考文献がほとんどないのが、残念なところです。

ROS2はご存知のようにロボット制御のためのミドルウェアです。

今回、Isaac Simが2021年10月のリリースでROS2に対応したとのことで、ROS2 + Isaac Sim のトレンディな組み合わせで、シミュレーションを試してみます。

ちなみにシミュレーションといっても、ちょっと動かせたレベルですので、ご了承の上で見ていただければと思います。

2. 要件

最小が↑になります。GPUAMDRadeonシリーズは対応していません。

筆者の環境は↑の最小要件でしたが、遅延&処理落ちが多発しました。本格的に使いたい人は、余裕のあるスペックを用意してください。

3. 環境構築

Nvidiaの公式チュートリアルに従って行けば、基本的にはいけるのですが、説明が少なくわかりにくいので、少し記録を残します。
公式チュートリアル:

docs.omniverse.nvidia.com

↓も検索するとヒットしますが、こちらは使いませんでした。

https://docs.nvidia.com/isaac/isaac/doc/getting_started.htmldocs.nvidia.com

3.1 Isaac simの環境構築

  1. そもそもNvidiaのドライバーをインストールしていないという人は、公式から最新のドライバーをダウンロードしておきます。
    nvidia toolkit, Docker もない人はインストールします。
  2. ダウンロードができたら、↓URLより、ランチャーアプリを適当なディレクトリにダウンロードします。
    ダウンロードの際、Nvidiaのメンバー登録(無料)が必要です。 www.nvidia.com

  3. ダウンロードしたら、パーミッションを変更して、実行します。

cd [インストールしたディレクトリ] &&
sudo chmod +x omniverse-launcher-linux.AppImage &&
./omniverse-launcher-linux.AppImage

うまく立ち上がると、以下のような画面になります。
ここまでで、Isaac simのセットアップは完了です。

3.2 ROS2の環境構築

Dockerコンテナ上に構築します。

github.com

を参照します。
他サイトにもROS2の環境構築のチュートリアルはありますが、後に他コンポーネントと連携する際に↑のURLで提供されているDockerコンテナが必須になります。
githubのReadmeの通りに動かします。

git clone https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_common
scripts/run_dev.sh <path to workspace>

↑のpath to workspaceですが、指定しなくても実行はできますが、指定した方が色々楽です。

スクリプトを実行すると、以下のようにシェルに入れます。

最後にシェルから以下のコマンド実行すれば、完了です。

colcon build && . install/setup.bash

4. ロボットモデルを生成

環境構築ができたら、Isaacsimを起動してみます。 今回はFrankaを使用します。 Create -> Robots -> From Library -> Maniplations -> Franka の順に選択し、ロボットを生成します。
これをROS2で動かします。
生成されたロボットに対して、Create->ROS->Jointstateと進み、ROS_Jointstateをアタッチします。

また、ROS2で動かすため、Windows -> extentions より、ROSを無効化し、ROS2 Bridgeを有効化します。 これでIsaac sim側の準備は完了です。

5. Publisherを作成

公式にはROS1向けのサンプルコードしかないので、今回をROS2向けに書き換えました。
書き換えたコードは以下になります。

import rclpy
from rclpy.node import Node
from sensor_msgs.msg import JointState
import numpy as np
import time
import math

class Talker(Node):
    def __init__(self):
            super().__init__("ros_simu")
            self.count = 0
            self.time_start = time.time()
            self.pub = self.create_publisher(JointState, "/joint_command",0)
            self.time_period = 1.0
            self.tmr = self.create_timer(self.time_period, self.callback)

    def callback(self):
        self.count += 1

        joint_state = JointState()
        num_joints = len(joint_state.name)

        default_joints = [0.0, -1.16, -0.0, -2.3, -0.0, 1.6, 1.1, 0.4, 0.4]
        max_joints = np.array(default_joints) + 0.5
        min_joints = np.array(default_joints) - 0.5

        joint_state.name = [
        "panda_joint1",
        "panda_joint2",
        "panda_joint3",
        "panda_joint4",
        "panda_joint5",
        "panda_joint6",
        "panda_joint7",
        "panda_finger_joint1",
        "panda_finger_joint2",
        ]

        joint_state.position = (np.sin(time.time() - self.time_start) * (max_joints - min_joints) * 0.5 + default_joints).astype(np.float32).tolist()
        self.pub.publish(joint_state)

def main():

    rclpy.init()
    node = Talker()
    rclpy.spin(node)
    node.destroy_node()
    rclpy.shutdown()

if __name__ == "__main__":
    main()

↑のjoint_state.positionなどのパラメータは適当です。また、Franka向けに書いているので、違うモデルを使う人は、ジョイントの数などを適宜書き換えてください。

6. 制御してみる

端末を2つ起動し、

scripts/run_dev.sh <path to workspace> 
colcon build && . install/setup.bash

を実行して、 それぞれシェルに入ります。1つ目のシェルで、↑のPublisherを実行します。 2つ目の端末で以下コマンドで、動作の様子を確認します。

ROS2 echo /joint_states

また、ファイアウォールを設定して、コンテナとIsaac sim 間でやりとりができるようにしておきます。

youtube.com

動きました↑。右下端末の出力により動作のパラメータの変化が確認できます。

7. 感想

↑の動画ですが、PCの負担を少しでも軽くするため、ロボットのみのシミュレーション環境でやっています。 これ以上、すこしでも背景やロボットを追加すると、スペックが足りず筆者の環境では動かなくなってしまいました。↑の動画のように動かすだけでもすでにPCファンが爆音です。

もしリソース余裕ある人いたら、↓のモデル動かしてみると、もっと面白いんじゃないかと思いました。
【物体認識】 https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_dnn_inference
【セグメンテーション】 https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_image_segmentation


今回他に何人かの先生にも褒められました!
正直そんなに大したことはしていないですが、 嬉しかったです。

終わり