IPoE(v6plus)で速度改善 (RTX1210)

やりたいこと

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

用語についてすこし

IPv4: Internet Protocol version 4
IPv6: Internet Protocol version 6
IPoE(IPoE方式): Internet Protocol over ethernetの略。既存のPPPoe方式と比べて、以下の特徴がある。

  • 基本的にIPv6向けの技術
  • ID,Passwordを用いた認証を行わない
  • NTT-プロバイダ間の網終端装置を通さず、直接インターネットにつなぐため、輻輳が起きにくい上、PPPoeに速度面で優れる
  • 理論上最速は10Gbps
  • IPv6向けの技術であるが、IPv6 over IPv4技術を用いることで、ipv4のみに対応したホストへの接続が可能

HGW: ホームゲートウェイの略、ONUルーター機能を追加し、また光電話にも対応させたもの

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) | NTT Com お客さまサポート

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

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

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

IPv6で繋がらない

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

その他

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

参考サイト

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

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

冷蔵庫製作

最近暑い

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

Amazon.co.jp: 【SANCTUS】 ペルチェ式 ペルチエ式 DC12V 冷却ユニット 冷却効果大 ポータブル 保温庫 温冷庫 冷温庫 冷蔵庫 携帯冷蔵 アウトドア に 大型ヒートシンク搭載モデル (シルバー) : 大型家電

準備

材料を用意

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

断熱材について

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

サーモスタットについて

過冷却を防ぎます。ペルチェ素子と直列に繋いで、5℃以下になったらスイッチがオフになるように設定します。 Amazon.co.jp: Ren He DC 12Vサーモスタットサーモスタット温度熱センサスイッチ-50~110℃ 3個 : 産業・研究開発用品

電源について

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

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

今回ペルチェ素子の方は12V5A必要とあったので、かなり電気を食べてます。

ATX電源検証ボード 24/20ピン コンピュータPC用 ATX電源ユニットモジュール ATX電源ベンチ 電源検証ボード 電源取り出し トップブレイク アウトボードモジュールアダプタ | ASHA | 電源ユニット 通販

製図

図面を引きます。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

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

docs.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


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

終わり

棚(スリムラック)を作る

モデリング

なんとなくこんな感じで(途中で面倒くさくなった) 

高さ180cm,横約40cm,奥行き30cmのほぼロッカーみたいなサイズ感です。

棚にはA4の紙が入るトレー(350*260)と3Dプリンター(約12kg)を載せる予定。

材料

底板と棚板は家にあった板を使用、それ以外は全部ホームセンター、その他やすり(200番,400番くらい)なども買っておきます。

  • 背板 1800*16*400(黒化粧板) ×1 
  • 側板 1800*18*300(黒化粧板) ×2 
  • 棚柱+棚受け 1200 ×4
  • ビス
    • 3.8*5.2 ×36
    • 3.8*4.2 ×24
  • 隅金(三方金具) ×2
  • サーフェイサー
  • 白色塗料
  • その他小道具

ケガキ

鉛筆がちょうどなかったので、シャーペンでやります。写真はなかった。

棚板

化粧板を切って行きます。電動はないので、普通ののこぎりで頑張ります。これはこれで物を作っている感じがしてそれなりに楽しい(強がり)。切断面はやすりをかけておきます。

鋸は刃全てを使って、引くときに力を入れるように切るのが良いらしいです。

塗装

せっかくなので、底板と棚板は塗装します。
できれば

k-hobby.com

みたいな感じで、大理石風をやってみたかったけど、予算オーバーしそうなのでここまではやりません。

化粧板はそのままだと塗料が乗りにくいので、サーフェイサー(下地)を吹きます。
乾かしてる間に、次の棚板を切っておきます。 サーフェイサーが乾いたら、白で塗装していきます。ムラができないように塗っているつもりですが、どうやっても多少はでますね、、

棚柱を固定

棚柱は4本使います。すべてが底板から同じ高さになるように、、

ビス打ち

背板と底板、側板をそれぞれ接続します。 垂直クランプで板を固定し、木割れしないよう、まっすぐ慎重にビスを打っていきます。 適当に150間隔で打ちます。

写真にはないですが、ビスは全部黒色もつまらないので、銀色も使ってみました。

隅金

なんとなく強度が心配なので、隅金で補強します。

仕上げ

最後にほこりとゴミをとって、アルコールで全部拭きます。
その後、棚受けをつけて、棚板載せて終わり。

サイズもぴったり!いい感じじゃない?

感想

結構うまくできた気がする。
のこぎりうまくなりたい。

終わり

ピンホールカメラを0から作って現像まで

まえがき

ピンホールカメラって何?

ざっくりいうと、原始的なカメラの一種で、蓋をした(密閉した)箱に小さな穴(ピンホール)を開け、そこから光をいれて、感光紙に感光させることで、写真を撮る仕組みのカメラのことです。
原理的に、ピンぼけが発生しにくいけど、なんとなく暗い感じの写真になります。
記事の最後に参考文献を記載したので、詳しくはそちらを見てください。
撮った写真は写真屋に持っていけば現像してくれるらしいですが、今回は現像も自分でやります。

上手くいくと、下のような写真が撮れます。


ピンホールカメラの原理

使った物

(木)箱

