ロボットシステム学2016第12回

Fri Jan 6 21:41:02 JST 2017 (modified: Fri Nov 29 17:21:21 JST 2019)
views: 708, keywords:

  このエントリーをはてなブックマークに追加 
   

ロボットシステム学

第12回

上田 隆一

2017年1月11日@千葉工業大学

課題1補足・雑感

  • 元のコードを書いた人(この場合は私)の名前は残しておきましょう。
  • コピペが下手くそな人が
    • レイアウトが崩れたり1行飛ばしになっている
    • ちゃんとGitHubのforkやダウンロード機能を使いましょう
  • 私にとっては仕事なので「お忙しいところ恐縮で・・・」とメールに書く必要はないっす。
  • これは課題なので、変に動画を凝るくらいならコードの方に工夫が欲しいところ。
    • 何が求められているかはなかなか相手(私)からは聞き出せないので厄介だなとは思いますが・・・
  • 調べ物した人はリファレンスも欲しいところ

本日の内容

  • 通信・暗号(その2)
  • ROS(今回は紹介だけ)
  • Raspbian -> Ubuntu

暗号

  • 通信において重要な役割
    • 暗号化していないパケットの内容は簡単に覗ける
    • インターネットのパケットはどこを通るか分からない
    • 通販サイトで暗号化していないとどうなるか?
    • ネットワークカメラで暗号化していないとどうなるか?
  • 暗号化の方式
    • ざっくり分類: 共通鍵暗号方式、公開鍵暗号方式

共通鍵暗号方式

  • 基本的にはパスワードの延長線上にあるもの
  • データを鍵で暗号化し、同じ鍵で復号
  • 送信者と受信者が同じ鍵を持つ
  • 通信の時の問題: どうやって鍵を交換するか?
    • 社会的には「別のメールでパスワードを送ります」等、 本当にそれで良いのかいまいち謎な方法でごまかしている

公開鍵暗号方式

  • 二つの鍵を使う
    • 「公開鍵」と「秘密鍵」
  • 公開鍵
    • 暗号化に用いる。人に見せても良い
  • 秘密鍵
    • 複号に用いる。人に見せてはいけない
  • 誰でもデータを暗号化できるが、復号できるのは秘密鍵の所有者のみ

セキュアシェル(SSH)

  • セキュアシェル(SSH)
    • 遠隔の計算機と暗号通信をするためのプロトコル
    • コマンドのssh(1) はセキュアシェルを使って遠隔の計算機と通信するためのもの
  • 特に暗号化が必要のないところでも使うことになっている
    • かつてはrshというものがあったが使わないことになっている

サーバへのssh接続

  • パスワードを使う場合
    1. パスワードを送る前にサーバからクライアントへ公開鍵というものが送られる
    2. クライアントは以下をサーバに送信
      • もらった公開鍵で通信用の共通鍵を暗号化したもの
      • パスワードを共通鍵で暗号化したもの
    3. サーバは自身の秘密鍵でもらった共通鍵とパスワードを復元共通鍵で通信開始

SSHの鍵認証

  • パスワードの代わりに公開鍵を使う
  • 方法
    1. クライアント側(自分のノートPC等)で秘密鍵と公開鍵を作る(Windowsの場合はこちら
      $ mkdir .ssh
         $ chmod 700 .ssh/
         $ cd .ssh/
         $ ssh-keygen
         ###いろいろ聞かれるが基本returnで (一度はちゃんと読みましょう)###
    2. 自分の公開鍵をサーバ側(Raspberry Pi等)のauthorized_keysに登録
    3. ###サーバの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

ROS: robot operating system

  • ロボットのソフトウェアコンポーネントを作って 動作させるためのフレームワーク/ミドルウェア
    • OSでは無い
  • 発祥: 2000年代後半、Willow Garage社
  • BSDライセンス
  • Linux(Ubuntu)上での動作がデフォルト
  • サイト
    • 公式ページ: http://www.ros.org/
    • マニュアル等: http://wiki.ros.org/ja

どんなものか

  • 本体: プロセス間通信をつかさどる
    • プロセス同士をpublish-subscribeモデルやサービスでつなぐ
    • XML-RPC等を利用
    • 通信するデータに型
  • 周辺
    • ビルドシステム、パッケージ管理、テストツール、・・・

と書いてもよくわからんのでこちらで動かしてみます

デモ

  • カメラの画像をブラウザから見る
  • 手順
    1. ROS・ワークスペースのセットアップ(来週)
    2.  必要なパッケージのダウンロードとビルド
      • $ 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
    3. 見る
      • $ 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化

ROSを使ったSLAMの様子

  • ポイント: SLAMのコードは書いてない
    • aptでSLAM(Gmapping)のコードが入る
    • デッドレコニングのコードをちょっと書いただけ

ROSを使ったナビゲーションの様子

  • SLAMをした後のナビゲーション
    • 自己位置推定、障害物回避、...
  • 足回りもROSのパッケージ化

イメージファイルからの 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のインストール