ロボットシステム学2016第12回
Fri Jan 6 21:41:02 JST 2017 (modified: Fri Nov 29 17:21:21 JST 2019)
views: 1087, keywords:
ロボットシステム学
第12回
上田 隆一
2017年1月11日@千葉工業大学
課題1補足・雑感
- 元のコードを書いた人(この場合は私)の名前は残しておきましょう。
- コピペが下手くそな人が
- レイアウトが崩れたり1行飛ばしになっている
- ちゃんとGitHubのforkやダウンロード機能を使いましょう
- 私にとっては仕事なので「お忙しいところ恐縮で・・・」とメールに書く必要はないっす。
- これは課題なので、変に動画を凝るくらいならコードの方に工夫が欲しいところ。
- 何が求められているかはなかなか相手(私)からは聞き出せないので厄介だなとは思いますが・・・
- 調べ物した人はリファレンスも欲しいところ
本日の内容
- 通信・暗号(その2)
- ROS(今回は紹介だけ)
- Raspbian -> Ubuntu
暗号
- 通信において重要な役割
- 暗号化していないパケットの内容は簡単に覗ける
- インターネットのパケットはどこを通るか分からない
- 通販サイトで暗号化していないとどうなるか?
- ネットワークカメラで暗号化していないとどうなるか?
- 暗号化の方式
- ざっくり分類: 共通鍵暗号方式、公開鍵暗号方式
共通鍵暗号方式
- 基本的にはパスワードの延長線上にあるもの
- データを鍵で暗号化し、同じ鍵で復号
- 送信者と受信者が同じ鍵を持つ
- 通信の時の問題: どうやって鍵を交換するか?
- 社会的には「別のメールでパスワードを送ります」等、 本当にそれで良いのかいまいち謎な方法でごまかしている
公開鍵暗号方式
- 二つの鍵を使う
- 「公開鍵」と「秘密鍵」
- 公開鍵
- 暗号化に用いる。人に見せても良い
- 秘密鍵
- 複号に用いる。人に見せてはいけない
- 誰でもデータを暗号化できるが、復号できるのは秘密鍵の所有者のみ
セキュアシェル(SSH)
- セキュアシェル(SSH)
- 遠隔の計算機と暗号通信をするためのプロトコル
- コマンドのssh(1) はセキュアシェルを使って遠隔の計算機と通信するためのもの
- 特に暗号化が必要のないところでも使うことになっている
- かつてはrshというものがあったが使わないことになっている
サーバへのssh接続
- パスワードを使う場合
- パスワードを送る前にサーバからクライアントへ公開鍵というものが送られる
- クライアントは以下をサーバに送信
- もらった公開鍵で通信用の共通鍵を暗号化したもの
- パスワードを共通鍵で暗号化したもの
- サーバは自身の秘密鍵でもらった共通鍵とパスワードを復元共通鍵で通信開始
SSHの鍵認証
- パスワードの代わりに公開鍵を使う
- 方法
- クライアント側(自分のノートPC等)で秘密鍵と公開鍵を作る(Windowsの場合はこちら)
$ mkdir .ssh $ chmod 700 .ssh/ $ cd .ssh/ $ ssh-keygen ###いろいろ聞かれるが基本returnで (一度はちゃんと読みましょう)###
- 自分の公開鍵をサーバ側(Raspberry Pi等)のauthorized_keysに登録
-
###サーバのIPアドレスにscp### $ scp ~/.ssh/id_rsa.pub pi\@192.168.?.?:~/ $ ssh pi\@192.168.?.? $ cat id_rsa.pub >> .ssh/authorized_keys $ chmod 600 .ssh/authorized_keys
- クライアント側(自分のノートPC等)で秘密鍵と公開鍵を作る(Windowsの場合はこちら)
ROS: robot operating system
- ロボットのソフトウェアコンポーネントを作って
動作させるためのフレームワーク/ミドルウェア
- OSでは無い
- 発祥: 2000年代後半、Willow Garage社
- BSDライセンス
- Linux(Ubuntu)上での動作がデフォルト
- サイト
- 公式ページ: http://www.ros.org/
- マニュアル等: http://wiki.ros.org/ja
どんなものか
- 本体: プロセス間通信をつかさどる
- プロセス同士をpublish-subscribeモデルやサービスでつなぐ
- XML-RPC等を利用
- 通信するデータに型
- 周辺
- ビルドシステム、パッケージ管理、テストツール、・・・
と書いてもよくわからんのでこちらで動かしてみます
デモ
- カメラの画像をブラウザから見る
- 手順
- ROS・ワークスペースのセットアップ(来週)
- 必要なパッケージのダウンロードとビルド
-
$ sudo apt install ros-kinetic-cv-camera $ sudo apt install ros-kinetic-cv-bridge $ cd ~/catkin_ws/src $ git clone git\@github.com:RobotWebTools/mjpeg_server.git $ cd .. $ catkin_make
-
- 見る
-
$ roscore & $ rosrun cv_camera cv_camera_node & $ rosrun mjpeg_server mjpeg_server ブラウザでhttp://<IPアドレス>:8080/stream?topic=/cv_camera/image_raw
-
さらに便利に使う
- ROS化されているキラーコンテンツ
- slam_gmapping, ナビゲーションメタパッケージ
- 地図生成(次のページにデモ)、位置推定、経路生成
- MoveIt!
- 腕の動作計画 腕先の位置を入力→関節角を計算(逆運動学)
- その他、様々なハード・ソフトがROS化
- slam_gmapping, ナビゲーションメタパッケージ
ROSを使ったSLAMの様子
- ポイント: SLAMのコードは書いてない
- aptでSLAM(Gmapping)のコードが入る
- デッドレコニングのコードをちょっと書いただけ
ROSを使ったナビゲーションの様子
- SLAMをした後のナビゲーション
- 自己位置推定、障害物回避、...
- 足回りもROSのパッケージ化
イメージファイルからの OSのセットアップ
- 13,14回はROSを使います
- OSをRaspbianからUbuntuに変えた方が良い
- OSのイメージ
方法
- Linux環境
$ xzcat ubuntu-16.04-preinstalled-server-armhf+raspi3.img.xz | sudo dd bs=1MB of=/dev/(microSDカードのデバイスファイル)
- Mac
$ xzcat ubuntu-16.04-preinstalled-server-armhf+raspi3.img.xz
| sudo dd bs=1m of=/dev/(microSDカードのデバイスファイル)
- Window
- 何かツールを使う(よくわからない)
- 仮想マシンを使う
- アダプタを使ってラズパイのUSBにmicroSDをさして操作
インストール後の作業1
- カーネルをアップデートすると動かないという
よろしくない状況なので、
カーネルのアップデートを止める
-
$ echo linux-image-raspi2 hold | sudo dpkg --set-selections $ echo linux-headers-raspi2 hold | sudo dpkg --set-selections
-
- 「hold」になっていることを確認
-
$ dpkg --get-selections | grep hold linux-headers-raspi2 hold linux-image-raspi2 hold
インストール後の作業2
- これをしておいた方が良さそう
-
sudo apt purge cloud-init
- ROSのインストール
- 次のリポジトリにインストーラ
- ryuichiueda/ros_setup_scripts_Ubuntu16.04_server
- 中にあるシェルスクリプトを step0.bash, step1.bash, locale.ja.bash と実行すればOK
- 次のリポジトリにインストーラ