これがカメラになります。ダンボールでも代用可らしい
ようは光が入らないように密閉できる箱であり、かつ内部を黒く塗ることができるならば形状とわず大丈夫(多分)

感光紙(印画紙)

これがフィルムになります。ここに光をあて、写真をとります。
25枚/2000円

https://www.yodobashi.com/product/100000001005560457/)

現像液

写真を浮かびあがらせます(現像します)。
今回はコレクトールを使用します。

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

停止液

現像液の反応を止めます。
料理用お酢で代用できるけど、1本まるまる使うことになるので、今回は濃度50%の酢酸を購入

https://www.yodobashi.com/product/100000001000485902/

定着液

現像された写真の粒子を固定します。 スーパーフィジックス 有名なやつ

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

水洗促進剤

最後印画紙を水洗いする時に使います。
66円@amazon これだけ異様に安すぎる、、

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

黒色スプレー

ピンホールカメラの内部はカメラ内部での光の反射を防ぐため、黒く塗装する必要があります。
サークルの部室にありました。

ポリタンク+ペットボトル

余った溶液保管用、ポリタンクが足りなかったので、ペットボトルで一部代用

金属片

これに穴を開けてピンホールにします。 缶詰の空き容器を活用
洗ってハサミで切り取った
ゴミをリサイクルしててえらい!

その他小道具

ピンホールカメラを作成

1 箱と黒スプレーを用意します。

箱は大体20cm×20cm×5cm程度の蓋付き木箱、これを紙粘土とガムテープで少し修理しました。

2 箱と蓋の内側を黒く塗装します。

箱の内部が少しでも白いと、撮影時に光が入ったとき、そこで光が反射するので、真っ黒にします。

3 塗装が終わったら、ピンホールを作っていきます。

まず、箱の蓋の中心に、錐で直径1mmくらいの穴を開けます。
錐がないので、適当なドライバーで代用

次に、金属片にも、穴を開けます。この穴がピンホールになります。
この穴のサイズは、小さければ小さいほど、ぼけの少ない写真になります。
錐がないので(2回目)、画鋲で穴を開けました。

4 終わったら、箱の蓋の裏側に、金属片を穴が重なるように固定します。

こんな感じ

5 箱の蓋のおもて面の穴を、黒いビニールテープでおおいます。

完成!これがピンホールカメラになります!

撮影の前に、上のようにピンホールカメラ内部にガムテープを丸めて貼っておきます。
その後、そこに感光部(つるつるの方)が内部を向くように、暗室(重要)で、印画紙をセットしておきます。箱の蓋もしておきます。

現像準備

1 用意

コレクトール、50%酢酸、スーパーフィジックス、お湯と、余った溶液を入れるポリタンクを用意します。

2 現像液を作ります。

コレクトールは粉末になっているので、お湯に溶かして、現像液にしていきます。
お湯は40℃以上にし、撹拌しながら、ゆっくり粉末を加えて溶かします。

3 停止液を作ります。

水1Lに対して、50%酢酸30mLを加え、撹拌します。匂いがすっごい、、

4 定着液を作ります。

スーパーフィジックス1に対し、水3の割合で混合します。

5 水洗用液を作ります。

水2Lに水洗促進剤すべて入れて、撹拌します。

6 液をパッドに入れます。

現像にはどれも500mlくらいあれば十分でした。あまりはポリタンクにいれて保管します。
後に暗室で作業しやすいよう、竹製ピンセットもそばにおいておきます。

撮影

いよいよ実際に撮影します。よく晴れた屋外がいいっぽいです。

ピンホールカメラを固定し、ピンホールカメラの表の蓋につけた黒のテープをはずします。

黒のテープをはずすと、箱内部に光が入り、印画紙が感光し、写真がとれます。

露光時間は快晴なら1分くらいやれば十分だと思います。露光させすぎると真っ黒に、させなさすぎると真っ白になります。
撮影対象は何でも面白いですが、動かないものをカメラを固定して撮った方が上手く撮りやすいです。
撮影時の写真は撮り忘れた。

現像

現像します。この作業は、暗室で行います。

ピンホールカメラから印画紙をピンセットで慎重にとりだし、先程用意したパッドに、ピンセットを使って、印画紙を現像液=>停止液=>定着液の順で、浸していきます。 このとき少しでも印画紙に光が当たってしまったら、撮り直しになります(3回ほど撮り直した)。

今回の薬剤の場合、それぞれ90秒、30秒、3分浸していきます。

それぞれ決めた時間ひたしたら、部屋の電気をつけ、印画紙を水洗液につけ、水洗します。
最後、水道水で洗って乾かして終わり。 ↑は撮影に失敗したやつ、露光時間が長すぎて、真っ黒になった、、(泣)。

完成

かろうじて何かが写った写真ができました。
露光時間の調整が難しい、、まあ何か写っただけよしということで、、

このあとネガポジ反転↓という作業がありますが、上手く撮れず萎えたのでパス

反省

上手く写真が撮れるかは、基本的に
・露光時間
・撮影対象
・ピンホールの大きさ
によります。今回、ピンホールを画鋲で開けたため、ピンホールにムラがありました。 その結果、ピンホールを通る光が均一にならなかったため、乱れた写真になったみたいです、、

感想

楽しかったのでヨシ! いつかリベンジしたい!

参考文献

www.honda.co.jp

benesse.jp

www.nhk.or.jp

handmade.atelier-mati.com