<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Tokoro&#39;s Tech-Note</title>
  
  
  <link href="/atom.xml" rel="self"/>
  
  <link href="http://blog.tokor.org/"/>
  <updated>2021-01-04T01:00:57.015Z</updated>
  <id>http://blog.tokor.org/</id>
  
  <author>
    <name>Tokoro</name>
    
  </author>
  
  <generator uri="http://hexo.io/">Hexo</generator>
  
  <entry>
    <title>迷路探索ライブラリをRust移植するために調べたことのメモ</title>
    <link href="http://blog.tokor.org/2021/01/04/%E8%BF%B7%E8%B7%AF%E6%8E%A2%E7%B4%A2%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%82%92Rust%E7%A7%BB%E6%A4%8D%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AB%E8%AA%BF%E3%81%B9%E3%81%9F%E3%81%93%E3%81%A8%E3%81%AE%E3%83%A1%E3%83%A2/"/>
    <id>http://blog.tokor.org/2021/01/04/迷路探索ライブラリをRust移植するために調べたことのメモ/</id>
    <published>2021-01-04T11:00:00.000Z</published>
    <updated>2021-01-04T01:00:57.015Z</updated>
    
    <content type="html"><![CDATA[<h2>この記事の目的</h2><p>個人的な備忘録です．読んでも有用な情報はあまりないと思います．</p><p>えーと，<a href="/2020/12/23/%E9%BA%BB%E5%A9%86%E8%B1%86%E8%85%90%E3%82%92%E4%BD%9C%E3%82%8D%E3%81%86-Micro-Mouse-AdC-2020/">前回の記事</a> を書いたおかげでブログ更新のハードルが下がりました．アホみたいな記事を書くのもいいもんですね．</p><h2>どうやらRustがアツいらしい</h2><img src="/2021/01/04/迷路探索ライブラリをRust移植するために調べたことのメモ/rust_logo.png" title="Rustのロゴ"><p>どうやらRustがアツいらしいということは<a href="https://twitter.com/tokoro10g/status/569462712230502401" target="_blank" rel="noopener">ずいぶん前</a>から見たり聞いたりしていたのですが，当時は仕様が安定していなかったり未実装の機能が多かったりと，<a href="https://twitter.com/tokoro10g/status/599153615337431040" target="_blank" rel="noopener">開発しづらいイメージ</a>が先行してしまい，結局2020年に入るまでいじらずじまいでいました．ところが最近になって<a href="https://www.wantedly.com/projects/523485" target="_blank" rel="noopener">ROS互換のフレームワークをRust実装しているらしいロボットベンチャー</a>が現れたり，STM32をはじめとする <a href="https://github.com/rust-embedded/cortex-m" target="_blank" rel="noopener">ARM Cortex-M 系マイコン向けのサポート</a>の整備が急速に進んだりしており，「乗るしかない！このビッグウェーブに！」と思い現在に至るわけです．</p><h3>どうアツいのか</h3><p>散々ほかのサイトでも解説されていると思いますが，私の知る限りのRustのアツい点を羅列すると，</p><ul><li>C, C++と同様にバイナリにコンパイルする言語であること (マイコン使いには重要)</li><li>標準装備のビルドシステム(cargo)やテストフレームワークが強力であること</li><li>オブジェクトの所有権が明確であること (moveした変数にアクセスしようとするとコンパイル時に怒られる)</li><li>所有権の制約を利用してスレッド安全性をコンパイル時に担保できること (マイコンでは使わないけどすごい)</li><li>C++20のConceptsに相当する，Boundsが実装されていること</li></ul><p>などなど，高度(?)なアルゴリズムをマイコンに載せたい私としては，嬉しいことが満載なのです．</p><h2>移植にあたって</h2><img src="/2021/01/04/迷路探索ライブラリをRust移植するために調べたことのメモ/amaze_logo.png" title="libamazeのロゴ"><p>拙作の迷路探索ライブラリの移植を目論んでいます．</p><p><a href="https://github.com/tokoro10g/libamaze" target="_blank" rel="noopener">libamaze</a></p><p>このライブラリは，迷路やグラフの情報の格納に必要な領域をコンパイル時に計算して静的にメモリ確保することや，グラフ表現やソルバ(A*アルゴリズム，幅優先探索など)の付け替えが可能であることが特徴です．途中まで順調に開発が進んでいたのですが，設計に致命的なミスがあったため結局完成しないまま放置されています(ひどい)．</p><p>そういえばこのライブラリについての記事も書いてない(ひどい)．</p><h3>まずはRustの基礎の習得</h3><p>まずはRustを勉強します．</p><p><a href="https://doc.rust-lang.org/book/index.html" target="_blank" rel="noopener">The Rust Programming Language</a> を読んで，環境の構築(1章)と基本的な文法の習得(2,3章)を行いました．こいつはとにかく書き方が<s>冗長</s>丁寧なので，暇なときに読む分には良いと思います．はじめはなかなか先に進まず，英語を読むスピードが遅いからかなと思っていましたが，どうやらそうではなさそうだと気づいた私は3章で脱落しました．戦略的撤退です．</p><p>代わりに <a href="https://github.com/rust-lang/rustlings" target="_blank" rel="noopener">rustlings</a> という入門例題集を一気にやりました．これを終えた頃には，なんとか調べながらRustを書けそうな気がしてきました．</p><blockquote class="twitter-tweet"><p lang="ja" dir="ltr">rustlings完走 <a href="https://t.co/ujfRm7NGuP" target="_blank" rel="noopener">pic.twitter.com/ujfRm7NGuP</a></p>&mdash; ねこねこきーつね♪ (@tokoro10g) <a href="https://twitter.com/tokoro10g/status/1345311374113574912?ref_src=twsrc%5Etfw" target="_blank" rel="noopener">January 2, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> <p>効率厨の私としては，bookはさらっと眺めてからrustlingsを進めつつ読んで，最後にまたbookに戻って補強すると良いのかなと思いました．でも最初からbookを読んだほうが楽という方もいるかもしれません(私は読んだだけでは頭に入らないもので…)．</p><p>上級者には <a href="https://github.com/dtolnay/rust-quiz" target="_blank" rel="noopener">Rust Quiz</a> なるマニアックな問題集もあるらしいので，モリモリ書けるようになったらやりたいです．</p><h3>ではRustでどう実現するか</h3><p>Rustの基礎が身についたところで，libamazeの2つの特徴に絞って，Rustでどう実現するか考えていきます．</p><p><strong>グラフ表現やソルバの付け替え</strong></p><p>Rustには継承の概念がありません．その代わりに，グラフやソルバのtraitsを定義して，boundsとして使ってやればよいはずです．<br>(用語の使い方が怪しい… 今のところそのように理解していますが，あってるよね…？)</p><p><strong>静的アロケーション</strong></p><p>こちらの要件が少し厄介かもしれません．組み込み向けのRustについては， <a href="https://docs.rust-embedded.org/book/intro/index.html" target="_blank" rel="noopener">The Embedded Rust Book</a> に詳しくまとまっています(まだ全部読めていない…)．これによると，ビルトインの固定長配列を利用するのはもちろんですが，VecやHashMapを利用したい場合は <a href="https://crates.io/crates/heapless" target="_blank" rel="noopener">heapless</a>を利用するのが一般的な解決方法のように見えます．</p><p>しかし，ここで別の問題があります．stable版のRustではC++でいうテンプレート引数に定数を渡すことができないのです．</p><p>対応するものは，現状unstableなconstant genericsという機能ですが，執筆時点ではconstant genericsは指定された定数を演算して利用できないという機能の制約があります．libamazeでは，迷路のサイズから自動的にグラフのノード数を計算したり，サイズの整合性をチェックしたりする機能を実装しており，これをRustで再現するのは難しそうです．</p><h3>以上を受けて移植の方針</h3><ul><li>マイコンでの動作を確実にするため，<code>no_std</code> を前提としてコードを書く</li><li>迷路サイズはハードコーディングした定数とし，グラフのサイズもそこから計算する(迷路サイズはライブラリ使用側から変更できない，もしくはコンパイル時にコマンドラインやファイルで指定する)</li><li>(前回の反省: 結合して動作するコードよりも先に単体テストをしっかり書く)</li></ul><p>Constant genericsで実現しようとした迷路・グラフのサイズのコンパイル時計算ですが，<a href="https://crates.io/crates/typenum" target="_blank" rel="noopener">typenum</a> crate を使ったり，マクロを組んだりすれば実現できるようです．しかし，いずれもハック的な解決方法でしっくり来なかったため，この機能については諦めることにし，迷路サイズは定数(幅・高さ32マス)とすることにしました．振り返ってみれば，C++版libamazeもこの <code>W</code> というパラメータのせいで無駄に複雑になっていた節があるので，切り捨てて正解のような気がします．</p><p>また，libamazeでは迷路データの壁有無フラグの格納にビットフィールドを利用していましたが，これは <a href="https://crates.io/crates/modular-bitfield" target="_blank" rel="noopener">modular-bitfield</a> を使えば実現できそうです．</p><h2>頑張るぞい</h2><p>(๑•̀ㅂ•́)و✧</p><p>C++17漬けになってしまった私ですが，これでようやくモダンな言語に入門できそうです．進捗状況はなるべく記事にしていきたいと思うので，サボってたらつついてください．</p><p>リポジトリの予定地: <a href="https://github.com/tokoro10g/amaze" target="_blank" rel="noopener">tokoro10g/amaze</a></p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h2&gt;この記事の目的&lt;/h2&gt;
&lt;p&gt;個人的な備忘録です．
読んでも有用な情報はあまりないと思います．&lt;/p&gt;
&lt;p&gt;えーと，&lt;a href=&quot;/2020/12/23/%E9%BA%BB%E5%A9%86%E8%B1%86%E8%85%90%E3%82%92%E4%BD%9C%
      
    
    </summary>
    
      <category term="Rust" scheme="http://blog.tokor.org/categories/Rust/"/>
    
    
      <category term="libamaze" scheme="http://blog.tokor.org/tags/libamaze/"/>
    
  </entry>
  
  <entry>
    <title>麻婆豆腐を作ろう [Micro Mouse AdC 2020]</title>
    <link href="http://blog.tokor.org/2020/12/23/%E9%BA%BB%E5%A9%86%E8%B1%86%E8%85%90%E3%82%92%E4%BD%9C%E3%82%8D%E3%81%86-Micro-Mouse-AdC-2020/"/>
    <id>http://blog.tokor.org/2020/12/23/麻婆豆腐を作ろう-Micro-Mouse-AdC-2020/</id>
    <published>2020-12-23T11:01:12.000Z</published>
    <updated>2020-12-22T16:38:44.786Z</updated>
    
    <content type="html"><![CDATA[<p>この記事は，<a href="https://adventar.org/calendars/5829" target="_blank" rel="noopener">Micro Mouse Advent Calendar 2020</a>の23日目の記事です．</p><p>昨日はアニキの<a href="http://anikinonikki.cocolog-nifty.com/blog/2020/12/post-1477f5.html" target="_blank" rel="noopener">「新・教材トレーサー」</a>でした．</p><h2>麻婆豆腐を作ろう</h2><img src="/2020/12/23/麻婆豆腐を作ろう-Micro-Mouse-AdC-2020/mapotofu.jpg"><p>さて，皆さんが真面目な技術記事を書いているところ大変恐縮なのですが，私の個人的な趣味の記事を書かせていただきます．<s>今年はマイクロマウスについて何もやっていないのです・・・</s></p><p>突然ですが，あなたにとってマイクロマウスの開発に最も必要なものは何でしょうか？</p><p><em>― 技術への情熱</em><br><em>― 互いに切磋琢磨する仲間</em><br><em>― エンコーダ付きモータを躊躇なく買える資金力</em></p><p>など，様々なものが思い浮かんできそうですね．</p><p>わたしの場合はというと・・・ そう，うまい飯です．「ロボコンダイエット」と言って，食費を削って部品代を捻出するという知り合いもいましたが，うまい飯なしにはやってられないと思いませんか？<a href="http://kuuneru.bangofan.com/" target="_blank" rel="noopener">おいしいごはんのつくり方</a>というタイトルのブログのマウサーもいるぐらいですから，これはマジです(?)．</p><p>ということで(?)今回は，マイクロマウス製作に欠かせないうまい飯 <strong>麻婆豆腐</strong> の作り方をご紹介します．(あくまでも試行回数の少ない自己流なので，この通りに作れば絶対うまい！ってわけではないです・・・)</p><p>調理中慌ただしかったので，通常のレシピ記事のように写真が豊富にないことをまずお詫びしておきます．写真撮りながら料理できる人すげえわ．GoProほしい．</p><a id="more"></a><h2>準備するもの</h2><h3>調理器具</h3><ul><li>豆腐を1丁茹でられる程度の鍋</li><li>中華鍋と高火力コンロ（わたしは持っていないので普通のフライパンとコンロです）</li><li>おたま</li></ul><h3>炸醤を作る</h3><img src="/2020/12/23/麻婆豆腐を作ろう-Micro-Mouse-AdC-2020/zajiang.jpg"><p>まずは炸醤(ザージャン)を準備します．炸醤はひき肉を甜麺醤と醤油と酒でカラカラに炒めた肉味噌で，麻婆豆腐や担々麺，炸醤麺(ジャージャーメン)などに使用される，汎用的な食材です．</p><p>ここで，この記事で伝えたいこと1つめです．</p><blockquote><p><strong>ひき肉が安売りされていたら，大量に炸醤を作って冷蔵庫・冷凍庫にストックしておきましょう．</strong></p></blockquote><img src="/2020/12/23/麻婆豆腐を作ろう-Micro-Mouse-AdC-2020/zajiang_udon.jpg"><p>あつあつのごはんに乗せるだけで美味しいですし，うどん・卵黄・ねぎ・ラー油と絡めるだけでおいしいジャージャーうどんが出来上がります．日曜お昼のド安定メニューです．</p><p>材料:</p><ul><li>ひき肉(豚, 牛どちらでも): 200g</li><li>甜麺醤: 大さじ1</li><li>老抽王(中国たまり醤油): 大さじ1</li><li>紹興酒: 大さじ1</li></ul><p>材料はすごくわかりやすく，イッパンノゴカテイにあるものばかりですね．ないときは老抽王→濃口醤油，紹興酒→料理酒でも構いませんが，これを機に中国食料品店に行って日本語の通じる店員さんを探して買いましょう．</p><p>作り方はとても簡単です．</p><ol><li>油を引いたフライパンをよく熱し，ひき肉を入れて広げ，焼き目をつけます</li><li>焼き目がついたら崩し，全体がバラバラになるように炒めます</li><li>ひき肉からパチパチと音がするようになってきたら，調味料三種を加えてパリパリに炒めます</li></ol><p>冷蔵の場合3,4日ぐらいで使い切ってください．冷凍もできます．</p><h3>麻婆豆腐の材料の準備</h3><p>さて，本題の麻婆豆腐に戻りましょう．まずは材料の準備です．</p><p>豆腐</p><ul><li>豆腐(絹ごし，木綿どちらでも): 1丁<br>個人的な好みですが，絹ごしならフルフル感を楽しめる小さめの20mm角，木綿なら食べごたえを楽しめる大きめの25mm角ぐらいがおすすめです．</li></ul><p>タレの工程で使用</p><ul><li>サラダ油: 大さじ2</li><li>おろしにんにく(or 刻みにんにく): 小さじ1</li><li>郫県(ピーシェン)豆板醤: 大さじ1弱</li><li>普通の豆板醤(or 麻辣醤): 小さじ1</li><li>豆鼓: 小さじ1</li><li>炸醤: 大さじ2程度(ひき肉60g程度相当)</li><li>(optional) 唐辛子: 1本</li></ul><p>煮込みの工程で使用</p><ul><li>紹興酒: 大さじ1</li><li>鶏ガラスープ: 200ml</li><li>長ネギみじん切り: 5cm分ぐらい</li><li>老抽王(中国たまり醤油) 大さじ1</li><li>水溶き片栗粉: 水大さじ1.5, 片栗粉大さじ1.5 程度</li><li>花椒: 適量</li><li>化粧油(ラー油 or サラダ油): 適量</li><li>(optional) にんにくの芽: 5-10cmをそぐように切る</li></ul><p>材料はすごくわかりやすく，イッパンノゴカテイにあｒ（</p><p>郫県豆板醤は麻婆豆腐の味を作るのにとても重要なので，これも中国食料品店などでなんとかして入手してください．ネットでも買えるっぽいです．</p><p>どうしても入手できない場合は，通常の豆板醤2に対して塩麹1を混ぜたものを代わりに使用しましょう．発酵感が加わってそれらしい味わいになります．</p><img src="/2020/12/23/麻婆豆腐を作ろう-Micro-Mouse-AdC-2020/pixiandouban.jpg" title="郫県豆板醤 うまいんですよこれ"><p>今回は，こちらのなんとも本場感の漂うもの(丹丹 红油郫县豆瓣酱)を使いました．熟成感と塩気が強めの豆板醤で，これだけを使うと少し塩辛くなるので，ユウキ食品の四川豆板醤(上記材料リストに分量記載)と合わせることにします．麻辣醤と合わせても良いと思います．</p><img src="/2020/12/23/麻婆豆腐を作ろう-Micro-Mouse-AdC-2020/mixed_douban.jpg" title="豆板醤による色の違い(右上: 普通の豆板醤，左下: 郫県豆瓣醤)"><p>写真のように，左下の郫県豆板醤は右上の普通の豆板醤と比べて濃い茶色をしています．</p><h2>調理</h2><p>それでは麻婆豆腐を調理していきましょう．工程はざっくり</p><ol><li>タレづくり</li><li>豆腐の下茹で</li><li>煮るの3ステップです．</li></ol><h3>タレを作る</h3><p>タレづくりは豆腐を茹でる作業と並行できますが，慣れないうちは先にタレを準備してから豆腐を茹でましょう．</p><img src="/2020/12/23/麻婆豆腐を作ろう-Micro-Mouse-AdC-2020/pixiandouban_2.jpg" title="郫県豆瓣醤は塊がゴロゴロしていることが多い"><p>郫県豆瓣醤はこの写真のように塊がゴロゴロしていることが多いので，包丁で叩くようにして刻んでから使います．豆鼓も刻んでおきます．</p><img src="/2020/12/23/麻婆豆腐を作ろう-Micro-Mouse-AdC-2020/sauce_1.jpg"><p>冷たいフライパンにサラダ油を入れ，炸醤以外の材料を入れてから中火にかけます．唐辛子を入れる場合は，ハサミで輪切りにして種と一緒に入れましょう．ふつふつして油に赤色が移っていい香りがするまで炒めます．</p><img src="/2020/12/23/麻婆豆腐を作ろう-Micro-Mouse-AdC-2020/sauce_2.jpg"><p>炸醤を入れ，混ぜるようにして軽く炒めます．</p><p>ちょっとしたポイント:</p><blockquote><p>ここまでの状態でタッパーに入れておくと，自家製麻婆豆腐の素になります．</p></blockquote><img src="/2020/12/23/麻婆豆腐を作ろう-Micro-Mouse-AdC-2020/mapotofu_base.jpg"><h3>豆腐を茹でる</h3><p>0.5%程度(ちょっと薄い味噌汁ぐらい)の塩分濃度にしたお湯で豆腐を茹でます．豆腐がダンスを始めるのが茹で上がりのサインです．</p><p>参考: ダンスの様子(11:12あたり〜)</p><iframe width="560" height="315" src="https://www.youtube.com/embed/ywHT-OZCCJQ?start=672" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe><h3>煮る</h3><img src="/2020/12/23/麻婆豆腐を作ろう-Micro-Mouse-AdC-2020/sauce_3.jpg"><p>最初の工程で作ったタレの素を火を少し強めて温め，そこに鶏ガラスープと紹興酒を入れてひと煮立ちさせます．すでにおいしそう．</p><img src="/2020/12/23/麻婆豆腐を作ろう-Micro-Mouse-AdC-2020/sauce_4.jpg"><p>茹でた豆腐を入れて中火で2〜3分煮ます(茹でたお湯は入れないように)．</p><img src="/2020/12/23/麻婆豆腐を作ろう-Micro-Mouse-AdC-2020/sauce_5.jpg"><p>混ぜるときは，フライパンをゆすりながらお玉の裏側で押し出すようにすると豆腐が崩れにくいです．8割方煮たらネギ(+お好みでニンニクの芽)と中国たまり醤油を入れて混ぜ，味をみます．ここで塩味を調整してください．</p><img src="/2020/12/23/麻婆豆腐を作ろう-Micro-Mouse-AdC-2020/sauce_6.jpg"><p>最後にとろみをつけます．火を止め，よく混ぜた水溶き片栗粉を少しずつ加えて混ぜます．水溶き片栗粉をすべて入れたら火をMAXにし，化粧油を回しかけて，30秒ほど焼くようにして片栗粉に火を通しながら混ぜます(ここが結構ポイントなんですが写真を撮れないほど慌ただしい)．</p><img src="/2020/12/23/麻婆豆腐を作ろう-Micro-Mouse-AdC-2020/mapotofu.jpg"><p>花椒をたっぷり挽いてまぶせば完成です．</p><img src="/2020/12/23/麻婆豆腐を作ろう-Micro-Mouse-AdC-2020/mapotofu_2.jpg"><p>うまい・・・！</p><h2>結論</h2><p>・</p><p>・</p><p>・</p><p>・</p><img src="/2020/12/23/麻婆豆腐を作ろう-Micro-Mouse-AdC-2020/nakamuraya.jpg" title="新宿中村屋 麻婆豆腐シリーズ"><p>この記事で最後に伝えたいです．</p><blockquote><p><strong>新宿中村屋の麻婆豆腐の素を買え．</strong></p></blockquote><p>安定してうまい麻婆豆腐を作れて，しかも1パック200円ほど+豆腐とネギだけでごちそうが出来上がります．この記事の前半だけ見て食材店に走ってしまった方，ごめんなさい．</p><h2>おまけ</h2><img src="/2020/12/23/麻婆豆腐を作ろう-Micro-Mouse-AdC-2020/dandanmian.jpg"><p>担々麺もおうちで作るとうまいです．今回最初に作った炸醤を使います．以下簡単なレシピ:</p><blockquote class="twitter-tweet"><p lang="ja" dir="ltr">3. 鶏ガラスープ200mlを熱湯で作って2を溶かす<br>4. 麺と菜っ葉を湯切りし、炸醤、ネギみじん切り少々と盛り付け<br>5. ラー油を回しかけ、ごまと花椒を挽いて振る<br><br>味が薄い人はかき醤油を足してくれ。濃い人はお湯を足してくれ。</p>&mdash; ねこねこきーつね♪ (@tokoro10g) <a href="https://twitter.com/tokoro10g/status/1337242674256957440?ref_src=twsrc%5Etfw" target="_blank" rel="noopener">December 11, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> <p>オイスターソースを入れるレシピもありますが，個人的にはかき醤油のほうが旨味がくどくなくて良いです．もっと醤油味を効かせたいという場合は，スープの素を減らして醤油を増やすか，かき醤油の一部を普通の醤油にしましょう．</p><p>香りの良いラー油を使うことも大事です．よく売られている赤色付きごま油ではだめです．簡単なので，ラー油を自作しても良いでしょう．</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;この記事は，&lt;a href=&quot;https://adventar.org/calendars/5829&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Micro Mouse Advent Calendar 2020&lt;/a&gt;の23日目の記事です．&lt;/p&gt;
&lt;p&gt;昨日はアニキの&lt;a href=&quot;http://anikinonikki.cocolog-nifty.com/blog/2020/12/post-1477f5.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;「新・教材トレーサー」&lt;/a&gt;でした．&lt;/p&gt;
&lt;h2&gt;麻婆豆腐を作ろう&lt;/h2&gt;
&lt;img src=&quot;/2020/12/23/麻婆豆腐を作ろう-Micro-Mouse-AdC-2020/mapotofu.jpg&quot;&gt;
&lt;p&gt;さて，皆さんが真面目な技術記事を書いているところ大変恐縮なのですが，私の個人的な趣味の記事を書かせていただきます．
&lt;s&gt;今年はマイクロマウスについて何もやっていないのです・・・&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;突然ですが，あなたにとってマイクロマウスの開発に最も必要なものは何でしょうか？&lt;/p&gt;
&lt;p&gt;&lt;em&gt;― 技術への情熱&lt;/em&gt;&lt;br&gt;
&lt;em&gt;― 互いに切磋琢磨する仲間&lt;/em&gt;&lt;br&gt;
&lt;em&gt;― エンコーダ付きモータを躊躇なく買える資金力&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;など，様々なものが思い浮かんできそうですね．&lt;/p&gt;
&lt;p&gt;わたしの場合はというと・・・ そう，うまい飯です．
「ロボコンダイエット」と言って，食費を削って部品代を捻出するという知り合いもいましたが，うまい飯なしにはやってられないと思いませんか？
&lt;a href=&quot;http://kuuneru.bangofan.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;おいしいごはんのつくり方&lt;/a&gt;というタイトルのブログのマウサーもいるぐらいですから，これはマジです(?)．&lt;/p&gt;
&lt;p&gt;ということで(?)今回は，マイクロマウス製作に欠かせないうまい飯 &lt;strong&gt;麻婆豆腐&lt;/strong&gt; の作り方をご紹介します．
(あくまでも試行回数の少ない自己流なので，この通りに作れば絶対うまい！ってわけではないです・・・)&lt;/p&gt;
&lt;p&gt;調理中慌ただしかったので，通常のレシピ記事のように写真が豊富にないことをまずお詫びしておきます．
写真撮りながら料理できる人すげえわ．GoProほしい．&lt;/p&gt;
    
    </summary>
    
      <category term="料理" scheme="http://blog.tokor.org/categories/%E6%96%99%E7%90%86/"/>
    
    
      <category term="麻婆豆腐" scheme="http://blog.tokor.org/tags/%E9%BA%BB%E5%A9%86%E8%B1%86%E8%85%90/"/>
    
  </entry>
  
  <entry>
    <title>手が滑って光造形3Dプリンタを3万円で買ってしまった話 [rogy Advent Calendar 2019]</title>
    <link href="http://blog.tokor.org/2019/12/23/%E6%89%8B%E3%81%8C%E6%BB%91%E3%81%A3%E3%81%A6%E5%85%89%E9%80%A0%E5%BD%A23D%E3%83%97%E3%83%AA%E3%83%B3%E3%82%BF%E3%82%923%E4%B8%87%E5%86%86%E3%81%A7%E8%B2%B7%E3%81%A3%E3%81%A6%E3%81%97%E3%81%BE%E3%81%A3%E3%81%9F%E8%A9%B1-rogy-Advent-Calendar-2019/"/>
    <id>http://blog.tokor.org/2019/12/23/手が滑って光造形3Dプリンタを3万円で買ってしまった話-rogy-Advent-Calendar-2019/</id>
    <published>2019-12-23T04:36:42.000Z</published>
    <updated>2020-02-09T03:53:51.696Z</updated>
    
    <content type="html"><![CDATA[<p>実に1年ぶりの更新です．みなさんお久しぶりです．</p><h2>供述</h2><p>同年代の社会人が，ボーナスでカメラをポチったり，CNCをポチったり，旅行に行ったりしているのを見て，わたしにもできると思った．後悔はしていない．</p><blockquote class="twitter-tweet"><p lang="ja" dir="ltr">手滑らせてなにか買いたいけど今じゃない</p>&mdash; 🦋ところたん🦋 (@tokoro10g) <a href="https://twitter.com/tokoro10g/status/1204244497799925760?ref_src=twsrc%5Etfw" target="_blank" rel="noopener">December 10, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> <blockquote class="twitter-tweet"><p lang="en" dir="ltr">Photon</p>&mdash; 舌下免疫taniho (@taniho_0707) <a href="https://twitter.com/taniho_0707/status/1204245114693935104?ref_src=twsrc%5Etfw" target="_blank" rel="noopener">December 10, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> <blockquote class="twitter-tweet"><p lang="ja" dir="ltr">判断力が低下している <a href="https://t.co/pSPS5ZXzqu" target="_blank" rel="noopener">pic.twitter.com/pSPS5ZXzqu</a></p>&mdash; 🦋ところたん🦋 (@tokoro10g) <a href="https://twitter.com/tokoro10g/status/1204247872876642304?ref_src=twsrc%5Etfw" target="_blank" rel="noopener">December 10, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> <p>即オチ3コマ．</p><h2>どれを買ったか</h2><p>まず，3Dプリンタには雑に大きく分けて2種類があります．</p><ol><li>温めた樹脂を練り出すタイプ</li><li>レーザーや紫外線等を当てて液体樹脂を硬化させるタイプ</li></ol><p>いわゆる3Dプリンタとして有名なのは1つめのタイプではないでしょうか．今回私が購入したのは，2つめの「光造形」と呼ばれる方式の3Dプリンタです．</p><p>通常，光造形方式は練り出す3Dプリンタと比較して製造コストが高く，ホビー用途としてはかなり高嶺の花<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>だったわけですが，ここ数年の間でLCD-SLAという簡易的な方式が確立されてから，かなり安価に手に入るようになりました．LCD-SLA方式は，UVレジン(ジェルネイルとかにも使うやつ)に紫外線を照射する際に，間に挟んだLCDスクリーンで積層パターンをマスクするという方式です．とはいってもお値段はだいたい5万円〜と，気軽に買える価格ではなかったのですが…</p><img src="/2019/12/23/手が滑って光造形3Dプリンタを3万円で買ってしまった話-rogy-Advent-Calendar-2019/photon.png"><p>これを見て手を滑らせてしまったよ… <sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup></p><p>購入したのはこちらのAnycubic Photon．500mLのレジン付きで 262ドル !!!定価が450ドルなのでおよそ4割引です．4割引といえばスーパーのおすしの最終値引きぐらいのお得感です．つまりめっちゃお得．</p><p>↓ 実際の出力結果とこれからどうしたいかについて書きます．</p><a id="more"></a><h2>実力はどうか</h2><p>ということで博士論文発表会を年明けに控えた今，現実逃避がてら動かしてみようと思います．データは標準で用意されているテストパターン．UV照射時間のキャリブレーションに使えるようになっているらしいですが，とにかくワクワクしてプリントしたい気持ちでいっぱいです．</p><img src="/2019/12/23/手が滑って光造形3Dプリンタを3万円で買ってしまった話-rogy-Advent-Calendar-2019/photon_home.jpg" title="ちょうど良かったのでパイプスペースに置いてます"><p>だいたい45分ぐらいで高さ15mm程度のモデルの出力が完了しました．これは未硬化のレジンを洗浄してからUVランプで追加の硬化をさせているシーンです．</p><blockquote class="twitter-tweet"><p lang="ja" dir="ltr">おおおーー <a href="https://t.co/78UlcbXzPG" target="_blank" rel="noopener">pic.twitter.com/78UlcbXzPG</a></p>&mdash; 🦋ところたん🦋 (@tokoro10g) <a href="https://twitter.com/tokoro10g/status/1208391214698876928?ref_src=twsrc%5Etfw" target="_blank" rel="noopener">December 21, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> <p>光造形方式の特徴は，とにかく高精細な出力ができること．Photonも例にもれず素晴らしい出力結果が得られました．</p><blockquote class="twitter-tweet"><p lang="ja" dir="ltr">わかりにくかったのでもう一枚 <a href="https://t.co/svD0hfSO66" target="_blank" rel="noopener">pic.twitter.com/svD0hfSO66</a></p>&mdash; 🦋ところたん🦋 (@tokoro10g) <a href="https://twitter.com/tokoro10g/status/1208395052826972161?ref_src=twsrc%5Etfw" target="_blank" rel="noopener">December 21, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> <p>ただし，横からよく見るとまっすぐであるはずの部分が曲がっています．</p><blockquote class="twitter-tweet"><p lang="ja" dir="ltr">うーん歪んでるなあ <a href="https://t.co/A9tN0KJoFj" target="_blank" rel="noopener">pic.twitter.com/A9tN0KJoFj</a></p>&mdash; 🦋ところたん🦋 (@tokoro10g) <a href="https://twitter.com/tokoro10g/status/1208391706032234497?ref_src=twsrc%5Etfw" target="_blank" rel="noopener">December 21, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> <p>どうも硬化が全体的に甘いようです．原因をいろいろ考えてみたのですが，今回プリントしたテストパターンがPhotonの後継機であるPhoton S向けのものだったことが原因なのではないかと考えています．Photon SはUVランプの出力が強くなっていて，その分照射時間が短く設定されているためです．ということで，今度は自作のモデルをもう少し長い照射時間で出力してみようと考えています．</p><p>歪みを軽減する方法等については，こちらも参考になるんじゃないかなと思います．</p><ul><li><a href="https://togetter.com/li/986368" target="_blank" rel="noopener">3Dプリンター 光造形機で綺麗に出力する方法とか処理等。[DWSシリーズデジタルワックス、Form2、HD3500、パーファク] - Togetter</a>この中で紹介されている，水につけながら出力後の硬化をさせる方法は，近いうちに試してみようと思います．</li></ul><h2>Photon購入時の注意 (12/30追記)</h2><p>今回届いたPhotonは，初期のPhotonとはハードウェア構成が異なります．海外のフォーラムでは俗にFauxton<sup class="footnote-ref"><a href="#fn3" id="fnref3">[3]</a></sup>と呼ばれています．ものとしては，基板が後継機のPhoton Sのものに変わっているだけです．どうも9月頃からこのタイプのものを送るようになったようですが，それ以降にゲットした人も旧来型を入手していたりしてよくわかりません．</p><p>見分け方はいろいろありますが，ざっくり以下を確かめれば良いでしょう．</p><ul><li>UIの表示<br>起動時のUIについて，Photonの場合は正方形のボタンが3つ横に並んで表示されますが，Fauxtonは横長のボタンが3つ縦に並んで表示されます．</li><li>Print画面からpwsファイルが選べる<br>Photon Sの基板なので，当然のようにPhoton Sのファイルが選択できます．</li></ul><p>ただし，Photon Sとは異なり搭載されているUVランプの出力は従来のPhotonのままですので，Photon S向けのpwsファイルをそのままプリントすると形が崩れます．</p><h2>使用にあたって用意したもの</h2><p>3万円と書きましたが，本体以外にもいろいろ必要になります．</p><ul><li>ネイル用UVライト</li><li>キムタオル(必須!!)</li><li>塗料用ストレーナー</li><li>使い捨てゴム手袋</li><li>ポリプロピレン容器</li><li>ろうと(不要でした)</li><li>無水エタノール</li><li>イソプロピルアルコール(IPA)</li><li>蓋付きガラス瓶(レジン洗浄時に使います)</li></ul><p>以下，アフィリンクになっているので嫌な人は踏まないでください．</p><iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=gelidium-22&language=ja_JP&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B07GRT5JGB&linkId=4ad57a4050a8d7fe8d11fb625ad3f655"></iframe><iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=gelidium-22&language=ja_JP&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B002COI7K2&linkId=7bc06fc701c141e8e4aee740829665e2"></iframe><iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=gelidium-22&language=ja_JP&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B00B6W7NQA&linkId=82bb4da52f1c129877eeab690489e8eb"></iframe><iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=gelidium-22&language=ja_JP&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B00BES4R10&linkId=502590558aa40cd436ba92b2addf5c97"></iframe><iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=gelidium-22&language=ja_JP&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B00437HQPS&linkId=d813c789824391307daab07e4eb5724e"></iframe><h2>改造したい</h2><p>3万円はふつうに考えると高額ですが，ものづくりを趣味にしていると感覚が麻痺してしまって，これぐらいなら壊しても大丈夫と思ってしまうぐらいの微妙なラインかなと思います．Photonに関しては，保守パーツもそれなりに安く出回っているようですし．ということで，もっと便利にPhotonを使えるように改造を施したいなと考えています．</p><p>たとえばこんなの:</p><ul><li>Z軸のリニアレールやボールねじの調整・交換<br>どうも歪みがありそうなので，長物を作りたいときのために調整・交換したいです．</li><li>レジン自動継ぎ足し<br>長時間のプリントをする際に自分でレジンを継ぎ足すのはめんどくさい…</li><li>プリント完了通知<br>PhotonのメインボードはChituboxという中国のメーカーが製造している汎用基板を使用しているようです．UARTのポートもご丁寧にシルクで示してあるので，何かデバッグ出力が出ていればいいなと思っています．ESP32も家に余ってるし．</li></ul><h2>おまけ</h2><p>UVライトの説明書にあった怪レい日本语</p><blockquote class="twitter-tweet"><p lang="und" dir="ltr"><a href="https://t.co/3WmVFS9YlX" target="_blank" rel="noopener">pic.twitter.com/3WmVFS9YlX</a></p>&mdash; 🦋ところたん🦋 (@tokoro10g) <a href="https://twitter.com/tokoro10g/status/1208402798725017605?ref_src=twsrc%5Etfw" target="_blank" rel="noopener">December 21, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> <hr class="footnotes-sep"><section class="footnotes"><ol class="footnotes-list"><li id="fn1" class="footnote-item"><p>100万円単位の世界．そもそも練り出す方式もStratasysが持っていた特許が2009年に切れたことをきっかけにブームが来るまではそんな感じでしたよね． <a href="#fnref1" class="footnote-backref">↩</a></p></li><li id="fn2" class="footnote-item"><p>投稿時点でまだ続いています．ページ上にあと○日と○時間で終了!みたいなのが出てますが，終了するたびに復活してます．よっぽど在庫余ってるのかな． <a href="#fnref2" class="footnote-backref">↩</a></p></li><li id="fn3" class="footnote-item"><p>「偽の」という意味のフランス語の形容詞<a href="https://en.wiktionary.org/wiki/faux#French" target="_blank" rel="noopener">faux</a>をもじってます．でも偽物じゃないよ． <a href="#fnref3" class="footnote-backref">↩</a></p></li></ol></section>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;実に1年ぶりの更新です．みなさんお久しぶりです．&lt;/p&gt;
&lt;h2&gt;供述&lt;/h2&gt;
&lt;p&gt;同年代の社会人が，ボーナスでカメラをポチったり，CNCをポチったり，旅行に行ったりしているのを見て，わたしにもできると思った．
後悔はしていない．&lt;/p&gt;

&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p lang=&quot;ja&quot; dir=&quot;ltr&quot;&gt;手滑らせてなにか買いたいけど今じゃない&lt;/p&gt;&amp;mdash; 🦋ところたん🦋 (@tokoro10g) &lt;a href=&quot;https://twitter.com/tokoro10g/status/1204244497799925760?ref_src=twsrc%5Etfw&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;December 10, 2019&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src=&quot;https://platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt; 
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;Photon&lt;/p&gt;&amp;mdash; 舌下免疫taniho (@taniho_0707) &lt;a href=&quot;https://twitter.com/taniho_0707/status/1204245114693935104?ref_src=twsrc%5Etfw&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;December 10, 2019&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src=&quot;https://platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt; 
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p lang=&quot;ja&quot; dir=&quot;ltr&quot;&gt;判断力が低下している &lt;a href=&quot;https://t.co/pSPS5ZXzqu&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;pic.twitter.com/pSPS5ZXzqu&lt;/a&gt;&lt;/p&gt;&amp;mdash; 🦋ところたん🦋 (@tokoro10g) &lt;a href=&quot;https://twitter.com/tokoro10g/status/1204247872876642304?ref_src=twsrc%5Etfw&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;December 10, 2019&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src=&quot;https://platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt; 

&lt;p&gt;即オチ3コマ．&lt;/p&gt;
&lt;h2&gt;どれを買ったか&lt;/h2&gt;
&lt;p&gt;まず，3Dプリンタには雑に大きく分けて2種類があります．&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;温めた樹脂を練り出すタイプ&lt;/li&gt;
&lt;li&gt;レーザーや紫外線等を当てて液体樹脂を硬化させるタイプ&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;いわゆる3Dプリンタとして有名なのは1つめのタイプではないでしょうか．
今回私が購入したのは，2つめの「光造形」と呼ばれる方式の3Dプリンタです．&lt;/p&gt;
&lt;p&gt;通常，光造形方式は練り出す3Dプリンタと比較して製造コストが高く，ホビー用途としてはかなり高嶺の花&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;だったわけですが，ここ数年の間でLCD-SLAという簡易的な方式が確立されてから，かなり安価に手に入るようになりました．
LCD-SLA方式は，UVレジン(ジェルネイルとかにも使うやつ)に紫外線を照射する際に，間に挟んだLCDスクリーンで積層パターンをマスクするという方式です．
とはいってもお値段はだいたい5万円〜と，気軽に買える価格ではなかったのですが…&lt;/p&gt;
&lt;img src=&quot;/2019/12/23/手が滑って光造形3Dプリンタを3万円で買ってしまった話-rogy-Advent-Calendar-2019/photon.png&quot;&gt;
&lt;p&gt;これを見て手を滑らせてしまったよ… &lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn2&quot; id=&quot;fnref2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;購入したのはこちらのAnycubic Photon．
500mLのレジン付きで 262ドル !!!
定価が450ドルなのでおよそ4割引です．4割引といえばスーパーのおすしの最終値引きぐらいのお得感です．つまりめっちゃお得．&lt;/p&gt;
&lt;p&gt;↓ 実際の出力結果とこれからどうしたいかについて書きます．&lt;/p&gt;
    
    </summary>
    
      <category term="機械工作" scheme="http://blog.tokor.org/categories/%E6%A9%9F%E6%A2%B0%E5%B7%A5%E4%BD%9C/"/>
    
      <category term="3Dプリンタ" scheme="http://blog.tokor.org/categories/%E6%A9%9F%E6%A2%B0%E5%B7%A5%E4%BD%9C/3D%E3%83%97%E3%83%AA%E3%83%B3%E3%82%BF/"/>
    
    
      <category term="Anycubic" scheme="http://blog.tokor.org/tags/Anycubic/"/>
    
      <category term="Photon" scheme="http://blog.tokor.org/tags/Photon/"/>
    
      <category term="光造形" scheme="http://blog.tokor.org/tags/%E5%85%89%E9%80%A0%E5%BD%A2/"/>
    
  </entry>
  
  <entry>
    <title>MATLAB芸人なら知っておきたい小ネタ関数ベスト5 [rogy Advent Calendar 2018]</title>
    <link href="http://blog.tokor.org/2018/12/08/MATLAB%E8%8A%B8%E4%BA%BA%E3%81%AA%E3%82%89%E7%9F%A5%E3%81%A3%E3%81%A6%E3%81%8A%E3%81%8D%E3%81%9F%E3%81%84%E3%83%8D%E3%82%BF%E9%96%A2%E6%95%B0%E3%83%99%E3%82%B9%E3%83%885-rogy-Advent-Calendar-2018/"/>
    <id>http://blog.tokor.org/2018/12/08/MATLAB芸人なら知っておきたいネタ関数ベスト5-rogy-Advent-Calendar-2018/</id>
    <published>2018-12-07T15:00:01.000Z</published>
    <updated>2019-05-12T07:24:29.956Z</updated>
    
    <content type="html"><![CDATA[<img src="/2018/12/08/MATLAB芸人なら知っておきたいネタ関数ベスト5-rogy-Advent-Calendar-2018/image_boy.png" title="ちょっと怖い"><h2>イースターエッグ</h2><p>ソフトウェアにおけるイースターエッグとは, 開発者がプログラム内に仕込んだ隠し機能や隠しメッセージのことです.MATLABにも様々なイースターエッグが仕込まれていて, どれも遊び心を感じるものになっています.</p><p>この記事では, その一例を独断と偏見によるランキング形式で紹介しようと思います.</p><h2>独断と偏見によるランキング</h2><h3>5位: <code>fifteen</code>, <code>xpbombs</code></h3><p>なんと15パズルとマインスイーパがFigureウィンドウ上で遊べます.暇つぶしや休憩のおともにどうぞ(業務中に遊ばないでね).</p><p>コード:</p><figure class="highlight"><pre>fifteen</pre></figure><p>実行結果:</p><img src="/2018/12/08/MATLAB芸人なら知っておきたいネタ関数ベスト5-rogy-Advent-Calendar-2018/fifteen.png" title="15パズル"><p>コード:</p><figure class="highlight"><pre>xpbombs</pre></figure><p>実行結果:</p><img src="/2018/12/08/MATLAB芸人なら知っておきたいネタ関数ベスト5-rogy-Advent-Calendar-2018/xpbombs.png" title="マインスイーパ"><p>ちなみに, コマンドウィンドウで</p><figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">&gt;&gt; edit xpbombs</span><br></pre></td></tr></table></figure><p>と実行すると, ソースコードを見ることができます.GUIプログラミングをする上で参考になるので, 気になる人は読んでみると良いと思います.</p><h3>4位: <code>logo</code> 関数</h3><p>MATLAB芸人なら, 突然MATLABのロゴを出したくなったことが何度もあるはずです.そんなときに便利なのが, <code>logo</code> 関数です.</p><img src="/2018/12/08/MATLAB芸人なら知っておきたいネタ関数ベスト5-rogy-Advent-Calendar-2018/logo.png" title="ロゴが一発で出ます"><p>内部的には, <code>membrane</code> 関数を <code>surf</code> を使ってプロットし, 大きさやライトを調整しています.詳細な手順が公式ドキュメントで示されています.</p><ul><li><a href="https://www.mathworks.com/help/matlab/visualize/creating-the-matlab-logo.html" target="_blank" rel="noopener">Creating the MATLAB Logo - MATLAB &amp; Simulink Example</a></li></ul><h3>3位: <code>spy</code> 関数</h3><p><code>spy</code> 関数は本来行列のスパース性を可視化するための関数で, つぎのように使用します.</p><p>コード:</p><figure class="highlight"><pre>spy(bucky)<span class="GruvboxOrange">;</span></pre></figure><p>実行結果:</p><img src="/2018/12/08/MATLAB芸人なら知っておきたいネタ関数ベスト5-rogy-Advent-Calendar-2018/spy_bucky.png" title="spyコマンドの使用例"><p>引数なしで実行すると, なぜか犬の顔が表示されます.</p><p>コード:</p><figure class="highlight"><pre>spy</pre></figure><p>実行結果:</p><img src="/2018/12/08/MATLAB芸人なら知っておきたいネタ関数ベスト5-rogy-Advent-Calendar-2018/spy_dog.png" title="spyコマンドの犬"><p>この <code>spy</code> 関数は, 本来の使い方以外にも面白い使い方があります.非ゼロの要素がある部分にドットが打たれるため, 簡単なドットマトリクスディスプレイとして使用することができます.これを応用すると, Conwayのライフゲームがこんな感じで実装・表示できます.</p><p>コード:</p><figure class="highlight"><pre>a = <span class="Normal">rand</span>(<span class="GruvboxPurple">128</span>) <span class="Normal">&gt;</span> <span class="GruvboxPurple">0.7</span><span class="GruvboxOrange">;</span><span class="GruvboxRed">while</span> <span class="GruvboxPurple">1</span>    spy(a,<span class="String">&apos;r.&apos;</span>,<span class="GruvboxPurple">6</span>)<span class="GruvboxOrange">;</span> drawnow<span class="GruvboxOrange">;</span>    a = <span class="Normal">~</span>fix(filter2(<span class="Normal">ones</span>(<span class="GruvboxPurple">3</span>),a)<span class="Normal">-</span>a<span class="Normal">/</span><span class="GruvboxPurple">2</span><span class="Normal">-</span><span class="GruvboxPurple">3</span>)<span class="GruvboxOrange">;</span><span class="GruvboxRed">end</span></pre></figure><p>実行結果:</p><img src="/2018/12/08/MATLAB芸人なら知っておきたいネタ関数ベスト5-rogy-Advent-Calendar-2018/matlab_conway.gif" title="Conwayのライフゲーム"><p>上記のコードはここに書いてあったものをゴルフして作りました.</p><ul><li><a href="https://blogs.mathworks.com/loren/2010/01/19/mathematical-recreations-tweetable-game-of-life/" target="_blank" rel="noopener">Mathematical Recreations: Tweetable Game Of Life » Loren on the Art of MATLAB - MATLAB &amp; Simulink</a></li></ul><h3>2位: <code>image</code> 関数</h3><p><code>image</code> 関数を引数なしで実行すると…</p><p>コード:</p><figure class="highlight"><pre>image</pre></figure><p>実行結果:</p><img src="/2018/12/08/MATLAB芸人なら知っておきたいネタ関数ベスト5-rogy-Advent-Calendar-2018/image_boy.png" title="ちょっと怖い"><p>逆さまになった男の子の顔が表示されます.ちょっとしたホラーです.</p><p>実はこの画像にはさらに秘密があって, 各画素のdoubleの値のうち53ビットをbitrotateすると, 隠し画像が現れるらしいです.説明が結構面倒なので, 詳細はこちらをご覧ください.</p><ul><li><a href="https://www.mathworks.com/matlabcentral/answers/2001-what-matlab-easter-eggs-do-you-know#answer_3188" target="_blank" rel="noopener">What matlab easter eggs do you know? - MATLAB Answers - MATLAB Central</a></li></ul><h3>1位: <code>why</code> 関数</h3><p><code>why</code> 関数は上記に挙げた関数とは違い, 特にこれといった用途のない関数です.インパクトには欠けますが, これを知っている人は結構なMATLAB通だと思います.</p><p><code>why</code> を実行すると, 予め用意された語句を組み合わせたへんちくりんな文が表示されます.</p><img src="/2018/12/08/MATLAB芸人なら知っておきたいネタ関数ベスト5-rogy-Advent-Calendar-2018/why.png" title="why???"><p>これを使った実用的なコードを何か考えられるでしょうか? 思いつく人がいたら教えてください.</p><h3>まとめ</h3><p>いかがでしたか?皆さんはいくつ知っていましたか?</p><p>ほかにもバージョンごとにいろいろな隠し要素があるようなので, 探してみると面白いのではないかと思います.それでは, よいMATLAB芸人生活をお送りください.</p><h3>参考</h3><ul><li><a href="https://www.mathworks.com/matlabcentral/answers/2001-what-matlab-easter-eggs-do-you-know" target="_blank" rel="noopener">What matlab easter eggs do you know? - MATLAB Answers - MATLAB Central</a></li><li><a href="https://www.mathworks.com/help/matlab/visualize/creating-the-matlab-logo.html" target="_blank" rel="noopener">Creating the MATLAB Logo - MATLAB &amp; Simulink Example</a></li><li><a href="https://blogs.mathworks.com/loren/2010/01/19/mathematical-recreations-tweetable-game-of-life/" target="_blank" rel="noopener">Mathematical Recreations: Tweetable Game Of Life » Loren on the Art of MATLAB - MATLAB &amp; Simulink</a></li></ul>]]></content>
    
    <summary type="html">
    
      
      
        &lt;img src=&quot;/2018/12/08/MATLAB芸人なら知っておきたいネタ関数ベスト5-rogy-Advent-Calendar-2018/image_boy.png&quot; title=&quot;ちょっと怖い&quot;&gt;
&lt;h2&gt;イースターエッグ&lt;/h2&gt;
&lt;p&gt;ソフトウェアにおけるイースタ
      
    
    </summary>
    
      <category term="MATLAB" scheme="http://blog.tokor.org/categories/MATLAB/"/>
    
    
      <category term="ネタ" scheme="http://blog.tokor.org/tags/%E3%83%8D%E3%82%BF/"/>
    
      <category term="why" scheme="http://blog.tokor.org/tags/why/"/>
    
      <category term="image" scheme="http://blog.tokor.org/tags/image/"/>
    
  </entry>
  
  <entry>
    <title>たのしい3次元回転の世界 (1)3次元回転の特徴 [rogy Advent Calendar 2018]</title>
    <link href="http://blog.tokor.org/2018/12/03/%E3%81%9F%E3%81%AE%E3%81%97%E3%81%843%E6%AC%A1%E5%85%83%E5%9B%9E%E8%BB%A2%E3%81%AE%E4%B8%96%E7%95%8C-1-3%E6%AC%A1%E5%85%83%E5%9B%9E%E8%BB%A2%E3%81%AE%E7%89%B9%E5%BE%B4-rogy-Advent-Calendar-2018/"/>
    <id>http://blog.tokor.org/2018/12/03/たのしい3次元回転の世界-1-3次元回転の特徴-rogy-Advent-Calendar-2018/</id>
    <published>2018-12-03T14:30:29.000Z</published>
    <updated>2019-05-12T07:24:29.989Z</updated>
    
    <content type="html"><![CDATA[<img src="/2018/12/03/たのしい3次元回転の世界-1-3次元回転の特徴-rogy-Advent-Calendar-2018/yukari_3.jpg" title="腕を回すと回転行列の気持ちになれます"><h2>概要</h2><p>これは <a href="https://adventar.org/calendars/3279" target="_blank" rel="noopener">rogy Advent Calendar 2018</a> 3日目の記事です.投稿時点で12/3の25時ですが許して.</p><p>3次元回転は, 航空機, 人工衛星, マルチコプターなどの姿勢制御や, 3DCG, VR/AR, コンピュータビジョンなど, 3次元の物体が関わるあらゆる技術に密接に関係しています.この強力なツールを習得すればできることがぐっと増えるのですが, <strong>回転の順序を入れ替えられない</strong>ことや, <strong>回転の基準とする座標系の取り方によって結果が変わる</strong>こと, <strong>数学的な表現が初学者には分かりづらい</strong>ことなどを理由に, 敬遠されがちなのが実情です.実際, わたしも特に座標系にはさんざん苦しめられながら学習してきた経緯があり, 研究で取り扱っている今でもたまに混乱することがあるほどです.</p><p>これから書いていくシリーズ「たのしい3次元回転の世界」では, 3次元の回転に関わる事実や諸注意を<strong>なるべく図的に解説</strong>し, 扱う際の混乱や誤解をなくすことを目標にしています.特にクォータニオンに関しては, 「なぜこれで回転が表現できるのかわからない」「イメージがしづらい」という意見をよく目にしますので, そのあたりに関する解釈も書いていければと思います.筆者は数学的な深い知識には乏しい人間ですので, あまり数学的に立ち入った内容にはせず, 読み物としてためになるものが書ければと考えています.したがって, 数学的にプロパーな解説は, ほかの方の記事や論文等を参照していただくのが良いと思います.</p><p>今回は <strong>3次元回転の特徴</strong> について記します.3次元空間内の回転は, 2次元平面上での回転にない特徴を多くもっています.まずはその特徴に触れることで, <strong>3次元の回転へのイメージを養う</strong>ことからこのシリーズをはじめたいと思います.</p><a id="more"></a><h2>3次元の回転と姿勢</h2><p>2次元平面上の回転が1つのパラメータで表されるのに対して, 3次元空間内の回転は少なくとも3つのパラメータを用いて表現します.</p><p>任意の3次元の回転操作は, 3x3の回転行列で表すことができます.回転行列は, 3次元の姿勢を表すためにも使うことができます.基準となる座標系をゼロ回転(単位行列)とすれば, そこからの回転操作で姿勢を考えることができるからです.</p><p>このシリーズでは, 特にことわりがない限り $R$ を回転行列として扱います.</p><h3>座標系</h3><img src="/2018/12/03/たのしい3次元回転の世界-1-3次元回転の特徴-rogy-Advent-Calendar-2018/coordinate_frame.png"><p>座標系とは, 雑に説明すると, 「こっちが上」「こっちが右」みたいな印を数学的に記述したものです.3次元の座標系は, ふつう $x, y, z$ という3つの直交する軸の組を使って表現します.</p><p>座標系は3次元空間内に異なるものを複数もつことができます.たとえば, 地面に固定した座標系を考えても良いし, 地面を走ったり空中を飛んだりするロボットに取り付けた座標系を考えても良いわけです.これらはそれぞれ異なる姿勢をもつ座標系になり, それぞれの座標系によって $x, y, z$ 軸の指す方向が異なります.</p><img src="/2018/12/03/たのしい3次元回転の世界-1-3次元回転の特徴-rogy-Advent-Calendar-2018/coordinate_frame_rel.png"><p>上図の座標系1の軸を座標系0で表現した方向ベクトル $e_x, e_y, e_z$ を横に並べて行列を作ると, これは回転行列になります.$$R_{01} = \left[ e_x\ e_y\ e_z \right]$$$R_{01}$ は, <strong>座標系0 から見た 座標系1 の姿勢</strong> を表す回転行列, というふうに読みます.</p><p>回転行列を使うと, 2つの座標系の間の姿勢の関係を表すことができるようになります.座標系0を地面に固定した座標系, 座標系1をロボットに取り付けた座標系と考えると, 地面から見たロボットの姿勢が $R_{01}$ で表されることになります.わかりにくければ $R_{地面,ロボット}$ などと書いてもおっけーです.</p><p>本来3次元空間内の座標系というと, 原点の位置も3次元空間内で自由に選べるのですが, このシリーズでは回転だけを考えるので, すべての座標系の原点は同一の点Oを用いることにします.また, 座標系0は動かない座標系を表すことにします.</p><h3>回転行列によるベクトルの回転</h3><p>先述の回転行列 $R_{01}$ は, 座標系1で表現されたベクトル $p_1$ を座標系0での表現に変換する役割を果たします.$$p_0 = R_{01}p_1$$このように, 添字をぷよぷよ式に消すような表現にしておくと便利です.</p><h3>回転の合成</h3><p>回転行列を掛け合わせることによって, 3次元の回転を合成することができます.$$R_{02} = R_{01}R_{12}$$一般に, この計算の順序は入れ替えることはできません.これについては次節で詳しく述べます.</p><h2>3次元の回転はややこしい</h2><p>紙面方向しか回転軸がない2次元平面上の回転とは異なり, 3次元空間内の回転は, 軸の選び方に大きな自由度があります.これに起因して, 3次元の回転にはとにかくややこしい性質がいくつもつきまといます.</p><p>本節では, 代表的な性質を3つ紹介します.</p><ul><li>順序を入れ替えられない</li><li>回転の基準とする座標系の選び方によって結果が変わる</li><li>角速度の単純な時間積分は姿勢角にならない</li></ul><h3>順序を入れ替えられない (非可換性)</h3><p>だんだん疲れてきたと思うので, 少し体操をして目を覚ましましょう.ふつうに体操をするだけではつまらないので, 3次元の回転に思いを馳せながらやってみることにします.かわいいゆかりさんにお手本を見せてもらいましょう.</p><p>まず片手を前に出して, 手のひらが横を向くようにしてください.</p><img src="/2018/12/03/たのしい3次元回転の世界-1-3次元回転の特徴-rogy-Advent-Calendar-2018/yukari_init.jpg"><p>この状態から, 親指方向に90度回して手を上に上げてください.</p><img src="/2018/12/03/たのしい3次元回転の世界-1-3次元回転の特徴-rogy-Advent-Calendar-2018/yukari_1.jpg"><p>つぎに, 手の甲の方向に90度回して, 手を横に出します.</p><img src="/2018/12/03/たのしい3次元回転の世界-1-3次元回転の特徴-rogy-Advent-Calendar-2018/yukari_2.jpg"><p>最後に, 小指方向に90度回して, 手を前に戻します.</p><img src="/2018/12/03/たのしい3次元回転の世界-1-3次元回転の特徴-rogy-Advent-Calendar-2018/yukari_3.jpg"><p>この3つの回転によって, 最終的に手のひらが上向きで前に出た状態になります.</p><hr><p>今度はこの手順を逆にしてやってみましょう.もう一度最初の状態に戻します.</p><img src="/2018/12/03/たのしい3次元回転の世界-1-3次元回転の特徴-rogy-Advent-Calendar-2018/yukari_init.jpg"><p>今度は, はじめに小指方向に90度回して手を下に下げてください.</p><img src="/2018/12/03/たのしい3次元回転の世界-1-3次元回転の特徴-rogy-Advent-Calendar-2018/yukari_21.jpg"><p>つぎに, 手の甲の方向に90度回して, 手を横に出します.</p><img src="/2018/12/03/たのしい3次元回転の世界-1-3次元回転の特徴-rogy-Advent-Calendar-2018/yukari_32.jpg"><p>最後に, 親指方向に90度回して, 手を前に戻します.</p><img src="/2018/12/03/たのしい3次元回転の世界-1-3次元回転の特徴-rogy-Advent-Calendar-2018/yukari_33.jpg"><p>今度は手のひらが下を向いています.</p><p>あれ, 回転の操作の順序を変えただけなのに, 最終的な結果が変わってしまいました.この事実は, 行列の非可換性という性質の表われです.$$R_{02} = R_{01}R_{12} \neq R_{12}R_{01}$$同じ軸まわりの回転であれば, 隣同士の順序を入れ替えても問題ありませんが, それ以外の場合は結果の姿勢が異なるものになります.</p><p>ちなみに2次元平面上の回転の場合は, 回転軸が平面に垂直な方向の1つしか存在し得ないのでこのようなことは起こらず, 最初に右回りに回しても左回りに回しても最終的に同じ結果が得られます.むしろ2次元平面上の回転の方が特殊だということに気づいていただければと思います.</p><h3>回転の基準とする座標系の選び方によって結果が変わる (絶対変換と相対変換)</h3><p>先ほどの例では, 手の指の向きを基準にした手の回転を行っていました.今度は, 顔の向きを基準にして同様に手を回してみようと思います.</p><p>まずはじめに, 先ほどの最初の状態と同様に片手を前に出して, 手のひらが横を向くようにしてください.この状態で, 顔の向きと手の向きの対応関係を取ります.</p><img src="/2018/12/03/たのしい3次元回転の世界-1-3次元回転の特徴-rogy-Advent-Calendar-2018/yukari_frame.jpg" title="対応関係を取ります"><table><thead><tr><th>手の向き基準</th><th>顔の向き基準</th></tr></thead><tbody><tr><td>親指方向への回転</td><td>頭頂方向への耳軸まわりの回転</td></tr><tr><td>小指方向への回転</td><td>あご方向への耳軸まわりの回転</td></tr><tr><td>手の甲方向への回転</td><td>もともと手の甲が向いていた方向への首軸まわりの回転</td></tr></tbody></table><p>ちょっとややこしいですがご容赦ください.</p><hr><img src="/2018/12/03/たのしい3次元回転の世界-1-3次元回転の特徴-rogy-Advent-Calendar-2018/yukari_init.jpg"><p>では回していきましょう.この状態から, 小指方向に対応するように, 耳軸まわりにあご方向へ90度回します.</p><img src="/2018/12/03/たのしい3次元回転の世界-1-3次元回転の特徴-rogy-Advent-Calendar-2018/yukari_21.jpg"><p>つぎに, もともと手の甲が向いていた方向に首軸まわりに90度回します. 手をひねるような動作になります.</p><img src="/2018/12/03/たのしい3次元回転の世界-1-3次元回転の特徴-rogy-Advent-Calendar-2018/yukari_22.jpg"><p>最後に, 耳軸まわり頭頂方向に90度回します. 手を元の位置に戻してくるような動作になります.</p><img src="/2018/12/03/たのしい3次元回転の世界-1-3次元回転の特徴-rogy-Advent-Calendar-2018/yukari_23.jpg"><p>さて, やってみて気づくことがありませんか?鋭い方はお気づきかもしれませんが, 顔の向きを基準に回転を行うと, その逆順で手の向きを基準に回転を行った際と同じ結果になります.これはほかの回転パターンでも常に成り立ちます.</p><p>回転する物体(手)を基準にする場合と, 動かない物体(顔)を基準にする場合にはこのような関係があります.</p><p>実は, どちらの回転も数式で表現すると$$R_{03} = R_{01} R_{12} R_{23}$$という全く同じ回転行列の積で表現することができます.</p><p>より一般的には, 行列を左右どちらからかけ合わせるかによって, 回転の基準とする座標系を以下のように選ぶことができます.もとの姿勢を $R$, 与える変換を $R_\mathrm{trans}$ とします.</p><p><strong>左からかける場合(絶対変換)</strong>$$R_{\mathrm{abs}} = \color{red}{R_\mathrm{trans}} R$$この操作は, 顔の向き(動かない座標系)を基準にした回転操作に対応します.</p><p><strong>右からかける場合(相対変換)</strong>$$R_{\mathrm{rel}} = R \color{red}{R_\mathrm{trans}}$$この操作は, 手の向き(動かした後の座標系)を基準にした回転操作に対応します.</p><p>先ほどの例ですと,$$\begin{align*}\underbrace{R_{03}}_{\text{初期状態からみた終端状態の姿勢}} &amp;= \underbrace{R_{01}}_{\text{親指方向}}\ \underbrace{R_{12}}_{\text{手の甲方向}}\ \underbrace{R_{23}}_{\text{小指方向}}\\&amp;= \underbrace{R_{01}}_{\text{耳軸まわり上方向}}\ \underbrace{R_{12}}_{\text{首軸手の甲方向}}\ \underbrace{R_{23}}_{\text{耳軸まわり下方向}}\\\end{align*}$$のように対応しています.</p><h3>角速度の単純な時間積分は姿勢角にならない</h3><p>先ほどの腕の回転の順序を変える例を考えると, どちらの場合も親指方向の変化量の積算値は 90-90 で 0 度, 手の甲方向は 90 度になります.この例から, <strong>結果として異なる姿勢が得られるにもかかわらず, 同じ積算値(角速度の積分値)となる場合がある</strong>ということがわかります.つまり, <strong>角速度を単純に時間積分した数値を見ても, 物体が今どのような姿勢になっているかということは知ることができない</strong>のです.</p><p>このことは, 姿勢の時間変化がそのときの姿勢に大きく依存していることに起因しています.実際, 回転行列の時間微分 $\dot{R}$ は以下のような式になります.$$\dot{R} = R \widehat\omega$$ただし,$$\widehat\omega = \begin{bmatrix}0 &amp; -\omega_3 &amp; \omega_2\\\omega_3 &amp; 0 &amp; -\omega_1\\-\omega_2 &amp; \omega_1 &amp; 0\end{bmatrix}$$</p><h2>まとめと次回予告</h2><p>今回は, 3次元の回転にまつわる性質について紹介しました.我々はこんなややこしい空間に住んでいて, しかも何も考えずにものの姿勢をいじれるって, なかなか驚きですよね.</p><p>書いたことをまとめると, 以下のとおりです.</p><ul><li>3x3回転行列は3次元の姿勢の表現でもあり, 3次元の回転操作を表すものでもある</li><li>座標系0からみた座標系1の姿勢を表す回転行列は, 座標系1のベクトルを座標系0に移すはたらきをする</li><li>3次元の回転は, 順序を入れ替えられない</li><li>3次元の回転は, 回る座標系を基準にするか回らない座標系を基準にするかによって異なる</li><li>角速度ベクトルを単純に積分しても, 姿勢角は得られない</li></ul><p>次回は</p><ul><li>オイラー角とクォータニオン</li><li>なぜオイラー角はクソでクォータニオンは便利なのか</li><li>クォータニオンの幾何的な考え方の3本をお送りしたいと考えています. 12/8頃公開予定.</li></ul>]]></content>
    
    <summary type="html">
    
      &lt;img src=&quot;/2018/12/03/たのしい3次元回転の世界-1-3次元回転の特徴-rogy-Advent-Calendar-2018/yukari_3.jpg&quot; title=&quot;腕を回すと回転行列の気持ちになれます&quot;&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;p&gt;これは &lt;a href=&quot;https://adventar.org/calendars/3279&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;rogy Advent Calendar 2018&lt;/a&gt; 3日目の記事です.
投稿時点で12/3の25時ですが許して.&lt;/p&gt;
&lt;p&gt;3次元回転は, 航空機, 人工衛星, マルチコプターなどの姿勢制御や, 3DCG, VR/AR, コンピュータビジョンなど, 3次元の物体が関わるあらゆる技術に密接に関係しています.
この強力なツールを習得すればできることがぐっと増えるのですが, &lt;strong&gt;回転の順序を入れ替えられない&lt;/strong&gt;ことや, &lt;strong&gt;回転の基準とする座標系の取り方によって結果が変わる&lt;/strong&gt;こと, &lt;strong&gt;数学的な表現が初学者には分かりづらい&lt;/strong&gt;ことなどを理由に, 敬遠されがちなのが実情です.
実際, わたしも特に座標系にはさんざん苦しめられながら学習してきた経緯があり, 研究で取り扱っている今でもたまに混乱することがあるほどです.&lt;/p&gt;
&lt;p&gt;これから書いていくシリーズ「たのしい3次元回転の世界」では, 3次元の回転に関わる事実や諸注意を&lt;strong&gt;なるべく図的に解説&lt;/strong&gt;し, 扱う際の混乱や誤解をなくすことを目標にしています.
特にクォータニオンに関しては, 「なぜこれで回転が表現できるのかわからない」「イメージがしづらい」という意見をよく目にしますので, そのあたりに関する解釈も書いていければと思います.
筆者は数学的な深い知識には乏しい人間ですので, あまり数学的に立ち入った内容にはせず, 読み物としてためになるものが書ければと考えています.
したがって, 数学的にプロパーな解説は, ほかの方の記事や論文等を参照していただくのが良いと思います.&lt;/p&gt;
&lt;p&gt;今回は &lt;strong&gt;3次元回転の特徴&lt;/strong&gt; について記します.
3次元空間内の回転は, 2次元平面上での回転にない特徴を多くもっています.
まずはその特徴に触れることで, &lt;strong&gt;3次元の回転へのイメージを養う&lt;/strong&gt;ことからこのシリーズをはじめたいと思います.&lt;/p&gt;
    
    </summary>
    
      <category term="数学" scheme="http://blog.tokor.org/categories/%E6%95%B0%E5%AD%A6/"/>
    
    
      <category term="たのしい3次元回転の世界" scheme="http://blog.tokor.org/tags/%E3%81%9F%E3%81%AE%E3%81%97%E3%81%843%E6%AC%A1%E5%85%83%E5%9B%9E%E8%BB%A2%E3%81%AE%E4%B8%96%E7%95%8C/"/>
    
      <category term="3次元姿勢" scheme="http://blog.tokor.org/tags/3%E6%AC%A1%E5%85%83%E5%A7%BF%E5%8B%A2/"/>
    
  </entry>
  
  <entry>
    <title>Oculus GoでスタンドアロンVR作業環境を作った</title>
    <link href="http://blog.tokor.org/2018/11/27/Oculus-Go%E3%81%A7%E3%82%B9%E3%82%BF%E3%83%B3%E3%83%89%E3%82%A2%E3%83%AD%E3%83%B3VR%E4%BD%9C%E6%A5%AD%E7%92%B0%E5%A2%83%E3%82%92%E4%BD%9C%E3%81%A3%E3%81%9F/"/>
    <id>http://blog.tokor.org/2018/11/27/Oculus-GoでスタンドアロンVR作業環境を作った/</id>
    <published>2018-11-26T15:54:40.000Z</published>
    <updated>2019-05-12T07:24:29.962Z</updated>
    
    <content type="html"><![CDATA[<img src="/2018/11/27/Oculus-GoでスタンドアロンVR作業環境を作った/oculus_vnc.jpg" title="作業効率はそこまでではないですが, 使えるスペースが広いので助かります"><h2>概要</h2><p>まずはこちらをご覧いただきたい.</p><blockquote class="twitter-tweet" data-conversation="none" data-lang="ja"><p lang="ja" dir="ltr">この人やばいですよ！ <a href="https://t.co/zoASnhPfAc" target="_blank" rel="noopener">pic.twitter.com/zoASnhPfAc</a></p>&mdash; 研磨子 (@tonkatsu_5mile) <a href="https://twitter.com/tonkatsu_5mile/status/1025580222752600064?ref_src=twsrc%5Etfw" target="_blank" rel="noopener">2018年8月4日</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script><p>…… おわかりいただけただろうか.</p><p>わからないと思うので説明すると, この様子はOculus Go上のDebianに映るターミナルを眺めながらテキストエディタで作業をしているところです.写真の人はわたしの後輩で, Oculus Goの上でDebianを走らせて, VR対応なVNCクライアントを自作して接続することで, バーチャルな空間上での作業を可能にしたパイオニアです.見た目はさながらlainの中盤に出てきて川に突っ込んで死んだやばい人(うろ覚え)のようです.</p><p>この取り組みのおもしろいポイントは, Oculus Go(とキーボード)だけですべてが完結するということです.ふつう, こういったヘッドマウントディスプレイはPCへの接続が前提ですが, Oculus Goは単体でゲームに必要な演算やコンテンツの再生ができます.要は実質レンズ付きAndroid端末みたいなものなので, アプリの開発さえできれば何でもありなのです.</p><p>これにめちゃくちゃ感銘を受けたので, 完全にアイディア丸パクりなのですが<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>, なるべくセットアップが簡単になるようにわたしもチャレンジしてみました.最終的にはこんな感じになりました:</p><iframe width="560" height="315" src="https://www.youtube.com/embed/JCn3dl-1KcQ" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe><p>構成としては, 以下のようなものを使用しています.</p><ul><li>Oculus Go<ul><li>UserLAnd</li><li>ovrvnc</li></ul></li><li>Bluetoothキーボード</li></ul><p>Oculus Goは通常のHMDとは異なりケーブルがいらず, 中で処理もできるため, いつでもどこでも作業できることがとても良いポイントですね.もちろん, PC上のVNCサーバに接続すれば, より重い処理をさせたり, 動画を見ながらの作業なんかもできたりします.</p><p>セットアップ方法等の詳細な記事については, 以下をご覧ください(準備中です).</p><ol><li>Bluetoothキーボードの接続とUserLAndのセットアップ(執筆中)</li><li>VNCサーバのセットアップとovrvncでの接続(執筆中)</li><li>キーボード入力に対応する(執筆中)</li></ol><p>やったまま放置してしまっていたので, 今回はひとまず紹介だけ…</p><hr class="footnotes-sep"><section class="footnotes"><ol class="footnotes-list"><li id="fn1" class="footnote-item"><p>記事を書くことは了承してもらってます <a href="#fnref1" class="footnote-backref">↩</a></p></li></ol></section>]]></content>
    
    <summary type="html">
    
      
      
        &lt;img src=&quot;/2018/11/27/Oculus-GoでスタンドアロンVR作業環境を作った/oculus_vnc.jpg&quot; title=&quot;作業効率はそこまでではないですが, 使えるスペースが広いので助かります&quot;&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;p&gt;まずはこちらをご覧いただきた
      
    
    </summary>
    
      <category term="VR" scheme="http://blog.tokor.org/categories/VR/"/>
    
    
      <category term="Oculus Go" scheme="http://blog.tokor.org/tags/Oculus-Go/"/>
    
      <category term="UserLAnd" scheme="http://blog.tokor.org/tags/UserLAnd/"/>
    
      <category term="VNC" scheme="http://blog.tokor.org/tags/VNC/"/>
    
  </entry>
  
  <entry>
    <title>Dual Quaternionで剛体運動を表現する</title>
    <link href="http://blog.tokor.org/2018/11/23/Dual-Quaternion%E3%81%A7%E5%89%9B%E4%BD%93%E9%81%8B%E5%8B%95%E3%82%92%E8%A1%A8%E7%8F%BE%E3%81%99%E3%82%8B/"/>
    <id>http://blog.tokor.org/2018/11/23/Dual-Quaternionで剛体運動を表現する/</id>
    <published>2018-11-23T08:03:10.000Z</published>
    <updated>2019-05-12T07:24:29.949Z</updated>
    
    <content type="html"><![CDATA[<img src="/2018/11/23/Dual-Quaternionで剛体運動を表現する/dq.png" title="3次元の位置・姿勢の表現としてDual Quaternionを使っていきます"><h2>概要</h2><p>クォータニオンを拡張した概念として, Dual Quaternionというものがあります.これを使うと, クォータニオンで考えられる3次元の回転に加えて, 3次元の並進まで1つの枠組みで考えることができるというすぐれもので, ロボティクスやCGの分野でほそぼそと使われています.</p><p>今回はDual Quaternionの基礎と, 3次元の位置・姿勢のDual Quaternion表現, そして剛体の運動をDual Quaternionで記述する方法について書きます.</p><p>若干偏った事前知識が必要かもしれません.誤り等があればまさかりを投げてください.</p><a id="more"></a><h2>準備</h2><h3>クォータニオン(Quaternion)</h3><p><strong>クォータニオン</strong>(quaternion)は,</p><p>クォータニオンはつぎの規則を満たす基底 $1, i, j, k$ をもつ数 $a + bi + cj + dk$ です.$$i^2 = j^2 = k^2 = ijk = -1$$複素数の次元を拡張したような形をしています.クォータニオンは実数と3次元実ベクトルの組として表記されることが多いため, この記事でもその記法を使用することにします.$$\boldsymbol q = (q_0, \boldsymbol{q}_v) = (a, [b\ c\ d]^T)$$</p><p>Dual Quaternionの定義のために, 集合をいくつか定義しておきます<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>.</p><table><thead><tr><th>定義</th><th>説明</th></tr></thead><tbody><tr><td>$\mathbb{H} = \{(q_0, \boldsymbol{q}_v) \mid q_0 \in \mathbb{R}, \boldsymbol{q}_v \in \mathbb{R}^3\}$</td><td>クォータニオン全体の集合</td></tr><tr><td>$\mathbb{H}_u = \{ \boldsymbol q \in \mathbb{H} \mid \lVert \boldsymbol q \rVert = 1 \}$</td><td><strong>単位クォータニオン</strong>全体の集合</td></tr><tr><td>$\mathbb{H}_v = \{\boldsymbol q \in \mathbb{H} \mid q_0 = 0\}$</td><td><strong>ベクトルクォータニオン</strong>全体の集合</td></tr></tbody></table><p>クォータニオンを用いて回転を表現するには, 大きさが1の<strong>単位クォータニオン</strong>であることが重要です(詳しくは後述).</p><p><strong>ベクトルクォータニオン</strong>は, スカラー部分が0でベクトル部分にのみ値を持つクォータニオンのことを指します.クォータニオンからベクトルクォータニオンを取り出す(スカラー部分を0にする)演算子を $\mathrm{vec}(\cdot)$ と表記します.</p><h4>クォータニオンの基本演算</h4><p><strong>和・差</strong><br>$ \boldsymbol q_1 \pm \boldsymbol q_2 = (q_{1,0} \pm q_{2,0},\ \boldsymbol q_{1,v} \pm \boldsymbol q_{2,v})$</p><p><strong>内積</strong><br>$ \boldsymbol q_1 \cdot \boldsymbol q_2 = q_{1,0}q_{2,0} + \boldsymbol q_{1,v} \cdot \boldsymbol q_{2,v}$</p><p><strong>外積</strong><br>$ \boldsymbol q_1 \times \boldsymbol q_2 = (0,\ q_{1,0}\boldsymbol q_{2,v} + q_{2,0}\boldsymbol q_{1,v} + \boldsymbol q_{1,v} \times \boldsymbol q_{2,v})$</p><p><strong>クォータニオン積</strong><br>$ \boldsymbol q_1 \otimes \boldsymbol q_2 = (q_{1,0}q_{2,0} - \boldsymbol q_{1,v} \cdot \boldsymbol q_{2,v},\ q_{1,0}\boldsymbol q_{2,v} + q_{2,0}\boldsymbol q_{1,v} + \boldsymbol q_{1,v} \times \boldsymbol q_{2,v})$</p><p><strong>共役</strong><br>$\boldsymbol q^\ast = (q_0, -\boldsymbol q_v)$</p><p><strong>ノルム</strong><br>$ \lVert \boldsymbol q \rVert = \sqrt{\boldsymbol q \cdot \boldsymbol q} = \sqrt{\boldsymbol q \otimes \boldsymbol q^\ast} = \sqrt{\boldsymbol q^\ast \otimes \boldsymbol q} = \sqrt{q_0^2 + \lVert\boldsymbol q_v\rVert^2}$</p><p><strong>単位元</strong><br>$\boldsymbol q_I = (1, [0\ 0\ 0]^T)$ に対して$$\boldsymbol q_I \otimes \boldsymbol q = \boldsymbol q \otimes \boldsymbol q_I = \boldsymbol q\\\boldsymbol q^\ast \otimes \boldsymbol q = \boldsymbol q \otimes \boldsymbol q^\ast = \lVert \boldsymbol q \rVert^2\boldsymbol q_I$$</p><h4>回転変換としての単位クォータニオン</h4><p>単位円上の複素数は2次元の回転変換(と姿勢)を表わすことができますが, 単位クォータニオンは3次元の回転変換(と姿勢)を表現できます.回転角を $\theta \in \mathbb{R}$, 回転軸を $\boldsymbol\xi \in \mathbb{R}^3$ とするとき,$$\boldsymbol q = (\cos\frac\theta2, \boldsymbol\xi \sin\frac\theta2)$$によって回転を表現できます.</p><p>点の位置ベクトルを表すベクトルクォータニオン $\boldsymbol p = (0, \boldsymbol p_v)$ を $\boldsymbol q$ によって移すには, $\boldsymbol q \otimes \boldsymbol p \otimes \boldsymbol q^\ast$ というクォータニオン積を考えます.</p><p>符号違いの2つの単位クォータニオン $\pm \boldsymbol q$ が同一の回転を表すことに注意してください.$-\boldsymbol q$ は, $\boldsymbol q$ の回転軸軸ベクトル $\xi$ を逆向きにして $2\pi-\theta$ つまり $-\theta$ 回転させることを表していて, この回転はもとの $\boldsymbol q$ による回転と等価になります.また, 大きさが1であるということは, 変換の際に相手の大きさを変えないという性質を表しています.</p><h3>二重数 (Dual Number)</h3><p><strong>二重数</strong>(dual number)はざっくり言うと複素数の別のバリエーションのようなもの<sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup>です.$\epsilon \neq 0, \epsilon^2 = 0$ となるような新しい基底を持ってきて $a + \epsilon b$ としたものが二重数です.</p><p>ちなみに二重数は行列を使って表すことができます<sup class="footnote-ref"><a href="#fn3" id="fnref3">[3]</a></sup>.$$a + \epsilon b : \begin{bmatrix}1 &amp; 0\\0 &amp; 1\end{bmatrix}a + \begin{bmatrix}0&amp; 1\\0 &amp;0\end{bmatrix}b$$コンピュータで数値計算を行う際には, この表現が便利になることがあるらしいです.</p><p>自動微分<sup class="footnote-ref"><a href="#fn4" id="fnref4">[4]</a></sup>という面白い用途もあるようです.</p><h2>DQ(Dual Quaternion)の基礎</h2><p>ようやく本題です.<strong>Dual Quaernion</strong>(二重クォータニオン, 二重四元数)は, 二重数とクォータニオンをあわせたものです.$$\hat{\boldsymbol q} = \boldsymbol q_p + \epsilon \boldsymbol q_d$$ただし, $\boldsymbol q_p, \boldsymbol q_d \in \mathbb{H}$ で, $\boldsymbol q_p$ は <strong>primary part</strong>, $\boldsymbol q_d$ は <strong>dual part</strong> と呼ばれます.</p><table><thead><tr><th>定義</th><th>説明</th></tr></thead><tbody><tr><td>$\hat{\mathbb{H}} = \{ \boldsymbol q_p + \epsilon \boldsymbol q_d \mid \boldsymbol q_p, \boldsymbol q_d \in \mathbb{H}\}$</td><td>DQ全体の集合</td></tr><tr><td>$\hat{\mathbb{H}}_u = \{ \hat{\boldsymbol q} \in \hat{\mathbb{H}} \mid \boldsymbol q_p \in \mathbb{H}_u, \boldsymbol q_p \otimes \boldsymbol q_d^\ast + \boldsymbol q_d \otimes \boldsymbol q_p^\ast = 0 \}$</td><td>単位DQ全体の集合</td></tr><tr><td>$\hat{\mathbb{H}}_v = \{\boldsymbol q \in \hat{\mathbb{H}} \mid \boldsymbol q_p, \boldsymbol q_d \in \mathbb{H}_v \}$</td><td>ベクトルDQ全体の集合</td></tr></tbody></table><p>単位DQのdual partにはノルムに関する制約がなく, 代わりにprimary partとdual partの可換性に関する条件が加わっています(ノルム1とは限らないということに注意してください).</p><p>あとで説明しますが, primary partで回転, dual partで並進に関する部分を表現できるようになり, 剛体の3次元位置・姿勢がDQの枠組みで扱えるようになります.</p><h3>DQの基本演算</h3><p><strong>和・差</strong><br>$ \hat{\boldsymbol q}_1 \pm \hat{\boldsymbol q}_2 = \boldsymbol q_{1,p} \pm \boldsymbol q_{2,p} + \epsilon (\boldsymbol q_{1,d} \pm \boldsymbol q_{2,d}) $</p><p><strong>内積・ノルム</strong><br>$ \hat{\boldsymbol q}_1 \cdot \hat{\boldsymbol q}_2 = \boldsymbol q_{1,p} \cdot \boldsymbol q_{2,p} + \boldsymbol q_{1,d} \cdot \boldsymbol q_{2,d}$</p><p><strong>外積</strong><br>$ \hat{\boldsymbol q}_1 \times \hat{\boldsymbol q}_2 = \boldsymbol q_{1,p} \times \boldsymbol q_{2,p} + \epsilon (\boldsymbol q_{1,p}\times \boldsymbol q_{2,d} + \boldsymbol q_{1,d} \times \boldsymbol q_{2,p})$</p><p><strong>クォータニオン積</strong><br>$ \hat{\boldsymbol q}_1 \otimes \hat{\boldsymbol q}_2 = \boldsymbol q_{1,p} \otimes \boldsymbol q_{2,p} + \epsilon (\boldsymbol q_{1,p}\otimes \boldsymbol q_{2,d} + \boldsymbol q_{1,d} \otimes \boldsymbol q_{2,p})$</p><p><strong>共役</strong></p><ol><li>$\hat{\boldsymbol q}^\ast = \boldsymbol q_p^\ast + \epsilon \boldsymbol q_d^\ast$</li><li>$\bar{\hat{\boldsymbol q}} = \boldsymbol q_p - \epsilon \boldsymbol q_d$</li></ol><p><strong>単位元</strong><br>$\hat{\boldsymbol q}_I = \boldsymbol q_I + \epsilon \boldsymbol 0$ に対して$$\hat{\boldsymbol q}_I \otimes \hat{\boldsymbol q} = \hat{\boldsymbol q} \otimes \hat{\boldsymbol q}_I = \hat{\boldsymbol q}\\\hat{\boldsymbol q}^\ast \otimes \hat{\boldsymbol q} = \hat{\boldsymbol q} \otimes \hat{\boldsymbol q}^\ast = \lVert\hat{\boldsymbol q}\rVert^2\hat{\boldsymbol q}_I$$</p><h2>剛体の位置・姿勢の表現</h2><p>さて, これでツールがようやく揃ったので, ここからは3次元空間上の剛体の運動をDQを用いて記述していきます.</p><p>運動を考える前に, まずはDQで剛体の位置・姿勢を表現します.ワールドに固定された座標系(慣性座標系)を $\Sigma_i$, 剛体に固定された座標系(ボディ座標系)を $\Sigma_b$ とします.慣性座標系からみたボディ座標系の姿勢を表すクォータニオンを $\boldsymbol q_{ib} \in \mathbb{H}_u$ , 慣性座標系から見たボディ座標系の原点の位置をクォータニオン $\boldsymbol p^i_{ib} \in \mathbb{H}_v$ を用いて表します.このとき, 剛体の位置・姿勢は$$\hat{\boldsymbol q}_{ib} = \boldsymbol q_{ib} + \epsilon \frac12 \boldsymbol p^i_{ib} \otimes \boldsymbol q_{ib}$$と書けます.また, ボディ座標系を基準に慣性座標系の原点からの位置ベクトル $\boldsymbol p^b_{ib}$ を取ることもできて, その場合以下のような式になります.$$\hat{\boldsymbol q}_{ib} = \boldsymbol q_{ib} + \epsilon \frac12 \boldsymbol q_{ib} \otimes \boldsymbol p^b_{ib}$$</p><p>$\boldsymbol p^i_{ib}$ と $\boldsymbol p^b_{ib}$ は意味が異なり, 一般に等しくならないことに注意が必要です.これらの間には以下の等式が成り立ちます.$$\boldsymbol p^i_{ib} \otimes \boldsymbol q_{ib} = \boldsymbol q_{ib} \otimes \boldsymbol p^b_{ib}$$この等式を用いることで $\boldsymbol p^i_{ib}$ と $\boldsymbol p^b_{ib}$ との間を行き来できます.</p><h3>なぜこうなるのか(説明が下手なので読み飛ばしてOK)</h3><p>上記の式では, 剛体の位置があまり自明ではない形でdual partに格納されています.この位置・姿勢表現は, 純粋な並進と純粋な回転を表す2つのDQを合成したDQとして定義されています.</p><p>回転せずに $\boldsymbol p_{ib}$ だけ並進移動するDQは以下のようになります.$$\hat{\boldsymbol q}_L = \boldsymbol q_I + \epsilon \frac12 \boldsymbol p_{ib}$$同様に, 回転 $\boldsymbol q_{ib}$ しかしないDQは以下のようになります.$$\hat{\boldsymbol q}_A = \boldsymbol q_{ib} + \epsilon \boldsymbol 0$$</p><p>慣性座標系でボディ座標系を回転させてから, 慣性座標系でボディ座標系の原点を並進移動する変換<sup class="footnote-ref"><a href="#fn5" id="fnref5">[5]</a></sup>は,$$\hat{\boldsymbol q}_L \otimes \hat{\boldsymbol q}_A = \boldsymbol q_{ib} + \epsilon \frac12 \boldsymbol p_{ib} \otimes \boldsymbol q_{ib}$$と計算できます<sup class="footnote-ref"><a href="#fn6" id="fnref6">[6]</a></sup>.このときの $\boldsymbol p_{ib}$ は, 慣性座標系で表現されたボディ座標系の原点の位置 $\boldsymbol p^i_{ib}$ に相当します.</p><p>同様に, 慣性座標系でボディ座標系の原点を並進移動させてから, 慣性座標系でボディ座標系を回転する変換<sup class="footnote-ref"><a href="#fn7" id="fnref7">[7]</a></sup>は,$$\hat{\boldsymbol q}_A \otimes \hat{\boldsymbol q}_L = \boldsymbol q_{ib} + \epsilon \frac12 \boldsymbol q_{ib} \otimes \boldsymbol p_{ib}$$と計算でき, このときの $\boldsymbol p_{ib}$ は, ボディ座標系で見た「慣性座標系の原点からボディ座標系の原点へのベクトル」$\boldsymbol p^b_{ib}$に相当します.</p><p>…なにやらややこしいですね.変換が可換ではないので, どうしてもこのようなややこしさが生じてしまいます.</p><p>ここで確認したように, $\boldsymbol p^i_{ib}$ と $\boldsymbol p^b_{ib}$ はそれぞれ違うものを指し示しています.したがって, 混同してしまうと座標を正しく表現することができなくなります.$\boldsymbol p^i_{ib}$ が物理的にわかりやすいのですが, 後述するように, こちらを採用すると今度は角速度がわかりづらくなります.</p><h2>運動学(キネマティクス)</h2><h3>クォータニオンと角速度</h3><p>まずは回転のみに着目してみます.剛体の姿勢を表す単位クォータニオン $\boldsymbol q_{ib} \in \mathbb{H}_u$ の時間微分は, ボディ角速度ベクトルを表すクォータニオン $\boldsymbol \omega^b \in \mathbb{H}_v$ を用いて$$\dot{\boldsymbol q}_{ib} = \frac12 \boldsymbol q_{ib} \otimes \boldsymbol \omega^b$$と書けることが知られています<sup class="footnote-ref"><a href="#fn8" id="fnref8">[8]</a></sup>.</p><p>オイラー角やロール・ピッチ・ヨー角を使用した姿勢表現の場合, 姿勢角の時間微分と角速度ベクトルとの間の変換が必要になりますが, クォータニオンを使えば現在の姿勢と角速度ベクトルのクォータニオン積という非常にシンプルな形で時間微分を書くことができます.しかも, 冒頭で説明したような特異点の問題もありません.</p><p>また, 別の角速度(空間角速度, spatial angular velocity)を使って$$\dot{\boldsymbol q}_{ib} = \frac12 \boldsymbol \omega^i \otimes \boldsymbol q_{ib}$$と書くこともできます.</p><p>機体に搭載するジャイロセンサで計測できるのはボディ角速度 $\boldsymbol \omega^b$ です.実用を考えると, 後者の式は少し使いづらくなります.空間角速度とボディ角速度の間には以下の関係が成り立つので, これを利用することで行き来することができます.$$\boldsymbol \omega^i \otimes \boldsymbol q_{ib} = \boldsymbol q_{ib} \otimes \boldsymbol \omega^b$$この式は, 先述した $\boldsymbol p^i, \boldsymbol p^b$ に関する式とも対応しています.</p><h3>DQの時間微分</h3><p>DQの時間微分もクォータニオンの時間微分と対応づいた形で書くことができます.DQにおける速度に対応する $\hat{\boldsymbol\omega}$ のことを, <strong>Dual Velocity</strong> と呼びます.</p><p><strong>ボディ速度</strong>(body velocity)のベクトルクォータニオンを $\boldsymbol v^b = \dot{\boldsymbol p}^b_{ib} + \boldsymbol \omega^b \times \boldsymbol p^b_{ib} \in \mathbb{H}_v$ と定義します<sup class="footnote-ref"><a href="#fn9" id="fnref9">[9]</a></sup>.泥臭く各成分を微分してきます.$$\begin{align*}\dot{\hat{\boldsymbol q}}_{ib} &amp;= \dot{\boldsymbol q}_{ib} + \epsilon \frac12\left( \dot{\boldsymbol q}_{ib} \otimes \boldsymbol p^b_{ib} + \boldsymbol q_{ib} \otimes \dot{\boldsymbol p}^b_{ib} \right)\\&amp;= \frac12 \boldsymbol q_{ib} \otimes \boldsymbol \omega^b + \epsilon \frac12\left( \frac12 \boldsymbol q_{ib} \otimes \boldsymbol \omega^b \otimes \boldsymbol p^b_{ib} + \boldsymbol q_{ib} \otimes  \dot{\boldsymbol p}^b_{ib} \right)\\&amp;= \frac12 \boldsymbol q_{ib} \otimes \boldsymbol \omega^b + \epsilon \frac12\left( \frac12 \boldsymbol q_{ib} \otimes (\boldsymbol \omega^b \otimes \boldsymbol p^b_{ib} - 2 \boldsymbol \omega^b \times \boldsymbol p^b_{ib}) + \boldsymbol q_{ib} \otimes \boldsymbol v^b \right)\end{align*}$$クォータニオン積の定義と,  $\boldsymbol \omega^b, \boldsymbol p^b_{ib}$ がいずれもベクトルクォータニオンであることから,  $\boldsymbol \omega^b \otimes \boldsymbol p^b_{ib} - 2 \boldsymbol \omega^b \times \boldsymbol p^b_{ib} = \boldsymbol p^b_{ib} \otimes \boldsymbol \omega^b$ が成り立つので,$$\begin{align*}\dot{\hat{\boldsymbol q}}_{ib} &amp;= \frac12 \boldsymbol q_{ib} \otimes \boldsymbol \omega^b + \epsilon \frac12\left( \frac12 \boldsymbol q_{ib} \otimes \boldsymbol p^b_{ib} \otimes \boldsymbol \omega^b + \boldsymbol q_{ib} \otimes \boldsymbol v^b \right)\\&amp;= \frac12 \hat{\boldsymbol q}_{ib} \otimes \hat{\boldsymbol\omega}^b\end{align*}$$となります.ただし, $\hat{\boldsymbol\omega}^b = \boldsymbol \omega^b + \epsilon \boldsymbol v^b$ とおきました.</p><p>同様にして$$\begin{align*}\dot{\hat{\boldsymbol q}}_{ib} &amp;= \frac12 \hat{\boldsymbol\omega}^i \otimes \hat{\boldsymbol q}_{ib}\end{align*}$$も言えるのですが, 先述したように空間角速度 $\boldsymbol\omega^i$ は解釈がしづらく, また, 並進成分である $\boldsymbol v^i$ も $\dot{\boldsymbol p}_{ib}^i$ ではなく, 角速度 $\boldsymbol \omega^i$ と干渉する形になるため, 物理的な解釈が難しくなります.ボディ速度と空間速度は, 単にみる座標系が異なるだけではなく, そのベクトルが意味する物理的な量も異なります.詳しいことに関しては, 書籍<sup class="footnote-ref"><a href="#fn10" id="fnref10">[10]</a></sup>に詳しく書かれていますので, そちらを参照してください.</p><h2>動力学(ダイナミクス)</h2><p>回転行列の単純な2階微分に物理的な意味がないのと同様に, クォータニオンの2階微分には特に物理的に有用な意味はありません.物理的に意味のある加速度・角加速度に対応するものは $\boldsymbol v, \boldsymbol \omega$ の時間微分で, これらが我々が扱うべきものです.</p><p>最も単純な運動方程式 $ma = F$ は, 運動量を $p = mv$ とすると,$$\dot{p} = F$$と書き直すことができます.これと同様の方法で, DQを使って並進と回転の運動量を定義し, そこから運動方程式を求めていきます.</p><h3>運動量(Dual Momentum)</h3><p>DQによる運動量(<strong>dual momentum</strong>)の定義の仕方には複数の流儀があるようなのですが, 本稿では文献<sup class="footnote-ref"><a href="#fn11" id="fnref11">[11]</a></sup>のものを採用します.$$\hat{\boldsymbol h}^b = \hat M \hat{\boldsymbol \omega}^b = \boldsymbol h_L + \epsilon \boldsymbol h_A$$$\boldsymbol h_L, \boldsymbol h_A$ は, それぞれ並進・回転の運動量です.$\hat M$ は慣性行列に対応する演算子(dual inertia operator)で, 以下の操作を行うものです.$$\hat M \hat{\boldsymbol \omega}^b = \begin{bmatrix}1 &amp; \boldsymbol 0\\\boldsymbol 0 &amp; mI_3\end{bmatrix} \boldsymbol v^b + \epsilon \begin{bmatrix}1 &amp; \boldsymbol 0\\\boldsymbol 0 &amp; J^b\end{bmatrix} \boldsymbol \omega^b$$若干記号を乱用していますが, $\boldsymbol v^b, \boldsymbol \omega^b$ のベクトル部にそれぞれ質量と慣性テンソルをかけて, primary partとdual partを入れ替える操作を表しています.</p><h3>運動方程式</h3><p>Dual momentumを使ってDQで運動方程式を記述すると, 以下のようになります.$$\begin{align*}\dot{\hat{\boldsymbol h}}^b = \hat M \dot{\hat{\boldsymbol \omega}}^b &amp;= \hat{\boldsymbol f}^b - \hat{\boldsymbol \omega}^b \times \hat M \hat{\boldsymbol \omega}^b\\&amp;= \underbrace{\hat{\boldsymbol f}^b_u}_{\text{印加力}} - \underbrace{\hat{\boldsymbol f}^b_G}_{\text{重力}} - \hat{\boldsymbol \omega}^b \times \hat M \hat{\boldsymbol \omega}^b\end{align*}$$このように, 非常にコンパクトな形で運動方程式を書き表すことができます.通常であれば, 以下のようになります.$$M \begin{bmatrix}\dot{v}^b\\\dot{\omega}^b\end{bmatrix} = f^b - \begin{bmatrix}m \omega^b \times v^b\\\omega^b \times (J \omega^b)\end{bmatrix}$$……まあ, ほとんど変わらないわけですが, 遠心・コリオリ項がDQの演算によってぎゅっとまとまっただけでもありがたいものです.</p><p>また, ここまでで見てきたように演算はクォータニオンと対応する形になるので, 二重数の実装さえうまくできれば, 回転のみのコードから並進を含んだものへの移行は楽なのではないかと思います.</p><h3>疑問点</h3><p>Dual inertia operatorにおいて, primary partとdual partが入れ替わっているのは, 計算上は理解できるのですが, 何か物理的・幾何的な本質に関連しているのでしょうか?何かご存知の方やピンときた方は教えてください.</p><hr class="footnotes-sep"><section class="footnotes"><ol class="footnotes-list"><li id="fn1" class="footnote-item"><p>記号の文字HはHamiltonの頭文字から来ています.  <a href="#fnref1" class="footnote-backref">↩</a></p></li><li id="fn2" class="footnote-item"><p>いずれも二元数というものに分類されます <a href="#fnref2" class="footnote-backref">↩</a></p></li><li id="fn3" class="footnote-item"><p>この記事の本筋とは無関係ですが, 複素数も同様に行列表現ができます.$$a + i b : \begin{bmatrix}1 &amp; 0\\0 &amp; 1\end{bmatrix}a + \begin{bmatrix}0&amp; -1\\1 &amp;0\end{bmatrix}b$$この複素数の行列表現において $a = \cos\theta,\ b = \sin\theta$ とすると, 2次元の回転行列$$R(\theta) = \begin{bmatrix}\cos\theta &amp; -\sin\theta\\\sin\theta &amp; \cos\theta\end{bmatrix}$$が得られます.  <a href="#fnref3" class="footnote-backref">↩</a></p></li><li id="fn4" class="footnote-item"><p><a href="https://ja.wikipedia.org/wiki/%E8%87%AA%E5%8B%95%E5%BE%AE%E5%88%86#%E4%BA%8C%E9%87%8D%E6%95%B0%E3%82%92%E7%94%A8%E3%81%84%E3%81%9F%E8%87%AA%E5%8B%95%E5%BE%AE%E5%88%86" target="_blank" rel="noopener">自動微分 - Wikipedia</a> <a href="#fnref4" class="footnote-backref">↩</a></p></li><li id="fn5" class="footnote-item"><p>慣性座標系でボディ座標系の原点を並進移動してから, できあがったボディ座標系でボディ座標系を回転させる変換と等価 <a href="#fnref5" class="footnote-backref">↩</a></p></li><li id="fn6" class="footnote-item"><p>回転行列や同次変換行列と同じ要領で, 絶対変換は左から, 相対変換は右から掛けます.  <a href="#fnref6" class="footnote-backref">↩</a></p></li><li id="fn7" class="footnote-item"><p>慣性座標系でボディ座標系を回転してから, できあがったボディ座標系でボディ座標系を並進移動する変換と等価 <a href="#fnref7" class="footnote-backref">↩</a></p></li><li id="fn8" class="footnote-item"><p>この式の導出をなんだかんだで見たことがないのですが, 単純に微分の定義とか回転行列の微分とかから出せるんですかね？ <a href="#fnref8" class="footnote-backref">↩</a></p></li><li id="fn9" class="footnote-item"><p>これは, 単純計算により $\boldsymbol v^i$ を $\boldsymbol q_{ib}^\ast$ で回転させた $\boldsymbol q_{ib}^\ast \otimes \boldsymbol v^i \otimes \boldsymbol q_{ib}$ , つまり慣性座標系での並進速度を機体座標系でみたものと等しくなります.  <a href="#fnref9" class="footnote-backref">↩</a></p></li><li id="fn10" class="footnote-item"><p>R.M. Murray, Z. Li, and S.S. Sastry, <a href="https://amzn.to/2KrbU2I" target="_blank" rel="noopener">“A Mathematical Introduction to Robotic Manipulation”</a>, 1994, CRC Press <a href="#fnref10" class="footnote-backref">↩</a></p></li><li id="fn11" class="footnote-item"><p>T.S. Andersen, T.A. Johansen, and R. Kristiansen, “Dual-quaternion backstepping control for a fully-actuated rigid-body”, 2018, American Control Conference <a href="#fnref11" class="footnote-backref">↩</a></p></li></ol></section>]]></content>
    
    <summary type="html">
    
      &lt;img src=&quot;/2018/11/23/Dual-Quaternionで剛体運動を表現する/dq.png&quot; title=&quot;3次元の位置・姿勢の表現としてDual Quaternionを使っていきます&quot;&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;p&gt;クォータニオンを拡張した概念として, Dual Quaternionというものがあります.
これを使うと, クォータニオンで考えられる3次元の回転に加えて, 3次元の並進まで1つの枠組みで考えることができるというすぐれもので, ロボティクスやCGの分野でほそぼそと使われています.&lt;/p&gt;
&lt;p&gt;今回はDual Quaternionの基礎と, 3次元の位置・姿勢のDual Quaternion表現, そして剛体の運動をDual Quaternionで記述する方法について書きます.&lt;/p&gt;
&lt;p&gt;若干偏った事前知識が必要かもしれません.
誤り等があればまさかりを投げてください.&lt;/p&gt;
    
    </summary>
    
      <category term="数学" scheme="http://blog.tokor.org/categories/%E6%95%B0%E5%AD%A6/"/>
    
    
      <category term="Dual Quaternion" scheme="http://blog.tokor.org/tags/Dual-Quaternion/"/>
    
      <category term="SE(3)" scheme="http://blog.tokor.org/tags/SE-3/"/>
    
  </entry>
  
  <entry>
    <title>SPRESENSE SDKのセットアップでPermission denied (publickey)が出る場合の対処法</title>
    <link href="http://blog.tokor.org/2018/08/17/SPRESENSE-SDK%E3%81%AE%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97%E3%81%A7Permission-denied-publickey-%E3%81%8C%E5%87%BA%E3%82%8B%E5%A0%B4%E5%90%88%E3%81%AE%E5%AF%BE%E5%87%A6%E6%B3%95/"/>
    <id>http://blog.tokor.org/2018/08/17/SPRESENSE-SDKのセットアップでPermission-denied-publickey-が出る場合の対処法/</id>
    <published>2018-08-17T07:13:25.000Z</published>
    <updated>2019-05-12T07:24:29.966Z</updated>
    
    <content type="html"><![CDATA[<h2>概要</h2><p>(この記事は2018/8/17時点での内容です)</p><p>これは公式ドキュメンテーションが悪いです．以下のように書き換えて対処してください．</p><h2>解決法</h2><p>SPRESENSE SDKチュートリアルの手順の中で</p><figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">$ git clone --recursive git@github.com:sonydevworld/spresense.git</span><br></pre></td></tr></table></figure><p>と書かれている項目を，</p><figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">$ git clone --recursive https://github.com/sonydevworld/spresense.git</span><br></pre></td></tr></table></figure><p>に置き換えて実行しますす．</p><p>問題なくクローンできるはずです．</p><h2>なぜこのようなことが起こるか</h2><p>OS側に鍵を用意していない/自分のGitHubアカウントに公開鍵を置いていない場合にこうなります．</p><p>SONYさん，結構たくさんのお客さんが困っているみたいなので，修正してください．</p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h2&gt;概要&lt;/h2&gt;
&lt;p&gt;(この記事は2018/8/17時点での内容です)&lt;/p&gt;
&lt;p&gt;これは公式ドキュメンテーションが悪いです．以下のように書き換えて対処してください．&lt;/p&gt;
&lt;h2&gt;解決法&lt;/h2&gt;
&lt;p&gt;SPRESENSE SDKチュートリアルの手順の中で&lt;/p&gt;

      
    
    </summary>
    
      <category term="電子工作" scheme="http://blog.tokor.org/categories/%E9%9B%BB%E5%AD%90%E5%B7%A5%E4%BD%9C/"/>
    
      <category term="SPRESENSE" scheme="http://blog.tokor.org/categories/%E9%9B%BB%E5%AD%90%E5%B7%A5%E4%BD%9C/SPRESENSE/"/>
    
    
      <category term="Permission denied" scheme="http://blog.tokor.org/tags/Permission-denied/"/>
    
      <category term="publickey" scheme="http://blog.tokor.org/tags/publickey/"/>
    
  </entry>
  
  <entry>
    <title>SPRESENSEのNuttXに起動スクリプトを設定する</title>
    <link href="http://blog.tokor.org/2018/08/14/SPRESENSE%E3%81%AENuttX%E3%81%AB%E8%B5%B7%E5%8B%95%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B/"/>
    <id>http://blog.tokor.org/2018/08/14/SPRESENSEのNuttXに起動スクリプトを設定する/</id>
    <published>2018-08-14T11:25:04.000Z</published>
    <updated>2019-05-12T07:24:29.966Z</updated>
    
    <content type="html"><![CDATA[<img src="/2018/08/14/SPRESENSEのNuttXに起動スクリプトを設定する/spresense.jpg"><h2>概要</h2><p>Arduino IDEで作成したプログラムは，電源投入時に自動実行されるようになっていますが，SPRESENSE SDKを使用して直接NuttX上に実装したコマンドは，デフォルトではnshを使って手動で実行する必要があります．実はnshには起動スクリプト(init.dのようなもの)の機能があり，適切に設定を行えば，プログラムの起動や環境変数の設定などを自動で行うことができます．</p><p>この記事では，SPRESENSEのNuttXの設定を変更し，起動スクリプトを有効化する方法を紹介します．</p><a id="more"></a><h2>準備</h2><p>起動スクリプトは <code>nsh_romfsimg.h</code> というヘッダの中に記述されたROMFSというファイルシステムの中に格納されます．ROMFSの生成には <code>genromfs</code> が必要なので，まずはインストールします．</p><p>Ubuntu</p><figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">$ sudo apt-get install genromfs</span><br></pre></td></tr></table></figure><p>その他のプラットフォームでパッケージがない場合は，SDKのセットアップ時に <code>kconfig-frontends</code> と一緒にソースがついてきているので，それをビルドして使います．</p><p>参考→ <a href="/2018/08/03/SPRESENSE-SDKをArch-Linuxにセットアップする/" title="SPRESENSE SDKをArch Linuxにセットアップする">SPRESENSE SDKをArch Linuxにセットアップする</a></p><h2>本題</h2><h3>menuconfigでの設定</h3><p>SDKのディレクトリに移動して，menuconfigで設定を行います．</p><figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">$ make menuconfig</span><br></pre></td></tr></table></figure><ul><li>System Tools→NSH Library→Scripting Support→Support ROMFS start-up scriptにチェック</li><li>System Tools→NSH Library→Scripting Support→ROMFS header locationをArchitecture-specificに変更</li></ul><p>2番めの設定は，SPRESENSEの <code>bsp</code> 内に <code>nsh_romfsimg.h</code> を用意することを意味しています．その他の部分はデフォルトのままで構いません．</p><h3>起動スクリプトのテンプレート</h3><p>つぎに，起動スクリプトのテンプレートを <code>bsp</code> の中にコピーします．</p><figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">$ cp system/nshlib/rcS.template bsp/include/arch/board</span><br><span class="line">$ cd bsp/include/arch/board</span><br></pre></td></tr></table></figure><p><code>rcS.template</code> ファイルは，そのままNuttXの <code>/etc/init.d/rcS</code> ファイルになります．デフォルトではRAMディスクを生成して <code>/tmp</code> にマウントするというスクリプトが書かれています．</p><p>たとえば <code>rcS.template</code> の中身を</p><figure class="highlight"><pre>hello &amp;</pre></figure><p>としておけば，<code>hello</code> が起動時に自動実行されるようになります．また，</p><figure class="highlight"><pre><span class="GruvboxRed">set</span><span class="GruvboxBlue"> HOGE foo</span></pre></figure><p>などと書いておくことで，環境変数 <code>HOGE</code> の値が <code>foo</code> に起動時に設定され，nshから利用できるようになります．</p><h3>ROMFSの生成</h3><p>ひと通り編集したら，ROMFSを生成します．この作業は付属のシェルスクリプトで簡単にできます．<code>sdk/bsp/include/arch/board</code> の中で以下を実行します．</p><figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">$ ../../../../tools/mkromfs.sh ../../../../</span><br></pre></td></tr></table></figure><p>ただし， <code>../../../../</code> はSDKのディレクトリを指していることに注意してください．これで，ROMFSのバイナリが書かれた <code>nsh_romfsimg.h</code> が <code>bsp/include/arch/board</code> ディレクトリの中に生成されます．</p><p>この作業は <code>make</code> 中に自動実行はされないので，<code>rcS.template</code> を変更したら手動で実行するようにしてください．</p><h3>リビルド</h3><p>変更した設定とROMFSを反映させるために，再度ビルドを行います．うまくいかない場合は <code>make clean</code> や <code>make cleankernel</code> をしてから再試行してください．</p><figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">$ make buildkernel</span><br><span class="line">$ make</span><br></pre></td></tr></table></figure><h3>動作の確認</h3><p>Flashツールで <code>nuttx.spk</code> を書き込み，minicom等でシリアルポートに接続します．<code>ls</code> してみると，<code>etc</code> というディレクトリができている<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>ことがわかります．また，<code>/etc/init.d/rcS</code> に，<code>rcS.template</code> に書いた中身が反映されていることも確認できます．</p><p>以下の例は，デフォルトの起動スクリプトをそのまま使用した場合のものです．</p><figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">nsh&gt; ls</span><br><span class="line">/:</span><br><span class="line"> dev/</span><br><span class="line"> etc/</span><br><span class="line"> mnt/</span><br><span class="line"> proc/</span><br><span class="line"> var/</span><br><span class="line">nsh&gt; cat /etc/init.d/rcS</span><br><span class="line"># Create a RAMDISK and mount it at &quot;/tmp&quot;</span><br><span class="line"></span><br><span class="line">mkrd -m 1 -s 512 1024</span><br><span class="line">mkfatfs /dev/ram1</span><br><span class="line">mount -t vfat /dev/ram1 &quot;/tmp&quot;</span><br></pre></td></tr></table></figure><h2>Tips</h2><ul><li>SDカードにスクリプトの本体を置くこともできます．その場合は，<code>menuconfig</code> でSDカードの設定をした上で，以下のように <code>rcS.template</code> を変更します．</li></ul><figure class="highlight"><pre><span class="GruvboxRed">set</span><span class="GruvboxBlue"> FRC /mnt/sd0/rc.txt</span><span class="GruvboxRed">if </span><span class="Normal">[</span> <span class="GruvboxRed">-f</span> <span class="GruvboxAqua">$FRC</span> <span class="Normal">]</span><span class="GruvboxRed">then</span>    sh <span class="GruvboxAqua">$FRC</span><span class="GruvboxRed">fi</span></pre></figure><p>これで，SDカード直下に置いた <code>rc.txt</code> が自動で読み込まれて実行されるようになります．</p><ul><li>nshでのスクリプトの書き方については，公式のドキュメンテーションを参照してください．形式は通常のシェルスクリプトに似ていますが，パイプや入力リダイレクトのような基本的な機能がないことに気をつけてください．<br><a href="http://docs.huihoo.com/nuttx/NuttShell.html" target="_blank" rel="noopener">NuttShell</a></li></ul><hr class="footnotes-sep"><section class="footnotes"><ol class="footnotes-list"><li id="fn1" class="footnote-item"><p>ROMFSがマウントされている <a href="#fnref1" class="footnote-backref">↩</a></p></li></ol></section>]]></content>
    
    <summary type="html">
    
      &lt;img src=&quot;/2018/08/14/SPRESENSEのNuttXに起動スクリプトを設定する/spresense.jpg&quot;&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;p&gt;Arduino IDEで作成したプログラムは，電源投入時に自動実行されるようになっていますが，SPRESENSE SDKを使用して直接NuttX上に実装したコマンドは，デフォルトではnshを使って手動で実行する必要があります．
実はnshには起動スクリプト(init.dのようなもの)の機能があり，適切に設定を行えば，プログラムの起動や環境変数の設定などを自動で行うことができます．&lt;/p&gt;
&lt;p&gt;この記事では，SPRESENSEのNuttXの設定を変更し，起動スクリプトを有効化する方法を紹介します．&lt;/p&gt;
    
    </summary>
    
      <category term="電子工作" scheme="http://blog.tokor.org/categories/%E9%9B%BB%E5%AD%90%E5%B7%A5%E4%BD%9C/"/>
    
      <category term="SPRESENSE" scheme="http://blog.tokor.org/categories/%E9%9B%BB%E5%AD%90%E5%B7%A5%E4%BD%9C/SPRESENSE/"/>
    
    
      <category term="NuttX" scheme="http://blog.tokor.org/tags/NuttX/"/>
    
      <category term="rcS" scheme="http://blog.tokor.org/tags/rcS/"/>
    
  </entry>
  
  <entry>
    <title>NuttShell(nsh)のボーレートを変える</title>
    <link href="http://blog.tokor.org/2018/08/10/NuttShell-nsh-%E3%81%AE%E3%83%9C%E3%83%BC%E3%83%AC%E3%83%BC%E3%83%88%E3%82%92%E5%A4%89%E3%81%88%E3%82%8B/"/>
    <id>http://blog.tokor.org/2018/08/10/NuttShell-nsh-のボーレートを変える/</id>
    <published>2018-08-09T15:46:19.000Z</published>
    <updated>2019-05-12T07:24:29.962Z</updated>
    
    <content type="html"><![CDATA[<img src="/2018/08/10/NuttShell-nsh-のボーレートを変える/nsh.png"><h2>概要</h2><p>NuttXに付属しているシェルであるNuttShellにアプリケーションの実行ログを垂れ流すと，転送速度が足りず，バッファが詰まって処理が遅くなることがあります．これはNuttXのカーネルの設定で転送速度(ボーレート)を変更することで解決できます．</p><p>この記事では，SPRESENSEのNuttXを例に設定方法を紹介します．ほかのプラットフォームでも同様に変更が可能なはずです．</p><h2>SPRESENSEでの手順例</h2><div class="video-container"><iframe src="//www.youtube.com/embed/5sAm7Yoo7Sg" frameborder="0" allowfullscreen></iframe></div><p>設定を保存するまでの動画を用意したので，こちらをご確認ください．menuconfigでは，矢印キーで選択，Enterで下の階層に入り，Escを2回押して上の階層に戻れます．</p><ol><li>ターミナルでSPRESENSE SDKのディレクトリに移動し，カーネルのmenuconfigを実行します．</li></ol>  <figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">$ make menuconfigkernel</span><br></pre></td></tr></table></figure><ol start="2"><li>“Device Drivers” -&gt; “Serial Driver Support” -&gt; “Serial Console” から，ペリフェラルの名前(UART1等)を確認します．</li><li>確認した名前に対応する設定(&quot;UART1 Configuration&quot;等)を開き，“BAUD rate” を変更します．</li><li>設定を保存して終了します．</li><li>カーネルとアプリケーションをビルドし直します．</li></ol>  <figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">$ make cleankernel</span><br><span class="line">$ make buildkernel</span><br><span class="line">$ make clean</span><br><span class="line">$ make</span><br></pre></td></tr></table></figure><h2>注意事項</h2><ul><li>SPRESENSEでは，実用上921600bpsが限界なようです．これよりも大きい値を指定すると正常な動作が期待できなくなります．</li><li><code>tools/flash.py</code> を使用した書き込みでは，2Mbpsでも可能です．</li></ul>]]></content>
    
    <summary type="html">
    
      
      
        &lt;img src=&quot;/2018/08/10/NuttShell-nsh-のボーレートを変える/nsh.png&quot;&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;p&gt;NuttXに付属しているシェルであるNuttShellにアプリケーションの実行ログを垂れ流すと，転送速度が足りず，バッファが詰まって処理
      
    
    </summary>
    
      <category term="電子工作" scheme="http://blog.tokor.org/categories/%E9%9B%BB%E5%AD%90%E5%B7%A5%E4%BD%9C/"/>
    
      <category term="SPRESENSE" scheme="http://blog.tokor.org/categories/%E9%9B%BB%E5%AD%90%E5%B7%A5%E4%BD%9C/SPRESENSE/"/>
    
    
      <category term="NuttShell" scheme="http://blog.tokor.org/tags/NuttShell/"/>
    
      <category term="nsh" scheme="http://blog.tokor.org/tags/nsh/"/>
    
      <category term="ボーレート" scheme="http://blog.tokor.org/tags/%E3%83%9C%E3%83%BC%E3%83%AC%E3%83%BC%E3%83%88/"/>
    
  </entry>
  
  <entry>
    <title>SPRESENSEのNuttX上でuClibc++を使用したC++アプリケーションを動かす</title>
    <link href="http://blog.tokor.org/2018/08/08/SPRESENSE%E3%81%AENuttX%E4%B8%8A%E3%81%A7uClibc-%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%9FC-%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E5%8B%95%E3%81%8B%E3%81%99/"/>
    <id>http://blog.tokor.org/2018/08/08/SPRESENSEのNuttX上でuClibc-を使用したC-アプリケーションを動かす/</id>
    <published>2018-08-08T11:43:58.000Z</published>
    <updated>2019-05-12T07:24:29.969Z</updated>
    
    <content type="html"><![CDATA[<h2>概要</h2><p><code>nuttx/libxx</code> の中に基本的なC++の機能を提供するためのライブラリは付属していますが，STLがカバーしている <code>iostream</code> や <code>vector</code> 等の機能を利用したプログラムは，そのままではコンパイルできません．この記事では，軽量なSTL互換ライブラリであるuClibc++をSPRESENSEのNuttXに組み込み，C++の標準ライブラリを利用できるようにする方法を紹介します．</p><p>バージョン等</p><ul><li>SPRESENSE SDK v1.0.1</li><li>NuttX: git(<code>33597a8</code>)</li></ul><a id="more"></a><h2>uClibc++のクローンとインストール</h2><p>NuttXの<a href="https://bitbucket.org/nuttx/uclibc" target="_blank" rel="noopener">uClibc++</a>をsdkと同じディレクトリにクローンします．</p><figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">$ git clone https://bitbucket.org/nuttx/uclibc.git</span><br></pre></td></tr></table></figure><p>SPRESENSEのNuttXは本家NuttXの最新版とはディレクトリ構造が異なるため，<code>install.sh</code> を編集して対応させます．</p><figure class="highlight"><pre><span class="GruvboxRed">- libs_path=${nuttx_path}/libs</span><span class="GruvboxGreen">+ libs_path=${nuttx_path}</span></pre></figure><p>実行してファイルをインストールします．</p><figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">$ cd uclibc</span><br><span class="line">$ ./install.sh ../nuttx</span><br></pre></td></tr></table></figure><p>これによって，<code>nuttx/include/uClibc++</code> の中にヘッダが，<code>nuttx/libxx/uClibc++</code> の中にソースがコピーされます．<code>nuttx/Make.defs</code> を編集して，uClibc++のヘッダのあるディレクトリをインクルードパスに追加します．</p><figure class="highlight"><pre><span class="GruvboxRed">- ARCHXXINCLUDES = -I. -isystem $(TOPDIR)/include -isystem $(TOPDIR)/include/cxx</span><span class="GruvboxGreen">+ ARCHXXINCLUDES = -I. -isystem $(TOPDIR)/include -isystem $(TOPDIR)/include/cxx -isystem $(TOPDIR)/include/uClibc++</span></pre></figure><h2>パッチを当てる</h2><p>最近のコンパイラではそのままビルドできないため，パッチを当てます．</p><p>参考: <a href="http://lists.busybox.net/pipermail/uclibc/2012-June/046920.html" target="_blank" rel="noopener">[PATCH 2/2 uClibc++] Fix ARM EABI build failure in include/unwind-cxx.h</a></p><figure class="highlight"><pre><span class="GruvboxYellow">--- unwind-cxx.h.orig   2018-08-09 01:13:19.611199326 +0900</span><span class="GruvboxOrange">+++ unwind-cxx.h    2018-08-09 01:13:51.634592945 +0900</span><span class="GruvboxBlue">@@ -184,8 +184,9 @@</span> // This is the exception class we report -- &quot;GNUCC++\0&quot;.<span class="GruvboxRed">-const _Unwind_Exception_Class __gxx_exception_class =</span><span class="GruvboxRed">-  ((((((((_Unwind_Exception_Class) &apos;G&apos;</span><span class="GruvboxGreen">+const _Unwind_Exception_Class __gxx_exception_class</span><span class="GruvboxGreen">+#ifndef __ARM_EABI_UNWINDER__</span><span class="GruvboxGreen">+  = ((((((((_Unwind_Exception_Class) &apos;G&apos;</span>          &lt;&lt; 8 | (_Unwind_Exception_Class) &apos;N&apos;)         &lt;&lt; 8 | (_Unwind_Exception_Class) &apos;U&apos;)        &lt;&lt; 8 | (_Unwind_Exception_Class) &apos;C&apos;)<span class="GruvboxBlue">@@ -193,6 +194,9 @@</span>      &lt;&lt; 8 | (_Unwind_Exception_Class) &apos;+&apos;)     &lt;&lt; 8 | (_Unwind_Exception_Class) &apos;+&apos;)    &lt;&lt; 8 | (_Unwind_Exception_Class) &apos;\0&apos;);<span class="GruvboxGreen">+#else</span><span class="GruvboxGreen">+  = &quot;GNUCC++&quot;;</span><span class="GruvboxGreen">+#endif</span> // GNU C++ personality routine, Version 0.</pre></figure><h2>NuttXカーネルの設定と再ビルド</h2><figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">$ cd sdk</span><br><span class="line">$ make menuconfigkernel</span><br></pre></td></tr></table></figure><p>矢印キーで選択，Enterで下の階層に入り，Escを2回押して上の階層に戻れます．スペースでチェックを付け外します．</p><ul><li>Library Routines<ul><li>sizeof(_Bool) is 8-bits のチェックを入れる</li><li>Build uClibc++ のチェックを入れる</li><li>Enable Exception Support のチェックを外す</li><li>Have libsupc++ のチェックを外す</li></ul></li></ul><p>ビルドします．</p><figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">$ make cleankernel</span><br><span class="line">$ make buildkernel</span><br></pre></td></tr></table></figure><p>うまく行かないときは <code>config.py</code> でデフォルトの設定を読ませてから再度 <code>make menuconfig</code> するとうまく行くかもしれません．</p><h2>STLを使用したプログラムを書く</h2><p><code>tools/mkappsdir.py</code> と <code>tools/mkcmd.py</code> を使ってプロジェクトを作成します．</p><p>参考→ <a href="/2018/08/03/SPRESENSE-SDKでArduinoを使わずにとりあえずLチカする/" title="SPRESENSE SDKでArduinoを使わずにとりあえずLチカする">SPRESENSE SDKでArduinoを使わずにとりあえずLチカする</a></p><figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">$ tools/mkappsdir.py cxxapps &apos;C++ Applications&apos;</span><br><span class="line">$ tools/mkcmd.py -d cxxapps test_stl &apos;STL test&apos;</span><br></pre></td></tr></table></figure><p>テンプレートとしてコピーされるソースの拡張子を変更します．</p><figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">$ cd ../cxxapps/test_stl</span><br><span class="line">$ mv test_stl_main.c test_stl_main.cxx</span><br></pre></td></tr></table></figure><p>Makefileを編集します．コンパイラのフラグも書いておきます．</p><figure class="highlight"><pre><span class="GruvboxRed">- MAINSRC = test_stl_main.c</span><span class="GruvboxGreen">+ MAINSRC = test_stl_main.cxx</span><span class="GruvboxGreen">+ CXXFLAGS += -std=gnu++17</span></pre></figure><p>外から見えている必要のある関数(ここでは<code>test_stl_main</code>)を <code>extern &quot;C&quot;</code> で囲みます．</p><figure class="highlight"><pre><span class="GruvboxAqua">#include </span><span class="String">&lt;sdk/config.h&gt;</span><span class="GruvboxAqua">#include </span><span class="String">&lt;stdio.h&gt;</span><span class="GruvboxOrange">extern</span> <span class="String">&quot;C&quot;</span>{<span class="GruvboxAqua">#ifdef CONFIG_BUILD_KERNEL</span><span class="GruvboxYellow">int</span> main(<span class="GruvboxYellow">int</span> argc, FAR <span class="GruvboxYellow">char</span> *argv[])<span class="GruvboxAqua">#else</span><span class="GruvboxYellow">int</span> test_stl_main(<span class="GruvboxYellow">int</span> argc, <span class="GruvboxYellow">char</span> *argv[])<span class="GruvboxAqua">#endif</span>{  <span class="GruvboxRed">return</span> <span class="GruvboxPurple">0</span>;}}</pre></figure><p>基本的にはこれだけしていればおkです．あとはプログラムを書いていきます．以下の例は，vectorに入れて出すだけの無意味なプログラムです．</p><figure class="highlight"><pre><span class="GruvboxAqua">#include </span><span class="String">&lt;sdk/config.h&gt;</span><span class="GruvboxAqua">#include </span><span class="String">&lt;iostream&gt;</span><span class="GruvboxAqua">#include </span><span class="String">&lt;vector&gt;</span><span class="GruvboxRed">using</span> <span class="GruvboxAqua">namespace</span> std;<span class="GruvboxOrange">extern</span> <span class="String">&quot;C&quot;</span>{<span class="GruvboxAqua">#ifdef CONFIG_BUILD_KERNEL</span><span class="GruvboxYellow">int</span> main(<span class="GruvboxYellow">int</span> argc, FAR <span class="GruvboxYellow">char</span> *argv[])<span class="GruvboxAqua">#else</span><span class="GruvboxYellow">int</span> test_stl_main(<span class="GruvboxYellow">int</span> argc, <span class="GruvboxYellow">char</span> *argv[])<span class="GruvboxAqua">#endif</span>{    vector&lt;<span class="GruvboxYellow">int</span>&gt; v;    <span class="GruvboxRed">for</span>(<span class="GruvboxYellow">int</span> i=<span class="GruvboxPurple">0</span>; i&lt;<span class="GruvboxPurple">10</span>; i++){        v.push_back(i);    }    <span class="GruvboxRed">for</span>(<span class="GruvboxYellow">auto</span> x : v){        cout&lt;&lt;x&lt;&lt;<span class="String">&quot;,&quot;</span>;    }    cout&lt;&lt;endl;    <span class="GruvboxRed">return</span> <span class="GruvboxPurple">0</span>;}}</pre></figure><h2>ビルド</h2><figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">$ make menuconfig</span><br></pre></td></tr></table></figure><p>“C++ Applications” → “STL Test” にチェックを入れて終了します．</p><figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">$ make</span><br><span class="line">$ ./tools/flash.sh -b 2000000 -c /dev/ttyUSB0 nuttx.spk</span><br></pre></td></tr></table></figure><h2>できた</h2><img src="/2018/08/08/SPRESENSEのNuttX上でuClibc-を使用したC-アプリケーションを動かす/test_stl.png" title="できた">]]></content>
    
    <summary type="html">
    
      &lt;h2&gt;概要&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;nuttx/libxx&lt;/code&gt; の中に基本的なC++の機能を提供するためのライブラリは付属していますが，STLがカバーしている &lt;code&gt;iostream&lt;/code&gt; や &lt;code&gt;vector&lt;/code&gt; 等の機能を利用したプログラムは，そのままではコンパイルできません．
この記事では，軽量なSTL互換ライブラリであるuClibc++をSPRESENSEのNuttXに組み込み，C++の標準ライブラリを利用できるようにする方法を紹介します．&lt;/p&gt;
&lt;p&gt;バージョン等&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SPRESENSE SDK v1.0.1&lt;/li&gt;
&lt;li&gt;NuttX: git(&lt;code&gt;33597a8&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
    
    </summary>
    
      <category term="電子工作" scheme="http://blog.tokor.org/categories/%E9%9B%BB%E5%AD%90%E5%B7%A5%E4%BD%9C/"/>
    
      <category term="SPRESENSE" scheme="http://blog.tokor.org/categories/%E9%9B%BB%E5%AD%90%E5%B7%A5%E4%BD%9C/SPRESENSE/"/>
    
    
      <category term="NuttX" scheme="http://blog.tokor.org/tags/NuttX/"/>
    
      <category term="uClibc++" scheme="http://blog.tokor.org/tags/uClibc/"/>
    
      <category term="C++" scheme="http://blog.tokor.org/tags/C/"/>
    
  </entry>
  
  <entry>
    <title>SPRESENSE SDKをArch Linuxにセットアップする</title>
    <link href="http://blog.tokor.org/2018/08/03/SPRESENSE-SDK%E3%82%92Arch-Linux%E3%81%AB%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97%E3%81%99%E3%82%8B/"/>
    <id>http://blog.tokor.org/2018/08/03/SPRESENSE-SDKをArch-Linuxにセットアップする/</id>
    <published>2018-08-03T11:40:58.000Z</published>
    <updated>2019-05-12T07:24:29.966Z</updated>
    
    <content type="html"><![CDATA[<h2>概要</h2><img src="/2018/08/03/SPRESENSE-SDKをArch-Linuxにセットアップする/spresense.jpg" title="SPRESENSE"><p>Arch Linuxは推奨のUbuntuとは異なりローリング・リリースを採用しているため，想定環境とのバージョンの不一致によって若干手順が異なります．</p><h2>基本手順</h2><p>セットアップの基本的な手順はここにしたがいます．<code>apt-get</code> 等は適宜読み替えて <code>pacman</code> 等でパッケージをインストールします．</p><p><a href="https://developer.sony.com/ja/develop/spresense/developer-tools/get-started-using-nuttx/set-up-the-nuttx-environment#_spresense_sdk_%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9" target="_blank" rel="noopener">Spresense SDK チュートリアル - Spresense - Sony Developer World</a></p><h2>異なるポイント・失敗したポイント</h2><p>kconfig-frontendsのビルドの段階で，以下のようなエラーが出ます．</p><figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">In file included from yconf.c:234:</span><br><span class="line">hconf.gperf:141:1: error: conflicting types for &apos;kconf_id_lookup&apos;</span><br><span class="line">hconf.gperf:12:31: note: previous declaration of &apos;kconf_id_lookup&apos; was here</span><br><span class="line"> static const struct kconf_id *kconf_id_lookup(register const char *str, register unsigned int len);</span><br><span class="line">                               ^~~~~~~~~~~~~~~</span><br><span class="line">make[3]: *** [Makefile:456: libkconfig_parser_la-yconf.lo] Error 1</span><br><span class="line">make[2]: *** [Makefile:350: all] Error 2</span><br><span class="line">make[1]: *** [Makefile:334: all-recursive] Error 1</span><br><span class="line">make: *** [Makefile:385: all-recursive] Error 1</span><br></pre></td></tr></table></figure><p>これはESP32向けNuttXにおいてすでに確認されている現象です．</p><ul><li><a href="https://github.com/pfalcon/esp-open-sdk/issues/243" target="_blank" rel="noopener">make error: zconf.hash.c:167:1: error: conflicting types for ‘kconf_id_lookup’ · Issue #243 · pfalcon/esp-open-sdk · GitHub</a></li></ul><p>こちらにしたがって， <code>libs/parser/hconf.c</code> の163行目を以下のように変更します．</p><figure class="highlight"><pre><span class="GruvboxRed">-kconf_id_lookup (register const char *str, register size_t len)</span><span class="GruvboxGreen">+kconf_id_lookup (register const char *str, register unsigned int len)</span></pre></figure><h2>その他</h2><p>バージョンアップ等で変更点があれば更新していきます．</p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h2&gt;概要&lt;/h2&gt;
&lt;img src=&quot;/2018/08/03/SPRESENSE-SDKをArch-Linuxにセットアップする/spresense.jpg&quot; title=&quot;SPRESENSE&quot;&gt;
&lt;p&gt;Arch Linuxは推奨のUbuntuとは異なりローリング・リリース
      
    
    </summary>
    
      <category term="電子工作" scheme="http://blog.tokor.org/categories/%E9%9B%BB%E5%AD%90%E5%B7%A5%E4%BD%9C/"/>
    
      <category term="SPRESENSE" scheme="http://blog.tokor.org/categories/%E9%9B%BB%E5%AD%90%E5%B7%A5%E4%BD%9C/SPRESENSE/"/>
    
    
      <category term="Arch Linux" scheme="http://blog.tokor.org/tags/Arch-Linux/"/>
    
      <category term="SPRESENSE SDK" scheme="http://blog.tokor.org/tags/SPRESENSE-SDK/"/>
    
  </entry>
  
  <entry>
    <title>SPRESENSE SDKでArduinoを使わずにとりあえずLチカする</title>
    <link href="http://blog.tokor.org/2018/08/03/SPRESENSE-SDK%E3%81%A7Arduino%E3%82%92%E4%BD%BF%E3%82%8F%E3%81%9A%E3%81%AB%E3%81%A8%E3%82%8A%E3%81%82%E3%81%88%E3%81%9AL%E3%83%81%E3%82%AB%E3%81%99%E3%82%8B/"/>
    <id>http://blog.tokor.org/2018/08/03/SPRESENSE-SDKでArduinoを使わずにとりあえずLチカする/</id>
    <published>2018-08-03T11:40:34.000Z</published>
    <updated>2019-05-12T07:24:29.966Z</updated>
    
    <content type="html"><![CDATA[<h2>概要</h2><img src="/2018/08/03/SPRESENSE-SDKでArduinoを使わずにとりあえずLチカする/spresense.jpg" title="SPRESENSE"><p>Arduino IDEとかいうぬるま湯に浸かりたくない人や，SPRESENSE SDKを使って自作のアプリケーションをCやC++で書いてみたい人向けの記事です．Arduino信者はお帰りください．</p><p>今回は，最も基本的な例としてLチカとシェルへの文字列の出力を扱います．</p><p>この記事では，SDKのインストールができているという前提で進めます．<br>参考→ <a href="/2018/08/03/SPRESENSE-SDKをArch-Linuxにセットアップする/" title="SPRESENSE SDKをArch Linuxにセットアップする">SPRESENSE SDKをArch Linuxにセットアップする</a></p><a id="more"></a><h2>準備</h2><p>一旦適当なサンプルをビルドして手順を確認します．すでにSPRESENSE SDKで何かを試している場合は一旦設定を退避させておいてください．以下のコマンドのうち <code>make distclean</code> でNuttXカーネルとアプリケーションの設定が消えるので注意してください．</p><figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">$ cd /path/to/spresense/sdk</span><br><span class="line">$ make distclean</span><br><span class="line">$ tools/config.py --kernel release</span><br><span class="line">$ tools/config.py examples/hello</span><br><span class="line">$ make buildkernel</span><br><span class="line">$ make</span><br></pre></td></tr></table></figure><p>これによって，Hello WorldのサンプルアプリケーションがNuttXのコマンドとして追加されます．</p><figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">nsh&gt; help</span><br><span class="line">help usage:  help [-v] [&lt;cmd&gt;]</span><br><span class="line"></span><br><span class="line">  [           date        help        mh          rmdir       umount      </span><br><span class="line">  ?           dd          hexdump     mount       set         unset       </span><br><span class="line">  basename    df          kill        mv          sh          usleep      </span><br><span class="line">  break       echo        ls          mw          shutdown    xd          </span><br><span class="line">  cat         printf      mb          poweroff    sleep       </span><br><span class="line">  cd          exec        mkdir       ps          test        </span><br><span class="line">  cp          exit        mkfatfs     pwd         time        </span><br><span class="line">  cmp         false       mkrd        reboot      true        </span><br><span class="line">  dirname     free        mksmartfs   rm          uname       </span><br><span class="line"></span><br><span class="line">Builtin Apps:</span><br><span class="line">  hello</span><br><span class="line">nsh&gt; hello</span><br><span class="line">Hello, World!!</span><br><span class="line">nsh&gt;</span><br></pre></td></tr></table></figure><h2>NuttXへのアプリケーションディレクトリの登録</h2><p>NuttXは通常，自分でアプリケーションを書こうとするといろいろと面倒な設定が必要なのですが，SPRESENSEには便利なツールが用意されています．</p><p><a href="https://developer.sony.com/ja/develop/spresense/developer-tools/get-started-using-nuttx/nuttx-developer-guide#_%E3%83%84%E3%83%BC%E3%83%AB%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B" target="_blank" rel="noopener">9.3. ツールを使用する: Spresense SDK デベロッパーガイド - Spresense - Sony Developer World</a></p><p>sdkと同じ階層に <code>myapps</code> というディレクトリを作成し，その中に <code>test_gpio</code> というアプリケーションを作成します．以下のコマンドでこの操作ができます(クォートで囲まれている説明文は適宜自由に設定してください)．</p><figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">$ tools/mkappsdir.py myapps &apos;My Apps&apos;</span><br><span class="line">$ tools/mkcmd.py -d myapps test_gpio &apos;Test LED App&apos;</span><br></pre></td></tr></table></figure><p>どのアプリケーションをビルドするかはmenuconfigで設定できます．</p><figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">$ make menuconfig</span><br></pre></td></tr></table></figure><p>矢印キーで選択，Enterで下の階層に入り，Escを2回押して上の階層に戻れます．スペースでチェックを付け外します．</p><p>'My Apps’から’Test LED App’にチェックを入れます．早速ビルドしてみましょう．</p><figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">$ make</span><br></pre></td></tr></table></figure><p><code>nuttx.spk</code> ができたら準備は完了です．</p><h2>設定の保存</h2><p>設定を保存して再度config.pyから利用できるようにするには，以下のツールを使用すると楽です．</p><figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">$ tools/mkdefconfig.py myconfig</span><br></pre></td></tr></table></figure><p><code>myconfig</code> の部分は好きな名前に変えてください．</p><h2>GPIOを操作するコードを書く</h2><p>先ほど作成した <code>test_gpio</code> アプリケーションの中身を書いていきます．ファイルはsdkと同じ階層の<code>myapps/test_gpio</code>の中にあります．</p><figure class="highlight"><pre><span class="GruvboxAqua">#include </span><span class="String">&lt;sdk/config.h&gt;</span><span class="GruvboxAqua">#include </span><span class="String">&lt;stdio.h&gt;</span><span class="GruvboxAqua">#include </span><span class="String">&lt;arch/board/board.h&gt;</span><span class="GruvboxAqua">#include </span><span class="String">&lt;arch/chip/pin.h&gt;</span><span class="GruvboxAqua">#ifdef CONFIG_BUILD_KERNEL</span><span class="GruvboxYellow">int</span> main(<span class="GruvboxYellow">int</span> argc, FAR <span class="GruvboxYellow">char</span> *argv[])<span class="GruvboxAqua">#else</span><span class="GruvboxYellow">int</span> test_gpio_main(<span class="GruvboxYellow">int</span> argc, <span class="GruvboxYellow">char</span> *argv[])<span class="GruvboxAqua">#endif</span>{    board_gpio_config(<span class="GruvboxPurple">97</span>, <span class="GruvboxPurple">0</span>, <span class="GruvboxPurple">false</span>, <span class="GruvboxPurple">true</span>, <span class="GruvboxPurple">0</span>);    printf(<span class="String">&quot;Hello, GPIO!</span><span class="GruvboxOrange">\n</span><span class="String">&quot;</span>);    <span class="GruvboxRed">for</span>(<span class="GruvboxYellow">int</span> i=<span class="GruvboxPurple">0</span>; i&lt;<span class="GruvboxPurple">10</span>; i++){        board_gpio_write(<span class="GruvboxPurple">97</span>, <span class="GruvboxPurple">1</span>);        usleep(<span class="GruvboxPurple">1000</span>*<span class="GruvboxPurple">1000</span>);        board_gpio_write(<span class="GruvboxPurple">97</span>, <span class="GruvboxPurple">0</span>);        usleep(<span class="GruvboxPurple">1000</span>*<span class="GruvboxPurple">1000</span>);    }    <span class="GruvboxRed">return</span> <span class="GruvboxPurple">0</span>;}</pre></figure><p>GPIO関係のAPIは，SDKの中の <code>bsp/board/common/src/cxd56_gpioif.c</code> の中にあります<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>．その他のペリフェラルについても同じディレクトリの中に出揃っているので，Doxygenで生成されたドキュメントを読むのに疲れた際にはこちらを参照すると良いと思います．</p><p>さて，CXD56のGPIOには「モード」があり，GPIOとしてピンを使用するかペリフェラルの機能を持ったピンとして使用するかが選択できます．それとは別に，入力ピンとして使用するか，ドライブ電流を大きくするか，プルアップ/ダウンをどうするか等が選択できます．</p><ul><li><a href="https://developer.sony.com/ja/develop/spresense/developer-tools/get-started-using-nuttx/nuttx-developer-guide#_gpiopin_specification" target="_blank" rel="noopener">11.2. GPIO/Pin Specification : Spresense SDK デベロッパーガイド - Spresense - Sony Developer World</a></li></ul><p>上記のコードの中で使用している <code>board_gpio_config</code> 関数は以下のような書式になっています．</p><figure class="highlight"><pre>board_gpio_config(<span class="Comment">/*</span><span class="Comment">&#x30D4;&#x30F3;&#x756A;&#x53F7;</span><span class="Comment">*/</span>, <span class="Comment">/*</span><span class="Comment">&#x30E2;&#x30FC;&#x30C9;</span><span class="Comment">*/</span>, <span class="Comment">/*</span><span class="Comment">&#x5165;&#x529B;&#x30D4;&#x30F3;:true</span><span class="Comment">*/</span>, <span class="Comment">/*</span><span class="Comment">&#x30C9;&#x30E9;&#x30A4;&#x30D6;&#x96FB;&#x6D41;&#x5927;:true</span><span class="Comment">*/</span>, <span class="Comment">/*</span><span class="Comment">&#x30D7;&#x30EB;&#x30A2;&#x30C3;&#x30D7;/&#x30C0;&#x30A6;&#x30F3;&#x8A2D;&#x5B9A;</span><span class="Comment">*/</span>);</pre></figure><p>ピン番号(の名前)についてはこちらから確認できます．</p><ul><li><a href="https://developer.sony.com/ja/develop/spresense/developer-tools/get-started-using-nuttx/nuttx-developer-guide#_pin_specification" target="_blank" rel="noopener">11.2.3. Pin specification : Spresense SDK デベロッパーガイド - Spresense - Sony Developer World</a></li></ul><p>LED1に相当するピンは <code>I2S1_BCK</code> で，この定数は <code>bsp/include/arch/chip/pin.h</code> の中に <code>97</code> と定義されています<sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup>．</p><p>NuttXはPOSIX互換ですので，<code>usleep</code> を使用してディレイを実現できます．ハードウェアタイマーを使用して正確なタイミングを生成する方法は，また後日書ければ書きます．</p><h2>実行する</h2><p>ビルドして書き込みます．</p><figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">$ make</span><br><span class="line">$ config/flash.sh -c /dev/ttyUSB0 nuttx.spk</span><br></pre></td></tr></table></figure><p>picocomやminicomでコンソールを開いて，nsh上でビルドしたコマンドを実行します．</p><figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">nsh&gt; test_gpio</span><br><span class="line">Hello, GPIO!</span><br></pre></td></tr></table></figure><p>メッセージが表示されるとともに，LEDの点灯状態が1秒ごとに切り替わります．</p><blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">SPRESENSE SDKでArduinoを使わずに自力でNuttX上のLチカコマンドを作成できた <a href="https://t.co/SyUojg1Uc8" target="_blank" rel="noopener">pic.twitter.com/SyUojg1Uc8</a></p>&mdash; ねころこん (@tokoro10g) <a href="https://twitter.com/tokoro10g/status/1025008002179317767?ref_src=twsrc%5Etfw" target="_blank" rel="noopener">2018年8月2日</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script><p>NuttXではコマンドをバックグラウンドで実行できます．</p><figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">nsh&gt; test_gpio &amp;</span><br></pre></td></tr></table></figure><p>とすることで，実行中にもnshを使用することができます．</p><h2>まとめ</h2><ul><li>付属ツールで自作アプリケーション用のディレクトリを作成することがおすすめ</li><li>ペリフェラル関係のファイルは <code>bsp/board/...</code> の中にある</li><li>POSIX互換である利点を活かしながらコーディングができる</li></ul><hr class="footnotes-sep"><section class="footnotes"><ol class="footnotes-list"><li id="fn1" class="footnote-item"><p>BSP: Board Support Package <a href="#fnref1" class="footnote-backref">↩</a></p></li><li id="fn2" class="footnote-item"><p>この番号ぐらいはドキュメンテーションに書いてほしいなと思います… <a href="#fnref2" class="footnote-backref">↩</a></p></li></ol></section>]]></content>
    
    <summary type="html">
    
      &lt;h2&gt;概要&lt;/h2&gt;
&lt;img src=&quot;/2018/08/03/SPRESENSE-SDKでArduinoを使わずにとりあえずLチカする/spresense.jpg&quot; title=&quot;SPRESENSE&quot;&gt;
&lt;p&gt;Arduino IDEとかいうぬるま湯に浸かりたくない人や，SPRESENSE SDKを使って自作のアプリケーションをCやC++で書いてみたい人向けの記事です．
Arduino信者はお帰りください．&lt;/p&gt;
&lt;p&gt;今回は，最も基本的な例としてLチカとシェルへの文字列の出力を扱います．&lt;/p&gt;
&lt;p&gt;この記事では，SDKのインストールができているという前提で進めます．&lt;br&gt;
参考→ &lt;a href=&quot;/2018/08/03/SPRESENSE-SDKをArch-Linuxにセットアップする/&quot; title=&quot;SPRESENSE SDKをArch Linuxにセットアップする&quot;&gt;SPRESENSE SDKをArch Linuxにセットアップする&lt;/a&gt;&lt;/p&gt;
    
    </summary>
    
      <category term="電子工作" scheme="http://blog.tokor.org/categories/%E9%9B%BB%E5%AD%90%E5%B7%A5%E4%BD%9C/"/>
    
      <category term="SPRESENSE" scheme="http://blog.tokor.org/categories/%E9%9B%BB%E5%AD%90%E5%B7%A5%E4%BD%9C/SPRESENSE/"/>
    
    
      <category term="SPRESENSE SDK" scheme="http://blog.tokor.org/tags/SPRESENSE-SDK/"/>
    
      <category term="NuttX" scheme="http://blog.tokor.org/tags/NuttX/"/>
    
  </entry>
  
  <entry>
    <title>ハフ変換で求めた2直線の交点</title>
    <link href="http://blog.tokor.org/2018/07/04/%E3%83%8F%E3%83%95%E5%A4%89%E6%8F%9B%E3%81%A7%E6%B1%82%E3%82%81%E3%81%9F2%E7%9B%B4%E7%B7%9A%E3%81%AE%E4%BA%A4%E7%82%B9/"/>
    <id>http://blog.tokor.org/2018/07/04/ハフ変換で求めた2直線の交点/</id>
    <published>2018-07-04T06:53:10.000Z</published>
    <updated>2019-05-12T07:24:29.999Z</updated>
    
    <content type="html"><![CDATA[<h2>概要</h2><p>画像の中の直線を検出する古典的な方法として，ハフ変換が有名です．ハフ空間上の点は直線の式に相当するものになります．</p><img src="/2018/07/04/ハフ変換で求めた2直線の交点/CIMG3606.JPG" title="モチベーション"><p>たとえば，上のような写真の中から四角形の物体の頂点を取り出したい場合，ハフ空間上の点から求めた直線の式を連立して，直線どうしの交点を求める必要があります．とても簡単なことなのですが，巷の記事ではわざわざ $y=ax+b$ の形に直してから解いていたり，数値的に交点が求められていたりして若干微妙に感じるポイントがあります．いちいち解説している記事が見当たらない割によく使うため，書くことにします．</p><h2>ハフ空間上で表示された直線</h2><p>ハフ空間上の点 $(\rho, \theta)$ は，つぎの直線を表すものになっています．$$\rho = x \cos\theta + y \sin\theta$$</p><h2>$y=ax+b$ にせずに交点を求める</h2><p>いま，$(\rho_1, \theta_1),\ (\rho_2, \theta_2)$ で表現される2本の直線を考えます．これらが交点をもつということは，$$\rho_1 = x \cos\theta_1 + y \sin\theta_1\\\rho_2 = x \cos\theta_2 + y \sin\theta_2$$の両方が同一の $(x,y)$ に対して成り立つということなので，$$\begin{bmatrix}\cos\theta_1 &amp; \sin\theta_1\\\cos\theta_2 &amp; \sin\theta_2\end{bmatrix}\begin{bmatrix}x\\y\end{bmatrix} =\begin{bmatrix}\rho_1\\\rho_2\end{bmatrix}$$と書けます．これを単純に $(x,y)$ について解くことで，$$\begin{bmatrix}x\\y\end{bmatrix} =\begin{bmatrix}\cos\theta_1 &amp; \sin\theta_1\\\cos\theta_2 &amp; \sin\theta_2\end{bmatrix}^{-1}\begin{bmatrix}\rho_1\\\rho_2\end{bmatrix}$$と計算できます．</p><p>ただし，傾きが同一の2直線に対しては行列部分が特異となり，この方法は使用できません．この場合はそもそも交点をもたないので，行列式の値の大きさを確認する例外処理を入れると良いでしょう．</p><p>線形代数に祈りを．</p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h2&gt;概要&lt;/h2&gt;
&lt;p&gt;画像の中の直線を検出する古典的な方法として，ハフ変換が有名です．
ハフ空間上の点は直線の式に相当するものになります．&lt;/p&gt;
&lt;img src=&quot;/2018/07/04/ハフ変換で求めた2直線の交点/CIMG3606.JPG&quot; title=&quot;モチベー
      
    
    </summary>
    
      <category term="信号処理" scheme="http://blog.tokor.org/categories/%E4%BF%A1%E5%8F%B7%E5%87%A6%E7%90%86/"/>
    
      <category term="画像処理" scheme="http://blog.tokor.org/categories/%E4%BF%A1%E5%8F%B7%E5%87%A6%E7%90%86/%E7%94%BB%E5%83%8F%E5%87%A6%E7%90%86/"/>
    
    
      <category term="ハフ変換" scheme="http://blog.tokor.org/tags/%E3%83%8F%E3%83%95%E5%A4%89%E6%8F%9B/"/>
    
      <category term="連立方程式" scheme="http://blog.tokor.org/tags/%E9%80%A3%E7%AB%8B%E6%96%B9%E7%A8%8B%E5%BC%8F/"/>
    
  </entry>
  
  <entry>
    <title>MATLABのタブ補完機能をコードから利用する</title>
    <link href="http://blog.tokor.org/2018/06/09/MATLAB%E3%81%AE%E3%82%BF%E3%83%96%E8%A3%9C%E5%AE%8C%E6%A9%9F%E8%83%BD%E3%82%92%E3%82%B3%E3%83%BC%E3%83%89%E3%81%8B%E3%82%89%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B/"/>
    <id>http://blog.tokor.org/2018/06/09/MATLABのタブ補完機能をコードから利用する/</id>
    <published>2018-06-09T05:14:13.000Z</published>
    <updated>2019-05-12T07:24:29.956Z</updated>
    
    <content type="html"><![CDATA[<img src="/2018/06/09/MATLABのタブ補完機能をコードから利用する/matlab_completion.png" title="便利なタブ補完機能"><h2>概要</h2><p>MATLABデスクトップのタブ補完機能は便利に作られています．たとえば，コマンドウィンドウに</p><figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">&gt;&gt; load</span><br></pre></td></tr></table></figure><p>と入力した後にTABキーを押すと，現在見えるパス上のディレクトリやファイルをリスト表示してくれます．また，</p><figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">&gt;&gt; matl</span><br></pre></td></tr></table></figure><p>まで入力してTABを押すと，<code>matlab</code> までが確定して入力され，その後に続く関数や変数の候補が表示されます．</p><p>最近わたしはVimのPythonプラグインを書いていて，その上でMATLABエンジンを動かして遊んでいます．この補完機能をうまく利用してVim上でMATLABの賢い補完ができないだろうかと考え，やってみたのがこの記事の内容です．</p><p>ドキュメント化されていない機能なので，今後のバージョンアップ等で使用できなくなる可能性があることを注意しておきます．</p><a id="more"></a><h2>方法</h2><p><code>com.mathworks.jmi.tabcompletion.TabCompletionImpl</code> クラスのメソッドを呼びます．</p><figure class="highlight"><pre>import com.mathworks.jmi.tabcompletion<span class="Normal">.*</span>tc = TabCompletionImpl()<span class="GruvboxOrange">;</span>future = tc.getJSONCompletions(<span class="String">&apos;matl&apos;</span>, <span class="GruvboxPurple">4</span>)<span class="GruvboxOrange">;</span><span class="GruvboxRed">while</span> <span class="Normal">~</span>future.isDone()    pause(<span class="GruvboxPurple">0.01</span>)<span class="GruvboxOrange">;</span><span class="GruvboxRed">end</span>result = future.get()</pre></figure><p>引数には，補完対象のchar配列(もしくはstring)と，その文字列の何文字目から補完するかを指定しています．</p><p>実行すると，つぎのようなJSON形式のchar配列が得られます(長いので項目は省略しています)．</p><figure class="highlight"><pre><span class="GruvboxFg1">{</span>     <span class="GruvboxGreen">&quot;</span><span class="GruvboxGreen">partialCompletion</span><span class="GruvboxGreen">&quot;</span>:     <span class="GruvboxFg1">{</span>         <span class="GruvboxGreen">&quot;</span><span class="GruvboxGreen">completionString</span><span class="GruvboxGreen">&quot;</span>:<span class="GruvboxGreen">&quot;</span><span class="GruvboxFg1">matlab</span><span class="GruvboxGreen">&quot;</span>,         <span class="GruvboxGreen">&quot;</span><span class="GruvboxGreen">offset</span><span class="GruvboxGreen">&quot;</span>: <span class="GruvboxPurple">4</span>     <span class="GruvboxFg1">}</span>,     <span class="GruvboxGreen">&quot;</span><span class="GruvboxGreen">replacedString</span><span class="GruvboxGreen">&quot;</span>:<span class="GruvboxGreen">&quot;</span><span class="GruvboxFg1">matl</span><span class="GruvboxGreen">&quot;</span>,     <span class="GruvboxGreen">&quot;</span><span class="GruvboxGreen">finalCompletions</span><span class="GruvboxGreen">&quot;</span>:     <span class="GruvboxFg1">[</span>         <span class="GruvboxFg1">{</span>             <span class="GruvboxGreen">&quot;</span><span class="GruvboxGreen">completion</span><span class="GruvboxGreen">&quot;</span>:             <span class="GruvboxFg1">{</span>                 <span class="GruvboxGreen">&quot;</span><span class="GruvboxGreen">completionString</span><span class="GruvboxGreen">&quot;</span>:<span class="GruvboxGreen">&quot;</span><span class="GruvboxFg1">matlab</span><span class="GruvboxGreen">&quot;</span>,                 <span class="GruvboxGreen">&quot;</span><span class="GruvboxGreen">offset</span><span class="GruvboxGreen">&quot;</span>: <span class="GruvboxPurple">6</span>             <span class="GruvboxFg1">}</span>,             <span class="GruvboxGreen">&quot;</span><span class="GruvboxGreen">matchType</span><span class="GruvboxGreen">&quot;</span>:<span class="GruvboxGreen">&quot;</span><span class="GruvboxFg1">package</span><span class="GruvboxGreen">&quot;</span>,             <span class="GruvboxGreen">&quot;</span><span class="GruvboxGreen">popupCompletion</span><span class="GruvboxGreen">&quot;</span>:<span class="GruvboxGreen">&quot;</span><span class="GruvboxFg1">matlab</span><span class="GruvboxGreen">&quot;</span>         <span class="GruvboxFg1">}</span>,         <span class="GruvboxFg1">{</span>             <span class="GruvboxGreen">&quot;</span><span class="GruvboxGreen">completion</span><span class="GruvboxGreen">&quot;</span>:             <span class="GruvboxFg1">{</span>                 <span class="GruvboxGreen">&quot;</span><span class="GruvboxGreen">completionString</span><span class="GruvboxGreen">&quot;</span>:<span class="GruvboxGreen">&quot;</span><span class="GruvboxFg1">matlab2dataflow</span><span class="GruvboxGreen">&quot;</span>,                 <span class="GruvboxGreen">&quot;</span><span class="GruvboxGreen">offset</span><span class="GruvboxGreen">&quot;</span>: <span class="GruvboxPurple">6</span>             <span class="GruvboxFg1">}</span>,             <span class="GruvboxGreen">&quot;</span><span class="GruvboxGreen">matchType</span><span class="GruvboxGreen">&quot;</span>:<span class="GruvboxGreen">&quot;</span><span class="GruvboxFg1">package</span><span class="GruvboxGreen">&quot;</span>,             <span class="GruvboxGreen">&quot;</span><span class="GruvboxGreen">popupCompletion</span><span class="GruvboxGreen">&quot;</span>:<span class="GruvboxGreen">&quot;</span><span class="GruvboxFg1">matlab2dataflow</span><span class="GruvboxGreen">&quot;</span>         <span class="GruvboxFg1">}</span>     <span class="GruvboxFg1">]</span><span class="GruvboxFg1">}</span></pre></figure><p>中身の詳細は微妙にわからない部分もありますが，補完プラグインの実装に必要な情報は取れそうだということがわかりました．</p><h2>JMI</h2><p>MATLABデスクトップのGUIとエンジン部分はどうやらJavaで結合されているようです．MATLABマニア御用達のUndocumented Matlabに詳しいことが書かれています．</p><ul><li><a href="https://undocumentedmatlab.com/blog/jmi-java-to-matlab-interface" target="_blank" rel="noopener">JMI – Java-to-Matlab Interface | Undocumented Matlab</a></li></ul><p><code>%matlabroot%/java/jar/jmi.jar</code> が該当するファイルのようです．こちらのファイルのコンテンツを <code>jar</code> コマンドで確認したところ，タブ補完の機能に相当するコンポーネントがあることがわかりました．</p><p>MATLABには標準でJavaのパッケージをインポートする機能があります．また，メソッドをリスト表示する関数 <code>methodview</code> も便利な機能です．</p><p>パッケージをインポートした状態で</p><figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">&gt;&gt; methodview TabCompletionImpl</span><br></pre></td></tr></table></figure><p>を実行すると，<code>TabCompletionImpl</code> に実装されているメソッドのリスト(と対応する引数の型)が表示されます．</p><h2>タブ補完の豆知識</h2><p>ご存知のとおり <code>load</code> コマンドではTABキーによってパスが補完されますが，自分で作成した関数の引数としてファイル名を指定する際には，通常補完がかかりません．実は <code>functionSignatures.json</code> というファイルに設定を記述することで，自作の関数にも補完の仕方を指定することができます．</p><ul><li><a href="https://undocumentedmatlab.com/blog/user-defined-tab-completions-take-2" target="_blank" rel="noopener">User-defined tab completions – take 2 | Undocumented Matlab</a></li><li><a href="https://jp.mathworks.com/help/mps/restfuljson/matlab-function-signatures-in-json.html" target="_blank" rel="noopener">MATLAB Function Signatures in JSON - MATLAB &amp; Simulink</a></li></ul><h2>まとめ</h2><ul><li>JMIを触ってみると楽しいかもしれません</li><li>これで，Vim上で動くPython上で動くMATLABエンジン上でJavaのメソッドを呼び出してJSONを取り出すことによって，Vim上でMATLABのコード補完が効くようになりそうです</li></ul>]]></content>
    
    <summary type="html">
    
      &lt;img src=&quot;/2018/06/09/MATLABのタブ補完機能をコードから利用する/matlab_completion.png&quot; title=&quot;便利なタブ補完機能&quot;&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;p&gt;MATLABデスクトップのタブ補完機能は便利に作られています．
たとえば，コマンドウィンドウに&lt;/p&gt;
&lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&amp;gt;&amp;gt; load&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;と入力した後にTABキーを押すと，現在見えるパス上のディレクトリやファイルをリスト表示してくれます．
また，&lt;/p&gt;
&lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&amp;gt;&amp;gt; matl&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;まで入力してTABを押すと，&lt;code&gt;matlab&lt;/code&gt; までが確定して入力され，その後に続く関数や変数の候補が表示されます．&lt;/p&gt;
&lt;p&gt;最近わたしはVimのPythonプラグインを書いていて，その上でMATLABエンジンを動かして遊んでいます．
この補完機能をうまく利用してVim上でMATLABの賢い補完ができないだろうかと考え，やってみたのがこの記事の内容です．&lt;/p&gt;
&lt;p&gt;ドキュメント化されていない機能なので，今後のバージョンアップ等で使用できなくなる可能性があることを注意しておきます．&lt;/p&gt;
    
    </summary>
    
      <category term="MATLAB" scheme="http://blog.tokor.org/categories/MATLAB/"/>
    
    
      <category term="タブ補完" scheme="http://blog.tokor.org/tags/%E3%82%BF%E3%83%96%E8%A3%9C%E5%AE%8C/"/>
    
      <category term="JMI" scheme="http://blog.tokor.org/tags/JMI/"/>
    
      <category term="Java" scheme="http://blog.tokor.org/tags/Java/"/>
    
      <category term="Undocumented" scheme="http://blog.tokor.org/tags/Undocumented/"/>
    
  </entry>
  
  <entry>
    <title>iPad(第6世代)とApple Pencilの活用方法&amp;なるべく安く買う方法</title>
    <link href="http://blog.tokor.org/2018/05/24/iPad-%E7%AC%AC6%E4%B8%96%E4%BB%A3-%E3%81%A8Apple-Pencil%E3%81%AE%E6%B4%BB%E7%94%A8%E6%96%B9%E6%B3%95-%E3%81%AA%E3%82%8B%E3%81%B9%E3%81%8F%E5%AE%89%E3%81%8F%E8%B2%B7%E3%81%86%E6%96%B9%E6%B3%95/"/>
    <id>http://blog.tokor.org/2018/05/24/iPad-第6世代-とApple-Pencilの活用方法-なるべく安く買う方法/</id>
    <published>2018-05-23T16:32:02.000Z</published>
    <updated>2019-05-12T07:24:29.979Z</updated>
    
    <content type="html"><![CDATA[<img src="/2018/05/24/iPad-第6世代-とApple-Pencilの活用方法-なるべく安く買う方法/ipad_photo.jpg" title="購入したアクセサリー類を取り付けた様子"><h2>ついに買ってしまったiPad第6世代とApple Pencil</h2><p>今年の3月に発売されたiPad第6世代は，これまでiPad Proにしか対応していなかった<strong>Apple Pencilにも対応したモデル</strong>です．これまでiPad Proの価格に悩まされて購入に踏み切れなかった私ですが，この知らせを受けて手が滑って，つい1週間ほど前に(自費で)iPadを購入してしまいました．</p><p>今回購入したのは以下のモデルです．</p><ul><li><a href="https://amzn.to/2kifyQg" target="_blank" rel="noopener">iPad 9.7インチ第6世代128 GB Wi-Fi</a></li><li><a href="https://amzn.to/2s0myWq" target="_blank" rel="noopener">Apple Pencil</a></li></ul><p>これまでスタイラスを頑なに作らなかったAppleでしたし，正直Apple Pencilの何が良いのか，1万円も出して買うだけの価値はあるのか疑問でした．今回アーティストやデザイナー以外でもかなり便利に活用できることがわかったので，記事に残そうと思います．</p><p>私の普段のユースケースにかなり偏った記事になりますが，特に研究者の方や日曜エンジニアの方には，活用いただける記事になっているのではないかと思います．また，記事の最後で便利なアクセサリーや，Apple製品をなるべく安く購入する方法についても書こうと思います．</p><h2>この記事の概要</h2><ul><li><strong>研究における活用方法</strong><ul><li>Foxit Mobile PDFでPDFファイルにメモしながら記事を読む</li><li>Notabilityで快適にノートを取る</li><li>MATLAB Mobileで計算・プロットを作成する</li></ul></li><li><strong>趣味における活用方法</strong><ul><li>OnshapeアプリでiPadで3D CAD</li><li>Autodesk SketchBookでおえかき</li></ul></li><li><strong>なるべく安く買う方法</strong><ul><li>学生・教職員ストアについて</li><li>Rebatesで楽天ポイント還元</li><li>その他考えられる方法</li></ul></li><li><strong>便利なアクセサリー類</strong></li></ul><a id="more"></a><h2>研究における活用方法</h2><p>タブレットと研究，といっても，いまいち関連づかない方が多いのではないかと思います．特に理論系の学生は日々の<strong>計算用紙の消費が激しく</strong>，どこでも研究ができてしまうことから，<strong>分厚い専門書や論文の束</strong>を持ち歩くこともあり，カバンの中や机の上，自宅の床などが紙だらけで大変なことになることが往々にしてあります．(わたし自身は理論系というよりは理論系に寄った実験系だと思いますが，それでも紙が…)</p><p>こういった状況から脱却するにあたって，タブレットは良い選択ではないかと思うのです．ここから，具体的にどのように活用できるのか紹介していきます．</p><h3>Foxit Mobile PDFでPDFにメモしながら記事を読む</h3><ul><li><a href="https://itunes.apple.com/jp/app/foxit-pdf-reader-converter/id507040546?mt=8" target="_blank" rel="noopener">Foxit PDF Reader &amp; Converter - App Store</a></li></ul><blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">Foxit Mobile PDFでてきとーに注釈と手書きメモを書いてみた<br>Google Driveと同期ができて便利<br><br>手書きメモの書き心地は別のアプリの方がいいけど十分使えるレベル<br>ノート的に絵を描きたくなったら、別のアプリで描いて貼り付けるといいかも <a href="https://t.co/4HpsoMSB4E" target="_blank" rel="noopener">pic.twitter.com/4HpsoMSB4E</a></p>&mdash; ねころこん (@tokoro10g) <a href="https://twitter.com/tokoro10g/status/996408172683259904?ref_src=twsrc%5Etfw" target="_blank" rel="noopener">2018年5月15日</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script><blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">注釈のメモの編集画面はこんな感じ 画面下のLgにつけるコメントを編集している <a href="https://t.co/bioQqdHqc2" target="_blank" rel="noopener">pic.twitter.com/bioQqdHqc2</a></p>&mdash; ねころこん (@tokoro10g) <a href="https://twitter.com/tokoro10g/status/996413749576675329?ref_src=twsrc%5Etfw" target="_blank" rel="noopener">2018年5月15日</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script><p>PDFを読めるアプリはたくさんありますが，その中でも<strong>論文読みや校正に特に便利</strong>だと感じたアプリがこちらです．</p><p>Foxit Mobile PDFの良い点は，大きく以下の3点です．</p><ol><li>Google Drive, Dropbox等と<strong>同期できる</strong>点</li><li>Acrobatと遜色ない<strong>多様な注釈がつけられる</strong>点</li><li><strong>手書きメモ</strong>にも対応している点(若干使いづらい)</li></ol><p>Foxit Mobile PDFのクラウド連携は，単にダウンロードとアップロードができるだけではなく，<strong>同期(sync)の機能を備えています</strong>．そのため，注釈をつけたPDFファイルを即座にクラウドストレージに反映させ，各端末間で共有することができます．</p><blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">たとえばとあるフォルダはこうなっていて、これに注釈をつけて変更を加えたり、ファイルをPCから追加したりすると、ネットに繋がっている限りは同期がかかる<br>常に同じ注釈が入ったもののコピーが手元とラボと自分のPCに入る <a href="https://t.co/2FxeUHP1Em" target="_blank" rel="noopener">pic.twitter.com/2FxeUHP1Em</a></p>&mdash; ねころこん (@tokoro10g) <a href="https://twitter.com/tokoro10g/status/996410222569635840?ref_src=twsrc%5Etfw" target="_blank" rel="noopener">2018年5月15日</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script><p>注釈の種類も，手書き入力やポップアップノート，下線や取り消し線，マーカーによるハイライトなど，基本的なものに対応しています．その他にも，文字の置換や挿入を表すマーカーの挿入も可能です．FoxitのPDFリーダーはPC版もあり，<strong>Windows, Mac, Linuxに対応</strong>しています．PC側のリーダもFoxitで揃えておくことで，よりシームレスな連携が取れるようになります．</p><p>手書き入力に関しては，Apple Pencilとの連携機能は特にないため，書き始めに若干の遅延が発生したり，線がカクカクしたりします．文書を拡大してから書くことで，ある程度は問題なく使うことができますが，基本的にはハイライトやポップアップノートを使用したほうが良いかと思います．どうしても快適に手書きしたい場合は，つぎに紹介するNotabilityを使用すると良いでしょう．</p><h3>Notabilityで快適にノートを作る</h3><ul><li><a href="https://itunes.apple.com/jp/app/notability/id360593530?mt=8" target="_blank" rel="noopener">Notability - App Store</a></li></ul><blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">Notabilityの書き心地 <a href="https://t.co/Kw1iNfjC1d" target="_blank" rel="noopener">pic.twitter.com/Kw1iNfjC1d</a></p>&mdash; ねころこん (@tokoro10g) <a href="https://twitter.com/tokoro10g/status/999314360727097344?ref_src=twsrc%5Etfw" target="_blank" rel="noopener">2018年5月23日</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script><p>Notabilityの特徴は，なんといってもその<strong>書き味(レスポンス)の良さ</strong>でしょう．ほかのアプリでは遅延を感じることがあるのですが，Apple PencilとNotabilityを組み合わせると，あたかもボールペンでノートに書いているかのような感覚で，書くことに集中することができます．線の種類は，ボールペンのような感覚のものと，筆のような感覚のものの2種類から選ぶことができます．個人的な書きやすさと読みやすさとしては，前者の方がよいかと思います．</p><img src="/2018/05/24/iPad-第6世代-とApple-Pencilの活用方法-なるべく安く買う方法/ipad_notability.jpg" title="Notabilityの使用例"><p>もちろん書いている途中で色を変えたり，蛍光マーカーに切り替えることもできます．また，これは電子ノートの良い特徴ですが，<strong>書いたものを選択して移動したり，コピー・貼り付けをしたりできる</strong>のがとても便利です．特に数式の変形では，同じ部分を何度も書いたり部分を記号で置き直したりする必要がなくなるので，とても楽になります．</p><img src="/2018/05/24/iPad-第6世代-とApple-Pencilの活用方法-なるべく安く買う方法/ipad_notability2.jpg" title="クラウドへのバックアップ機能も完備"><p>Notabilityは，クラウドストレージへの<strong>バックアップ</strong>(≠同期)に対応しています．iPadが手元にないときでも，自分の書いたノートを読むことができます．</p><p>Notabilityは有料アプリで，アプリとしては少し高めの<strong>1,200円</strong>という金額設定になっています．しかし，この書き味と利便性を考えると，iPadとApple Pencilを使用するなら買っておいて損はないと思います．(迷うことはないです．このアプリの購入を検討する時点で，あなたは1万円のインクの出ないペンを購入してしまっているので……)</p><p>ちなみに，アプリを安く購入するには，iTunesカードを安売りしている店を探すのが最も効率的かと思います．そのへんは課金ガチャ界隈でよく説明されていますので，この記事では割愛します．</p><h3>MATLAB Mobileで計算する・プロットを作る</h3><ul><li><a href="https://itunes.apple.com/jp/app/matlab-mobile/id370976661?mt=8" target="_blank" rel="noopener">MATLAB Mobile - App Store</a></li></ul><p>この節の内容は，MATLABを使用している方向けのものです．</p><img src="/2018/05/24/iPad-第6世代-とApple-Pencilの活用方法-なるべく安く買う方法/ipad_matlab.jpg" title="MATLAB Mobileって結構便利なんですよね"><p>先ほど紹介したNotabilityとMATLAB Mobileを併用することによって，研究ノートへのプロットの挿入が圧倒的に楽になります．MATLAB Mobileで出力したプロットはカメラロールに保存することができ，<strong>Notabilityのノートに簡単に貼り付ける</strong>ことができます．</p><img src="/2018/05/24/iPad-第6世代-とApple-Pencilの活用方法-なるべく安く買う方法/ipad_matlab_notability.jpg" title="保存したプロットを貼り付けられる"><p>ノートは拡大して見ることができますし，スペースも無限(実際は有限)なので，プロットの大きさを特に考えずに貼り付けて問題ないのも嬉しいポイントです．</p><p>個人的な話で恐縮ですが，出力したプロットと紙のノートの位置を関連付けたい場面が何度かあり，そのたびにプロットの扱いに苦労することがありました．どうしても貼りたい場合には，プロットを印刷してテープで貼り付けていたのですが，これらの導入によってその必要がなくなりました．</p><h2>趣味での活用方法</h2><h3>Onshapeアプリで3D CAD</h3><ul><li><a href="https://itunes.apple.com/jp/app/onshape-3d-cad/id923421284?mt=8" target="_blank" rel="noopener">Onshape 3D CAD - App Store</a></li></ul><img src="/2018/05/24/iPad-第6世代-とApple-Pencilの活用方法-なるべく安く買う方法/ipad_onshape.jpg" title="iPadでCADが動くなんてまさか考えませんよね"><p>Onshapeアプリを使うと，<strong>3D CADをなんとiPadで動かす</strong>ことができます．Onshapeはクラウドベースの3D CADサービスです．詳しくはこちらの記事をご覧ください．</p><ul><li><a href="http://titech-ssr.blog.jp/archives/1034902634.html" target="_blank" rel="noopener">Webブラウザ上で動くクラウド3DCAD Onshapeの紹介 : 東京工業大学 ロボット技術研究会</a></li></ul><p>視点変更の操作は通常のiOSの操作方法とほとんど変わりありません．少し癖があるとすれば，スケッチを描く際に表示されるカーソルがタップしている位置と異なる場合があることぐらいでしょうか(下の動画では別の部分をタップしながらスワイプしています)．また，クラウドベースのCADですので，ネットに接続していないと使用できません．</p><p>実際の作業風景を動画に撮ってみたのが下の動画です．</p><blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">こんな感じで編集できる <a href="https://t.co/mJgkOecPvs" target="_blank" rel="noopener">pic.twitter.com/mJgkOecPvs</a></p>&mdash; ねころこん (@tokoro10g) <a href="https://twitter.com/tokoro10g/status/997145757302976517?ref_src=twsrc%5Etfw" target="_blank" rel="noopener">2018年5月17日</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script><p>最近のiOSの便利機能である，<strong>画面の動画キャプチャ機能</strong>を使用しています．こんなふうに作業中の風景を動画に残しておいたり，Twitterに投稿して自慢したりできます．</p><h3>Autodesk SketchBookでおえかき</h3><ul><li><a href="https://itunes.apple.com/jp/app/autodesk-sketchbook/id883738213?mt=8" target="_blank" rel="noopener">Autodesk SketchBook - App Store</a></li></ul><p>わたしはおえかき練習中の身なのですが，個人的に好きなUIのアプリだったため，紹介したいと思います．</p><p>Autodesk SketchBookは，<strong>片手で描きもう片方の手でUIの操作をする</strong>という使い方ができることや，<strong>ジェスチャー機能が豊富である</strong>ことが特徴です．また，プリセットにコピックのブラシやペンが標準で搭載されているのも特徴だと思います(Apple Pencilには画面との角度と筆圧しかパラメータがないため，使用感覚は本物とは異なりますが)．</p><img src="/2018/05/24/iPad-第6世代-とApple-Pencilの活用方法-なるべく安く買う方法/ipad_sketch1.jpg" title="コピックのプリセットが"><img src="/2018/05/24/iPad-第6世代-とApple-Pencilの活用方法-なるべく安く買う方法/ipad_sketch2.jpg" title="左手でスライドしてパネルを切り替え"><img src="/2018/05/24/iPad-第6世代-とApple-Pencilの活用方法-なるべく安く買う方法/ipad_sketch3.jpg" title="ジェスチャー機能も豊富"><p>マルチタッチ時にたまに動作が不安定になることがあります．また，<strong>保存ボタンがない</strong>ため，落ちたときのダメージが大きいです．一旦ギャラリーに戻る際に保存するかどうかを選べるのですが，標準で保存ボタンがほしいなと思います……</p><p>たとえば下に載せたものは，このアプリを使って描いたイラストです．</p><blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">力尽きた <a href="https://t.co/zzrhCvprvN" target="_blank" rel="noopener">pic.twitter.com/zzrhCvprvN</a></p>&mdash; ねころこん (@tokoro10g) <a href="https://twitter.com/tokoro10g/status/998957454011482113?ref_src=twsrc%5Etfw" target="_blank" rel="noopener">2018年5月22日</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script><blockquote class="twitter-tweet" data-lang="ja"><p lang="und" dir="ltr"><a href="https://t.co/8p5jJAWSxY" target="_blank" rel="noopener">pic.twitter.com/8p5jJAWSxY</a></p>&mdash; ねころこん (@tokoro10g) <a href="https://twitter.com/tokoro10g/status/998723375731064832?ref_src=twsrc%5Etfw" target="_blank" rel="noopener">2018年5月22日</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script><p>仙狐さんかわいい…</p><iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=gelidium-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B07BQP14S2&linkId=f6fde63206bf365da8261ea13a7113c2"></iframe><p>Autodesk SketchBookは，絵を書いている途中経過の<strong>タイムラプス録画に対応</strong>しています．(下の動画は撮った後にiMovieでスピードを調整したものです．)</p><blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">あややリベンジ <a href="https://t.co/4UPrlfKf4c" target="_blank" rel="noopener">pic.twitter.com/4UPrlfKf4c</a></p>&mdash; ねころこん (@tokoro10g) <a href="https://twitter.com/tokoro10g/status/998957288315469825?ref_src=twsrc%5Etfw" target="_blank" rel="noopener">2018年5月22日</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script><h2>iPadをなるべく安く買う</h2><h3>学生・教職員ストア</h3><img src="/2018/05/24/iPad-第6世代-とApple-Pencilの活用方法-なるべく安く買う方法/apple_academic.png" title="ここをクリックしてね"><p>教育期間関係者であれば，Apple Storeの一番下にある<strong>学生・教職員ストアのリンクをクリック</strong>してから買い物をすることで，約2〜5%ほどの割引を受けることができます．なお，この割引は大学生協で購入しても適用されるようです．</p><p>しかし，大学生協で購入した場合は，つぎに説明するポイント還元を受けられません．</p><h3>Rebatesで楽天ポイント1%還元</h3><p>楽天が運営するRebatesというサービスを経由してApple Storeで買い物をすると，<strong>通常1%のポイント還元</strong>を受けることができます．たとえば，今回購入したiPadとApple Pencilは合計でおよそ60,000円ですが，税抜きおよそ56,600円の1%にあたる566ポイントを受け取ることができました．</p><img src="/2018/05/24/iPad-第6世代-とApple-Pencilの活用方法-なるべく安く買う方法/rebates.jpg" title="Rebatesからのポイント還元"><p>これは学生・教職員ストアの割引と併用することができます(公費購入の場合はポイントの扱いについて事務担当に確認してください)．また，もちろん学生・教職員ストアでない場合にもこれは適用されます．</p><p>さらに，Rebatesに登録した上で条件を満たすお買い物をすると，<strong>初回購入ボーナス500ポイント</strong>がもらえるキャンペーン特典があります．詳しくは下のバナーから確認してみてください．</p><a href="https://www.rebates.jp/referrer?referrerid=PEoGTp1QEy8%3D" target="_blank" rel="nofollow"><img src="//static.rebates.jp/img/campaign/75/badge-banner.png" width="260"></a><p>楽天ポイントは最近マクドナルドやローソンとでも使用できるようになりましたので，この機会に活用してみてはいかがでしょうか．</p><h3>家電量販店のキャンペーン</h3><p>ネット回線契約で割引とか，大型家電購入で割引といったようなキャンペーンが行われている場合があります．もしタイミングが合うようなら，上記よりも圧倒的な割引率で購入できるチャンスです．</p><h2>買っておいた方が良いアクセサリーなど</h2><p>Apple Pencilを使用する場合は，キャップの紛失やペンの落下を防ぐためのパーツを購入すると良いでしょう．わたしは以下のグリップとキャップをAmazonで購入しました．</p><iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=gelidium-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B075NDH2DT&linkId=51921b527586bf0a5099aa1d738e77ab"></iframe><iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=gelidium-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B075NK4NYQ&linkId=f736441c9b83a9aa87779d6e34829d97"></iframe><p>こちらのグリップは知人から紹介してもらったものなのですが，<strong>マグネットでかなり強固に取り付けることができる</strong>ので，紛失や落下の心配が和らぎます．</p><p>冒頭の写真のカバーはこちらから:</p><a href="https://hb.afl.rakuten.co.jp/hgc/16b47263.f655425f.16b47264.11d82a79/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fkodawari-ichiban%2Fipad-3009%2F&m=http%3A%2F%2Fm.rakuten.co.jp%2Fkodawari-ichiban%2Fi%2F10077755%2F&link_type=pict&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0Iiwic2l6ZSI6IjQwMHg0MDAiLCJuYW0iOjEsIm5hbXAiOiJkb3duIiwiY29tIjoxLCJjb21wIjoiZG93biIsInByaWNlIjoxLCJib3IiOjEsImNvbCI6MH0%3D" target="_blank" rel="nofollow" style="word-wrap:break-word;"><img src="https://hbb.afl.rakuten.co.jp/hgb/16b47263.f655425f.16b47264.11d82a79/?me_id=1218623&item_id=10077755&m=https%3A%2F%2Fthumbnail.image.rakuten.co.jp%2F%400_mall%2Fkodawari-ichiban%2Fcabinet%2Fipadair%2Fipad3-100100.jpg%3F_ex%3D80x80&pc=https%3A%2F%2Fthumbnail.image.rakuten.co.jp%2F%400_mall%2Fkodawari-ichiban%2Fcabinet%2Fipadair%2Fipad3-100100.jpg%3F_ex%3D400x400&s=400x400&t=pict" border="0" style="margin:2px" alt="" title=""></a><h2>最後に</h2><p>これからしばらく使用して見えてきたことがあればまた改めて記事を書こうと思います．また，もっと便利なツールをもしご存知の方がいらっしゃいましたら，ぜひ教えてください！</p>]]></content>
    
    <summary type="html">
    
      &lt;img src=&quot;/2018/05/24/iPad-第6世代-とApple-Pencilの活用方法-なるべく安く買う方法/ipad_photo.jpg&quot; title=&quot;購入したアクセサリー類を取り付けた様子&quot;&gt;
&lt;h2&gt;ついに買ってしまったiPad第6世代とApple Pencil&lt;/h2&gt;
&lt;p&gt;今年の3月に発売されたiPad第6世代は，これまでiPad Proにしか対応していなかった&lt;strong&gt;Apple Pencilにも対応したモデル&lt;/strong&gt;です．
これまでiPad Proの価格に悩まされて購入に踏み切れなかった私ですが，この知らせを受けて手が滑って，つい1週間ほど前に(自費で)iPadを購入してしまいました．&lt;/p&gt;
&lt;p&gt;今回購入したのは以下のモデルです．&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://amzn.to/2kifyQg&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;iPad 9.7インチ第6世代128 GB Wi-Fi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://amzn.to/2s0myWq&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Apple Pencil&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これまでスタイラスを頑なに作らなかったAppleでしたし，正直Apple Pencilの何が良いのか，1万円も出して買うだけの価値はあるのか疑問でした．
今回アーティストやデザイナー以外でもかなり便利に活用できることがわかったので，記事に残そうと思います．&lt;/p&gt;
&lt;p&gt;私の普段のユースケースにかなり偏った記事になりますが，特に研究者の方や日曜エンジニアの方には，活用いただける記事になっているのではないかと思います．
また，記事の最後で便利なアクセサリーや，Apple製品をなるべく安く購入する方法についても書こうと思います．&lt;/p&gt;
&lt;h2&gt;この記事の概要&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;研究における活用方法&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Foxit Mobile PDFでPDFファイルにメモしながら記事を読む&lt;/li&gt;
&lt;li&gt;Notabilityで快適にノートを取る&lt;/li&gt;
&lt;li&gt;MATLAB Mobileで計算・プロットを作成する&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;趣味における活用方法&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;OnshapeアプリでiPadで3D CAD&lt;/li&gt;
&lt;li&gt;Autodesk SketchBookでおえかき&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;なるべく安く買う方法&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;学生・教職員ストアについて&lt;/li&gt;
&lt;li&gt;Rebatesで楽天ポイント還元&lt;/li&gt;
&lt;li&gt;その他考えられる方法&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;便利なアクセサリー類&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
    
    </summary>
    
      <category term="雑記" scheme="http://blog.tokor.org/categories/%E9%9B%91%E8%A8%98/"/>
    
    
      <category term="iPad" scheme="http://blog.tokor.org/tags/iPad/"/>
    
      <category term="Apple Pencil" scheme="http://blog.tokor.org/tags/Apple-Pencil/"/>
    
      <category term="Foxit" scheme="http://blog.tokor.org/tags/Foxit/"/>
    
      <category term="Notability" scheme="http://blog.tokor.org/tags/Notability/"/>
    
      <category term="SketchBook" scheme="http://blog.tokor.org/tags/SketchBook/"/>
    
      <category term="Rebates" scheme="http://blog.tokor.org/tags/Rebates/"/>
    
  </entry>
  
  <entry>
    <title>STM32F4Discovery向けにNuttX(RTOS)をビルドしてみる</title>
    <link href="http://blog.tokor.org/2018/03/31/STM32F4Discovery%E5%90%91%E3%81%91%E3%81%ABNuttX-RTOS-%E3%82%92%E3%83%93%E3%83%AB%E3%83%89%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B/"/>
    <id>http://blog.tokor.org/2018/03/31/STM32F4Discovery向けにNuttX-RTOS-をビルドしてみる/</id>
    <published>2018-03-31T10:10:00.000Z</published>
    <updated>2019-05-12T07:24:29.969Z</updated>
    
    <content type="html"><![CDATA[<h2>概要</h2><p>FreeRTOSはみんな使っててつまらないから別のRTOSを使ってみるよ</p><h2>NuttXについて</h2><p>NuttX<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>はPOSIX, ANSI準拠のフリーのRTOSで，いろいろなプラットフォームに対応しています．有名所では<a href="https://amzn.to/2GHg6w2" target="_blank" rel="noopener">SonyのICレコーダ</a>や<a href="https://amzn.to/2pUVdD5" target="_blank" rel="noopener">マルチコプター向けのフライトコントローラPixhawk</a>に採用されていたりします<sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup>．</p><p>FreeRTOSなどのほとんどのメジャーなRTOSにはシェルは提供されていませんが，NuttXにはNuttShell(nsh)というbashライクな独自のシェルが用意されています．また，ファイルシステムやネットワーク，オーディオ，グラフィクスなどの拡張機能も実装されています．アプリケーションはRTOSのコードと一緒にリンクする必要はなく，別にリンクしたELFの読み込みもサポートしています．もはやふつうのOSと遜色ない機能を持ち合わせています．何にでも使えそうな感じがします．</p><p>続きからF4Discovery向けにビルドしていきます．</p><a id="more"></a><h2>F4Discovery向けのビルド</h2><p>基本的に以下のチュートリアルを参考にすればおkですが，メモとして残しておきます．http://nuttx.org/doku.php?id=wiki:getting-started:stm32f4discovery_unix</p><p>NuttXをビルドするには，<code>kconfig-frontends</code> をインストールする必要があります．わたしはArchなのでAURで入れました(執筆時点ではそのままではビルドできなかったので，AURのコメント欄にあるパッチを適用しました)．</p><p>zipかgit経由でnuttx本体とappsをダウンロードして，nuttx, appsのフォルダを同じディレクトリにつっこみます．</p><figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">$ ls</span><br><span class="line">apps   nuttx</span><br></pre></td></tr></table></figure><p>ビルドに移ります．今回はF4Discoveryを使用し，オンボードのMicroUSB経由でnshをいじることにします．</p><figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">$ cd nuttx/tools</span><br><span class="line">$ ./configure.sh stm32f4discovery/usbnsh</span><br><span class="line">$ cd ..</span><br><span class="line">$ make</span><br></pre></td></tr></table></figure><p>distcleanしろと怒られた場合はnuttxディレクトリで <code>make distclean</code> を実行してから再試行します．</p><p>ビルドが完了すると <code>nuttx.hex</code> ファイルがnuttxディレクトリに出力されます．</p><h2>動作確認</h2><p>st-flash等で焼きます．</p><figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">$ st-flash --format ihex write nuttx.hex</span><br></pre></td></tr></table></figure><p>F4DiscoveryのMicroUSBポートとPCを接続し，別途モバイルバッテリー等を使用してF4Discoveryに電源を供給します(MicroUSBからは給電されません)．USB CDC-ACMデバイスとして認識されるので，適当なシリアルターミナルを開きます．</p><figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">$ picocom --b 115200 /dev/ttyACM0</span><br></pre></td></tr></table></figure><p>起動まで若干の時間がかかりますが，Enterを何回か押していると反応するはずです．以下の画像のようにシェルとして使用できます．</p><img src="/2018/03/31/STM32F4Discovery向けにNuttX-RTOS-をビルドしてみる/picocom_nsh.png" title="nshを開いた感じ"><h2>アプリケーションを試しに入れてみる</h2><p>いきなり自作のELFを実行というのもアレなので，まず最初のステップとして付属のビルトイン(NuttXと一緒にリンクする)アプリケーションを動かしてみます．appsの中にあるpwmというサンプルを動かしてみます．</p><p>ビルトインアプリケーションを入れるには，menuconfigから設定を行うと楽です．</p><figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">$ make menuconfig</span><br></pre></td></tr></table></figure><ul><li>System Type<ul><li>STM32 Peripheral Support<ul><li>TIM4 にチェック</li></ul></li><li>Timer Configuration<ul><li>TIM4 PWM にチェック</li><li>TIM4 PWM Output Channel を 2 に変更 (ヘッダにCH2しか定義されていないので，他のCHを指定すると失敗する)</li></ul></li></ul></li><li>Device Drivers<ul><li>PWM Driver Support にチェック</li></ul></li><li>Application Configuration<ul><li>Examples<ul><li>Pulse width modulation (PWM) example にチェック</li></ul></li></ul></li></ul><p>また，執筆時点(v7.24)では以下の修正が必要です．バグなのかconfigのどこかが抜けているのかよくわかりませんが，ビルドに失敗します．以下のコードを configs/stm32f4discovery/src/stm32_pwm.c の85行目あたりに書き加えて修正します．</p><figure class="highlight"><pre><span class="GruvboxAqua">#ifndef OK</span><span class="GruvboxAqua">#  define OK </span><span class="GruvboxPurple">0</span><span class="GruvboxAqua">#endif</span></pre></figure><p><code>make</code> して書き込み，シリアルターミナルを開きます．</p><figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">nsh&gt; pwm -h</span><br></pre></td></tr></table></figure><p>とするとヘルプが表示されます．たとえば</p><figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">nsh&gt; pwm -d 10 -t 1</span><br></pre></td></tr></table></figure><p>を実行すると，基板下部の橙色LEDがDuty比10%で1秒間発光します．</p><p><code>/dev/pwm0</code> はnsh上から <code>echo</code> で値を書き込むことはできないようです．<code>ioctl</code> でプロパティを操作する必要があるようです．</p><h2>つぎはなにをしよう</h2><p>Discoveryでは遊べることに限界があるので，つぎはaitendoのSTM32F103ボード<sup class="footnote-ref"><a href="#fn3" id="fnref3">[3]</a></sup>を使ってSDIOとファイルシステムのテスト，SDに書いたELFの実行あたりをやってみようと思います．</p><hr class="footnotes-sep"><section class="footnotes"><ol class="footnotes-list"><li id="fn1" class="footnote-item"><p><a href="http://nuttx.org/doku.php?id=nuttx" target="_blank" rel="noopener">NuttX Real-Time Operating System</a> <a href="#fnref1" class="footnote-backref">↩</a></p></li><li id="fn2" class="footnote-item"><p><a href="https://en.wikipedia.org/wiki/NuttX" target="_blank" rel="noopener">NuttX - Wikipedia</a> <a href="#fnref2" class="footnote-backref">↩</a></p></li><li id="fn3" class="footnote-item"><p><a href="http://www.aitendo.com/product/5414" target="_blank" rel="noopener">★特売品★STM32マイコンボード - aitendo</a> <a href="#fnref3" class="footnote-backref">↩</a></p></li></ol></section>]]></content>
    
    <summary type="html">
    
      &lt;h2&gt;概要&lt;/h2&gt;
&lt;p&gt;FreeRTOSはみんな使っててつまらないから別のRTOSを使ってみるよ&lt;/p&gt;
&lt;h2&gt;NuttXについて&lt;/h2&gt;
&lt;p&gt;NuttX&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;はPOSIX, ANSI準拠のフリーのRTOSで，いろいろなプラットフォームに対応しています．
有名所では&lt;a href=&quot;https://amzn.to/2GHg6w2&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;SonyのICレコーダ&lt;/a&gt;や&lt;a href=&quot;https://amzn.to/2pUVdD5&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;マルチコプター向けのフライトコントローラPixhawk&lt;/a&gt;に採用されていたりします&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn2&quot; id=&quot;fnref2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;．&lt;/p&gt;
&lt;p&gt;FreeRTOSなどのほとんどのメジャーなRTOSにはシェルは提供されていませんが，NuttXにはNuttShell(nsh)というbashライクな独自のシェルが用意されています．
また，ファイルシステムやネットワーク，オーディオ，グラフィクスなどの拡張機能も実装されています．
アプリケーションはRTOSのコードと一緒にリンクする必要はなく，別にリンクしたELFの読み込みもサポートしています．
もはやふつうのOSと遜色ない機能を持ち合わせています．何にでも使えそうな感じがします．&lt;/p&gt;
&lt;p&gt;続きからF4Discovery向けにビルドしていきます．&lt;/p&gt;
    
    </summary>
    
      <category term="電子工作" scheme="http://blog.tokor.org/categories/%E9%9B%BB%E5%AD%90%E5%B7%A5%E4%BD%9C/"/>
    
      <category term="STM32" scheme="http://blog.tokor.org/categories/%E9%9B%BB%E5%AD%90%E5%B7%A5%E4%BD%9C/STM32/"/>
    
    
      <category term="NuttX" scheme="http://blog.tokor.org/tags/NuttX/"/>
    
      <category term="F4Discovery" scheme="http://blog.tokor.org/tags/F4Discovery/"/>
    
      <category term="RTOS" scheme="http://blog.tokor.org/tags/RTOS/"/>
    
  </entry>
  
  <entry>
    <title>それほど間違っていないマイクロマウス用語事典2018年版</title>
    <link href="http://blog.tokor.org/2018/03/22/%E3%81%9D%E3%82%8C%E3%81%BB%E3%81%A9%E9%96%93%E9%81%95%E3%81%A3%E3%81%A6%E3%81%84%E3%81%AA%E3%81%84%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%83%9E%E3%82%A6%E3%82%B9%E7%94%A8%E8%AA%9E%E8%BE%9E%E5%85%B8/"/>
    <id>http://blog.tokor.org/2018/03/22/それほど間違っていないマイクロマウス用語辞典/</id>
    <published>2018-03-22T12:35:51.000Z</published>
    <updated>2019-05-12T07:24:29.989Z</updated>
    
    <content type="html"><![CDATA[<img src="/2018/03/22/それほど間違っていないマイクロマウス用語辞典/dictionary.png" title="マイクロマウス用語，さすがに多すぎでは…"><h2>なにこれ</h2><p>マイクロマウスをはじめたばかりの人にありがちなのが，大会に行ったものの用語がよくわからなくて，「何言ってんだこいつら」状態になるという問題です．私が初めてマイクロマウスの大会に参加したのは2013年の学生大会なのですが，その際に審査員の方から「これは重ね探索ですか？」と聞かれて「何だそれは」となったのを昨日のことのように思い出します．また，競技者は当日心の余裕がないので，MCの人にマイクを向けられても観客のことなんかそっちのけで自分が普段使ってる用語で話してしまいがちです．</p><p>というわけで，私が「これはマイクロマウス固有の用語だろう」と独断と偏見により判断した語句を，軽く事典ライクにまとめてみました．なるべく一般的な語句を使用して説明しようと試みています．一部内輪ネタが入ってしまっているかもしれません．すみません．</p><p>コメントくだされば2019年版に反映させるかもしれませんが保証はしません．</p><p>ちなみにこの記事のネーミングはこちらの書籍をパクっています．</p><a href="https://www.amazon.co.jp/%E3%81%9D%E3%82%8C%E3%81%BB%E3%81%A9%E9%96%93%E9%81%95%E3%81%A3%E3%81%A6%E3%81%AA%E3%81%84%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E7%94%A8%E8%AA%9E%E8%BE%9E%E5%85%B8-MW/dp/483991964X/ref=as_li_ss_il?ie=UTF8&qid=1507543677&sr=8-1&keywords=%E3%81%9D%E3%82%8C%E3%81%BB%E3%81%A9%E9%96%93%E9%81%95%E3%81%A3%E3%81%A6%E3%81%AA%E3%81%84&linkCode=li3&tag=gelidium-22&linkId=1343230df36b00e2e5bbdb18ee08e365" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=483991964X&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=gelidium-22"></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=gelidium-22&l=li3&o=9&a=483991964X" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;"><a id="more"></a><h2>改訂履歴(6/9〜)</h2><ul><li><a href="#%E3%81%82%E3%81%A0%E3%81%A1%E3%81%BB%E3%81%86%E3%80%90%E8%B6%B3%E7%AB%8B%E6%B3%95%E3%80%91">足立法</a>の由来のエビデンスが確認できたため，説明を変更．55Tさん情報ありがとうございます．</li></ul><hr><h2>あ行</h2><div id="あだちほう【足立法】"></div><h4>あだちほう【足立法】</h4><p>迷路探索アルゴリズムの一種．足立法では，まず未知の壁をないものとして考えて求めた最短経路を走行しようとする．壁があって進めなくなったら，その時点までで得られた迷路の情報をもとに最短経路を再度導出するという処理を繰り返す．この考え方を用いることで，スタートからゴールまでの経路が存在する場合，必ずゴールにたどり着ける．</p><p>狭義に<a href="#%E3%81%BB%E3%81%99%E3%81%86%E3%81%BE%E3%81%A3%E3%81%B7%E3%80%90%E6%AD%A9%E6%95%B0%E3%83%9E%E3%83%83%E3%83%97%E3%80%91">歩数マップ</a>と上記のアルゴリズムを用いたものを指すこともある．その昔，足立芳彦さんが福山マイコンクラブに所属していた際に考案し，競技者に広く知れ渡ったことから，この名前が定着した．</p><p>学術的にはIncremental heuristic searchやReplanning algorithmというカテゴリに属するアルゴリズムである．</p><p>参考: <a href="https://jsdkk.com/home/glossary/glossary-micromouse/" target="_blank" rel="noopener">用語解説【マイクロマウス】 | 日本システムデザイン株式会社</a></p><div id="いたまうす【板マウス】"></div><h4>いたまうす【板マウス】</h4><p>基板をシャーシとして用いた機体．走る基板．2003年頃から登場したもので，現在は<a href="#%E3%81%A7%E3%81%83%E3%83%BC%E3%81%97%E3%83%BC%E3%81%BE%E3%81%86%E3%81%99%E3%80%90DC%E3%83%9E%E3%82%A6%E3%82%B9%E3%80%91">DCマウス</a>の主流の形態となっている．</p><p>参考: <a href="https://web.archive.org/web/20171003002021/http://mmk.rulez.jp/?page_id=63" target="_blank" rel="noopener">物理を考慮した進化 | マイクロマウス委員会　関西支部</a></p><div id="いたまうす【痛マウス】"></div><h4>いたまうす【痛マウス】</h4><p><a href="https://ja.wikipedia.org/wiki/%E7%97%9B%E8%BB%8A" target="_blank" rel="noopener">痛車</a>のマイクロマウスバージョン．</p><div id="いねかり【稲刈り】"></div><h4>いねかり【稲刈り】</h4><p>迷路を片付ける際に<a href="#%E3%81%AF%E3%81%97%E3%82%89%E3%80%90%E6%9F%B1%E3%80%91">柱</a>を引き抜くこと．柱の破損は稲刈りの際によく起こるので注意．</p><p>対義語は<a href="#%E3%81%9F%E3%81%86%E3%81%88%E3%80%90%E7%94%B0%E6%A4%8D%E3%81%88%E3%80%91">田植え</a>．</p><div id="うちゅうじん【宇宙人】"></div><h4>うちゅうじん【宇宙人】</h4><p>上位入賞の常連や，常軌を逸した機体を製作する人のこと．対義語は「人間」「地球人」．</p><p>宇宙人の一歩手前のレベルとして「成層圏あたり」や「人類トップクラス」などの表現が用いられることもある．</p><div id="えきすぱーとくらす【エキスパートクラス】"></div><h4>えきすぱーとくらす【エキスパートクラス】</h4><p>2017年まで存在した，<a href="#%E3%81%9C%E3%82%93%E3%81%AB%E3%81%BB%E3%82%93%E3%81%9F%E3%81%84%E3%81%8B%E3%81%84%E3%80%90%E5%85%A8%E6%97%A5%E6%9C%AC%E5%A4%A7%E4%BC%9A%E3%80%91">全日本大会</a>のマイクロマウス競技のクラス分け．<a href="#%E3%81%B5%E3%82%8C%E3%81%A3%E3%81%97%E3%82%85%E3%81%BE%E3%82%93%E3%81%8F%E3%82%89%E3%81%99%E3%80%90%E3%83%95%E3%83%AC%E3%83%83%E3%82%B7%E3%83%A5%E3%83%9E%E3%83%B3%E3%82%AF%E3%83%A9%E3%82%B9%E3%80%91">フレッシュマンクラス</a>とは異なり16x16マスの迷路で予選を行い，上位25名ほどが決勝進出となる．マイクロマウス競技では基本的に<a href="#%E3%81%B5%E3%82%89%E3%81%A3%E3%81%97%E3%82%85%E3%80%90%E3%83%95%E3%83%A9%E3%83%83%E3%82%B7%E3%83%A5%E3%80%91">フラッシュ撮影</a>は禁止されているが，全日本大会のエキスパートクラス決勝ではこれが例外的に許可されている(<a href="http://www.ntf.or.jp/mouse/kitei_classic.html" target="_blank" rel="noopener">運営に関する注意事項5(2)</a>)．</p><div id="えむしー【MC】"></div><h4>えむしー【MC】</h4><p><a href="#%E3%81%97%E3%82%93%E3%81%95%E3%81%84%E3%82%93%E3%80%90%E5%AF%A9%E6%9F%BB%E5%93%A1%E3%80%91"><s>競技者を煽る</s></a> 大会全体や各競技の司会進行を務める人．事務所所属の声優さんたちらしい．</p><p>機体名を読んでくれるので，恥ずかしくて読めないような名前にしないように注意．</p><div id="えんかいげい【宴会芸】"></div><h4>えんかいげい【宴会芸】</h4><p>機体を板に載せ，<a href="#%E3%81%98%E3%82%83%E3%81%84%E3%82%8D%E3%81%9B%E3%82%93%E3%81%95%E3%80%90%E3%82%B8%E3%83%A3%E3%82%A4%E3%83%AD%E3%82%BB%E3%83%B3%E3%82%B5%E3%80%91">慣性センサ</a>を使って姿勢角を一定に保たせながら，板を回す技．</p><p>モータの制御と慣性センサからの角速度の取得と制御ができていることを確認する，マイクロマウス製作の基本の「ほ」あたりに位置するもの．</p><blockquote class="twitter-tweet" data-partner="tweetdeck"><p lang="ja" dir="ltr">宴会芸です <a href="https://t.co/o5LF4XcTdg" target="_blank" rel="noopener">pic.twitter.com/o5LF4XcTdg</a></p>&mdash; ところたん (@tokoro10g) <a href="https://twitter.com/tokoro10g/status/926860410191454208?ref_src=twsrc%5Etfw" target="_blank" rel="noopener">November 4, 2017</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script><div id="えんこーだ【エンコーダ】"></div><h4>えんこーだ【エンコーダ】</h4><p>軸の回転数を計測するセンサであるロータリーエンコーダのこと．</p><p>ロータリーエンコーダには大きく分けてインクリメンタル型とアブソリュート型の2種類がある．インクリメンタル型は，回転に伴って出力されるパルスによって，軸の相対的な回転を検出するタイプである．一方，アブソリュート型では軸の絶対角度を取得できる．絶対角度の出力にはグレイコードと呼ばれるエンコード手法が使われるほか，SPIなどを使って角度の値をICとの通信で取得できるものもある．</p><div id="おーとすたーと【オートスタート】"></div><h4>おーとすたーと【オートスタート】</h4><p>2回目以降の走行において，競技者の操作なしに自動でスタートすること．スタート区画への進入後最低でも2秒経過してからスタートしなければ，オートスタートとして認定されない(<a href="http://www.ntf.or.jp/mouse/kitei_classic.html" target="_blank" rel="noopener">競技規定3-4</a>)．<a href="#%E3%81%98%E3%82%8A%E3%81%A4%E3%81%97%E3%82%87%E3%81%86%E3%80%90%E8%87%AA%E5%BE%8B%E8%B3%9E%E3%80%91">自律賞</a>を獲るためには必須の機能．</p><div id="おおまわり【大回り】"></div><h4>おおまわり【大回り】</h4><p><a href="#%E3%81%9F%E3%83%BC%E3%82%93%E3%80%90%E3%82%BF%E3%83%BC%E3%83%B3%E3%80%91">ターン</a>の曲率半径が大きいことを表す語．主に90度や180度のターンにおいて，2区画以上をまたいだターンのことを指す．</p><hr><h2>か行</h2><div id="かいろきゃど【回路CAD】"></div><h4>かいろきゃど【回路CAD】</h4><p>電子回路や<a href="#%E3%81%8D%E3%81%B0%E3%82%93%E3%80%90%E5%9F%BA%E6%9D%BF%E3%80%91">基板</a>を設計するソフトウェア．マイクロマウスの製作者の間では，Eagle, KiCad, PCBEなどがよく用いられる．</p><div id="かきん【課金】"></div><h4>かきん【課金】</h4><p>硬貨を機体に取り付けて機体の質量や重心を調整すること．「+30円」などが機体名についている場合はもれなく課金されている．なお，この行為は硬貨を損傷したり鋳つぶすものではないため，貨幣損傷等取締法違反にはあたらない．</p><div id="かさねたんさく【重ね探索】"></div><h4>かさねたんさく【重ね探索】</h4><p>すでに持っている迷路の情報に追加しながら<a href="#%E3%81%9F%E3%82%93%E3%81%95%E3%81%8F%E3%80%90%E6%8E%A2%E7%B4%A2%E3%80%91">探索走行</a>をすること．探索走行に失敗して迷路の情報が不完全であるような場合に，競技者の判断で行われる．</p><p>巻頭言で述べたように，このマイクロマウス用語はこの事典を書く原因になった言葉の一つである．</p><div id="かべぎれ【壁切れ】"></div><h4>かべぎれ【壁切れ】</h4><p>横壁や柱が出現する(なくなる)区間を通過したときに起こる<a href="#%E3%81%8B%E3%81%B9%E3%81%9B%E3%82%93%E3%81%95%E3%80%90%E5%A3%81%E3%82%BB%E3%83%B3%E3%82%B5%E3%80%91">壁センサ</a>の立ち上がり(立ち下がり)を検出して，走行距離を<a href="#%E3%81%BB%E3%81%9B%E3%81%84%E3%80%90%E8%A3%9C%E6%AD%A3%E3%80%91">補正</a>する処理のこと．この処理を用いることで，一般の移動ロボットにおいて行われるオドメトリ(自己位置推定)を行わなくとも，区画の中のどの位置に機体がいるのかを知ることができ，前後方向のズレに対応できる．</p><div id="かべせいぎょ【壁制御】"></div><h4>かべせいぎょ【壁制御】</h4><p><a href="#%E3%81%8B%E3%81%B9%E3%81%9B%E3%82%93%E3%81%95%E3%80%90%E5%A3%81%E3%82%BB%E3%83%B3%E3%82%B5%E3%80%91">壁センサ</a>の数値を利用して，区画の真ん中を走る制御方法のこと．参考: <a href="/2015/12/21/rogy-Advent-Calendar-2015-マイクロマウスと制御理論/" title="[rogy Advent Calendar 2015] マイクロマウスと制御理論 (1)壁トレース制御">[rogy Advent Calendar 2015] マイクロマウスと制御理論 (1)壁トレース制御</a></p><div id="かべせんさ【壁センサ】"></div><h4>かべせんさ【壁センサ】</h4><p>壁の有無や壁と機体との距離を測るために用いられるセンサ．通常赤外線LEDとフォトダイオードを用いて構成される．走行しながら迷路の形状を記憶するためには，最低でも前・右前・左前の3つの壁を認識するセンサを搭載する必要がある．</p><div id="かるまんふぃるた【カルマンフィルタ】"></div><h4>かるまんふぃるた【カルマンフィルタ】</h4><p>観測対象の動的モデルと統計的性質を利用して，対象の状態を推定する手法．<a href="#%E3%81%BE%E3%81%86%E3%81%95%E3%83%BC%E3%80%90%E3%83%9E%E3%82%A6%E3%82%B5%E3%83%BC%E3%80%91">マウサー</a>のいうカルマンフィルタは必ずしも計測・制御用語のカルマンフィルタとは一致しない可能性があることに注意が必要である．</p><div id="かんそう【完走】"></div><h4>かんそう【完走】</h4><p>スタートから<a href="#%E3%81%94%E3%83%BC%E3%82%8B%E3%80%90%E3%82%B4%E3%83%BC%E3%83%AB%E3%80%91">ゴール</a>まで到達すること．全走行を走りきることではない．まずはこれを目指そう．</p><div id="きちくかんかそく【既知区間加速】"></div><h4>きちくかんかそく【既知区間加速】</h4><p>壁がないことが既知である区画を加速して直進することで，<a href="#%E3%81%9F%E3%82%93%E3%81%95%E3%81%8F%E3%80%90%E6%8E%A2%E7%B4%A2%E3%80%91">探索</a>時間を短縮する手法のこと．<a href="#%E3%81%AA%E3%81%AA%E3%82%81%E3%81%9D%E3%81%86%E3%81%93%E3%81%86%E3%80%90%E6%96%9C%E3%82%81%E8%B5%B0%E8%A1%8C%E3%80%91">斜め走行</a>と組み合わせる場合もある．ちなみに鬼畜とは関係ない．</p><div id="きばん【基板】"></div><h4>きばん【基板】</h4><p>電気・電子回路を実装する板のこと．基&quot;<strong>盤</strong>&quot;じゃなくて基&quot;<strong>板</strong>&quot;．</p><div id="きゃど【CAD】"></div><h4>きゃど【CAD】</h4><p>&quot;Computer-aided design&quot;の略．コンピュータを用いて設計すること．マイクロマウスの文脈では，主に機械設計に用いるソフトウェアのことを指す．</p><div id="きゅういん【吸引】"></div><h4>きゅういん【吸引】</h4><p>ファンを用いて地面から空気を吸い上げることによって，地面に吸着する機構．みかけの重力が大きくなるためタイヤの摩擦力が増加し，スリップの抑制につながる．</p><div id="くぉーたーまうすきょうぎ【クォーターマウス競技】"></div><h4>くぉーたーまうすきょうぎ【クォーターマウス競技】</h4><p>8x8の迷路を使用した初心者向けの競技．地区大会で開催される．走行の質(壁にぶつからないか，完走できるか等)に応じてバッジがもらえる．</p><p>迷路の区画数が通常の1/4であるためこの名称が使用されている．1/4のサイズのマウスの競技ではないことに注意．</p><div id="くし【櫛】"></div><h4>くし【櫛】</h4><img src="/2018/03/22/それほど間違っていないマイクロマウス用語辞典/comb.png" title="2014年全日本大会エキスパートクラス決勝迷路の櫛"><p>髪をとく櫛のような形状をした迷路の部分のこと．別名「駐車場」．</p><p>特に上図のように両側に櫛がある場合は，<a href="#%E3%81%8B%E3%81%B9%E3%81%9B%E3%81%84%E3%81%8E%E3%82%87%E3%80%90%E5%A3%81%E5%88%B6%E5%BE%A1%E3%80%91">壁による走行位置の補正</a>が困難である．</p><div id="くらしっくまうすきょうぎ【クラシックマウス競技】"></div><h4>くらしっくまうすきょうぎ【クラシックマウス競技】</h4><p>マイクロマウス競技の一種．区画の1辺が180mmの迷路を使用して競技を行う．2018年に「マイクロマウスクラシック競技」から改称された．</p><p>1980年に開かれた第1回全日本マイクロマウス大会から基本ルールは変わっていない．</p><div id="けいびなしゅうせい【軽微な修正】"></div><h4>けいびなしゅうり【軽微な修理】</h4><p><a href="http://www.ntf.or.jp/mouse/kitei_classic.html" target="_blank" rel="noopener">競技規定1-2</a>に示されている文言．マイクロマウス競技では，競技時間を消費しながらのその場での軽微な修理が認められている．</p><blockquote><p>マイクロマウスは、競技中に操作者により、ハードウェアおよびソフトウェアの追加、取りはずし、交換、変更を受けてはならない。ただし、軽微な修理・調整は許される。</p><footer><strong>マイクロマウス競技規定</strong><cite><a href="http://www.ntf.or.jp/mouse/kitei_classic.html" target="_blank" rel="noopener">www.ntf.or.jp/mouse/kitei_classic.html</a></cite></footer></blockquote><p><a href="#%E3%81%8B%E3%81%B9%E3%81%9B%E3%82%93%E3%81%95%E3%80%90%E5%A3%81%E3%82%BB%E3%83%B3%E3%82%B5%E3%80%91">壁センサ</a>を曲げる軽微な修理は，特に<a href="#%E3%81%9B%E3%81%A3%E3%81%A8%E3%81%8F%E3%80%90%E8%AA%AC%E5%BE%97%E3%80%91">物理的な説得</a>と呼ばれる．</p><div id="けいまとび【桂馬飛び】"></div><h4>けいまとび【桂馬飛び】</h4><p><a href="#%E3%82%81%E3%81%84%E3%82%8D%E3%80%90%E8%BF%B7%E8%B7%AF%E3%80%91">迷路</a>を将棋盤に見立てた際に，桂馬が動ける位置へ至る経路のことを指す言葉．</p><p><a href="#%E3%81%AA%E3%81%AA%E3%82%81%E3%81%9D%E3%81%86%E3%81%93%E3%81%86%E3%80%90%E6%96%9C%E3%82%81%E8%B5%B0%E8%A1%8C%E3%80%91">斜め走行</a>を行う場合，桂馬飛びが左右交互に続く経路では45度と0度が1区画ごとに切り替わるため，<a href="#%E3%81%9F%E3%83%BC%E3%82%93%E3%80%90%E3%82%BF%E3%83%BC%E3%83%B3%E3%80%91">ターン</a>が連続して姿勢が崩れやすいと言われている．ある特定の条件下においては，この経路を1つの<a href="#%E3%81%8A%E3%81%8A%E3%81%BE%E3%82%8F%E3%82%8A%E3%80%90%E5%A4%A7%E5%9B%9E%E3%82%8A%E3%80%91">大回り</a>ターンに短縮することができる(<a href="#%E3%81%93%E3%81%98%E3%81%BE%E3%81%9F%E3%83%BC%E3%82%93%E3%80%90%E5%B0%8F%E5%B3%B6%E3%82%BF%E3%83%BC%E3%83%B3%E3%80%91">小島ターン</a>)．</p><div id="げいん【ゲイン】"></div><h4>げいん【ゲイン】</h4><p>倍率．主に制御に用いるパラメータを指して使用する言葉．フィードバック制御の考え方では，目標値と偏差にゲインをかけて出力を決めることで，ズレを小さくしていく．</p><div id="こじまたーん【小島ターン】"></div><h4>こじまたーん【小島ターン】</h4><img src="/2018/03/22/それほど間違っていないマイクロマウス用語辞典/kojima_turn.png" title="赤:小島ターン, 青: 通常の斜め走行"><p>マイクロマウス界の<a href="#%E3%81%86%E3%81%A1%E3%82%85%E3%81%86%E3%81%98%E3%82%93%E3%80%90%E5%AE%87%E5%AE%99%E4%BA%BA%E3%80%91">宇宙人</a>として名高い小島さんが初めて採用したとされる<a href="#%E3%81%9F%E3%83%BC%E3%82%93%E3%80%90%E3%82%BF%E3%83%BC%E3%83%B3%E3%80%91">ターン</a>のバリエーション．上図のように，45度と0度が交互に繰り返されるターンを<a href="#%E3%81%8A%E3%81%8A%E3%81%BE%E3%82%8F%E3%82%8A%E3%80%90%E5%A4%A7%E5%9B%9E%E3%82%8A%E3%80%91">大回り</a>の90度ターンに簡略化したもの．</p><p>経路としては通常のターンに比べて遠回りになるが，曲率半径の小さい45度ターンに比べて曲率半径が大きくなるため，ターン時に機体横方向にかかる遠心力が小さくなる．したがって，ターン速度を上げることができるという利点がある．</p><div id="ごーる【ゴール】"></div><h4>ごーる【ゴール】</h4><p>たどり着きたい場所．マイクロマウスでは，ゴール区画は通常2x2マス以上の正方形によって設けられる．</p><p>クラシック競技では中央の2x2マスにゴールが固定されており，ハーフサイズ競技では場所もサイズも固定されていない．そのため，ハーフサイズ競技に限定して，事前にゴールの入り口の場所を示す座標が告知される．</p><div id="こりこり【コリコリ】"></div><h4>こりこり【コリコリ】</h4><p>マウスの<a href="#%E3%82%86%E3%83%BC%E3%81%96%E3%81%84%E3%82%93%E3%81%9F%E3%81%B5%E3%81%87%E3%83%BC%E3%81%99%E3%80%90%E3%83%A6%E3%83%BC%E3%82%B6%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%95%E3%82%A7%E3%83%BC%E3%82%B9%E3%80%91">ユーザインタフェース</a>として<a href="#%E3%81%88%E3%82%93%E3%81%93%E3%83%BC%E3%81%A0%E3%80%90%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%80%E3%80%91">ロータリーエンコーダ</a>の回転を使用する際に，コリコリした触覚フィードバックを行う手法．回転量がある一定値を超えたときにモードを切り替えるのが一般的だが，その際にモータに一瞬だけ逆転トルクやブレーキをかけることで実装できる．LEDやスピーカを搭載していない基板でも使用できるテクニック．</p><div id="ころころ【コロコロ】"></div><h4>ころころ【コロコロ】</h4><p>ホコリを取るための粘着テープがついたローラー．</p><p>一般的にはカーペットの掃除に使われるが，マイクロマウスではタイヤの掃除のために使用される．タイヤにホコリが付着すると摩擦力が小さくなりスリップを起こしやすくなるため，走行1回ごとにコロコロを使用してタイヤ掃除をする競技者が多い．</p><iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=gelidium-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B001NA0E20&linkId=f68d455d0c808285562879b817b56555"></iframe><iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=gelidium-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B001N9X47S&linkId=9bd5d53a3884328e73d63eda5709075e"></iframe><iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=gelidium-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B0052BOBDY&linkId=3ff0f3419a297c22e8b0e5f41254223e"></iframe><iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=gelidium-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B0052BOC9M&linkId=eb73bfc26c19a19cef662aa8587e13e8"></iframe><hr><h2>さ行</h2><div id="さいげんせい【再現性】"></div><h4>さいげんせい【再現性】</h4><p>同一の状況が作り出される度合い．マイクロマウスの文脈では，走行時間や失敗の仕方が毎回の走行で似ている場合に，再現性が高いと言う．</p><p>再現性は，機体の走行を調整する際に非常に重要なものであるとされている．</p><div id="さいたんそうこう【最短走行】"></div><h4>さいたんそうこう【最短走行】</h4><p><a href="#%E3%81%9F%E3%82%93%E3%81%95%E3%81%8F%E3%80%90%E6%8E%A2%E7%B4%A2%E3%80%91">探索</a>によって得られた迷路の情報をもとにして，スタートから<a href="#%E3%81%94%E3%83%BC%E3%82%8B%E3%80%90%E3%82%B4%E3%83%BC%E3%83%AB%E3%80%91">ゴール</a>までの経路を高速走行すること．口語的には，最短ではない場合にも最短と呼ばれる．</p><div id="さぎ【詐欺】"></div><h4>さぎ【詐欺】</h4><p>マイクロマウスの文脈では，実力の過小評価という意味で使われる．用例として，「フレッシュマン詐欺」(<a href="#%E3%81%88%E3%81%8D%E3%81%99%E3%81%B1%E3%83%BC%E3%81%A8%E3%81%8F%E3%82%89%E3%81%99%E3%80%90%E3%82%A8%E3%82%AD%E3%82%B9%E3%83%91%E3%83%BC%E3%83%88%E3%82%AF%E3%83%A9%E3%82%B9%E3%80%91">エキスパートクラス</a>並の実力があるにもかかわらず，<a href="#%E3%81%B5%E3%82%8C%E3%81%A3%E3%81%97%E3%82%85%E3%81%BE%E3%82%93%E3%81%8F%E3%82%89%E3%81%99%E3%80%90%E3%83%95%E3%83%AC%E3%83%83%E3%82%B7%E3%83%A5%E3%83%9E%E3%83%B3%E3%82%AF%E3%83%A9%E3%82%B9%E3%80%91">フレッシュマンクラス</a>に参加すること)が挙げられる．</p><div id="さーきっときょうぎ【サーキット競技】"></div><h4>さーきっときょうぎ【サーキット競技】</h4><p>16x16サイズの迷路の外周を2周するタイムを競う競技．<a href="#%E3%81%A1%E3%81%8F%E3%81%9F%E3%81%84%E3%81%8B%E3%81%84%E3%80%90%E5%9C%B0%E5%8C%BA%E5%A4%A7%E4%BC%9A%E3%80%91">地区大会</a>や学生大会などで行われ，<a href="#%E3%81%9C%E3%82%93%E3%81%AB%E3%81%BB%E3%82%93%E3%81%9F%E3%81%84%E3%81%8B%E3%81%84%E3%80%90%E5%85%A8%E6%97%A5%E6%9C%AC%E5%A4%A7%E4%BC%9A%E3%80%91">全日本大会</a>では開催されない．通常，<a href="#%E3%81%8F%E3%82%89%E3%81%97%E3%81%A3%E3%81%8F%E3%81%8D%E3%82%87%E3%81%86%E3%81%8E%E3%80%90%E3%82%AF%E3%83%A9%E3%82%B7%E3%83%83%E3%82%AF%E7%AB%B6%E6%8A%80%E3%80%91">クラシック競技</a>終了後の迷路の外周にある壁を抜いて行われるため，走行経路の両側に壁があるとは限らない．正式名称は「支部サーキット競技」．</p><div id="さんかしょう【参加賞】"></div><h4>さんかしょう【参加賞】</h4><p><a href="#%E3%81%9C%E3%82%93%E3%81%AB%E3%81%BB%E3%82%93%E3%81%9F%E3%81%84%E3%81%8B%E3%81%84%E3%80%90%E5%85%A8%E6%97%A5%E6%9C%AC%E5%A4%A7%E4%BC%9A%E3%80%91">全日本大会</a>と一部の<a href="#%E3%81%A1%E3%81%8F%E3%81%9F%E3%81%84%E3%81%8B%E3%81%84%E3%80%90%E5%9C%B0%E5%8C%BA%E5%A4%A7%E4%BC%9A%E3%80%91">地区大会</a>で，出走者全員に配られる記念品．タオル，ふせん，定規，ペンなどのバリエーションがあり，いずれもマイクロマウスのロゴ等がプリントされた限定グッズである．</p><div id="しーえぬしー【CNC】"></div><h4>しーえぬしー【CNC】</h4><p>CNCフライスのこと．設計した形状データを切削によって切り出すことができる工作機械．</p><div id="しーえる【CL】"></div><h4>しーえる【CL】</h4><p><a href="#%E3%81%AF%E3%83%BC%E3%81%B5%E3%81%95%E3%81%84%E3%81%9A%E3%81%8D%E3%82%87%E3%81%86%E3%81%8E%E3%80%90%E3%83%8F%E3%83%BC%E3%83%95%E3%82%B5%E3%82%A4%E3%82%BA%E7%AB%B6%E6%8A%80%E3%80%91">ハーフサイズ</a>のマイクロマウスで<a href="#%E3%81%8F%E3%82%89%E3%81%97%E3%81%A3%E3%81%8F%E3%81%BE%E3%81%86%E3%81%99%E3%81%8D%E3%82%87%E3%81%86%E3%81%8E%E3%80%90%E3%82%AF%E3%83%A9%E3%82%B7%E3%83%83%E3%82%AF%E3%83%9E%E3%82%A6%E3%82%B9%E7%AB%B6%E6%8A%80%E3%80%91">クラシック競技</a>に出場すること．語源は，<a href="#%E3%81%86%E3%81%A1%E3%82%85%E3%81%86%E3%81%98%E3%82%93%E3%80%90%E5%AE%87%E5%AE%99%E4%BA%BA%E3%80%91">宇宙人</a>小島さんによるハーフサイズのクラシック競技機体『こじまうす7CL』．</p><div id="しぶ【支部】"></div><h4>しぶ【支部】</h4><p>地方ごとに設けられた，有志による<a href="#%E3%81%BE%E3%81%86%E3%81%95%E3%83%BC%E3%80%90%E3%83%9E%E3%82%A6%E3%82%B5%E3%83%BC%E3%80%91">マイクロマウス競技者</a>の集まり．支部ごとに定例会や<a href="#%E3%81%A1%E3%81%8F%E3%81%9F%E3%81%84%E3%81%8B%E3%81%84%E3%80%90%E5%9C%B0%E5%8C%BA%E5%A4%A7%E4%BC%9A%E3%80%91">大会</a>を開催している．</p><div id="しゅつだいしゃ【出題者】"></div><h4>しゅつだいしゃ【出題者】</h4><p>課題迷路を作る人．特定の模様を迷路の中に埋め込んで出題者が誰か暗に分かるようにしている人もいるらしい．</p><div id="じゃいろせんさ【ジャイロセンサ】"></div><h4>じゃいろせんさ【ジャイロセンサ】</h4><p>角速度を計測できるセンサ．1軸まわりのみのシンプルなものから，3軸まわりの角速度をすべて取り出せるセンサまである．特に<a href="#%E3%81%A7%E3%81%83%E3%83%BC%E3%81%97%E3%83%BC%E3%81%BE%E3%81%86%E3%81%99%E3%80%90DC%E3%83%9E%E3%82%A6%E3%82%B9%E3%80%91">DCマウス</a>では，鉛直軸(z軸)まわりの回転をジャイロセンサを用いて計算することが多く，製作に欠かせない電子部品となっている．</p><p>MEMS技術によって製造されているセンサのチップの中には，微小なバネやおもりが内蔵されており，その運動によるピエゾ抵抗や静電容量などの電気的特性の変化を計測することで，角速度や加速度を測定している．</p><div id="しりあて【尻当て】"></div><h4>しりあて【尻当て】</h4><p>後進して機体の後ろを壁に当てることで，位置と角度を物理的に<a href="#%E3%81%BB%E3%81%9B%E3%81%84%E3%80%90%E8%A3%9C%E6%AD%A3%E3%80%91">補正</a>する方法．見た目があまり良くなく，かつ余計な時間がかかってしまうが，<a href="#%E3%81%8B%E3%82%93%E3%81%9D%E3%81%86%E3%80%90%E5%AE%8C%E8%B5%B0%E3%80%91">完走</a>率は確実に上がるため初心者におすすめの方法．</p><div id="じりつしょう【自律賞】"></div><h4>じりつしょう【自律賞】</h4><p>「１回目がスタートしてから持ち時間内に全走行が完了(最後にスタート地点まで戻る)するまで、ノータッチで走り切ったマウスのうちで、最短走行時間を記録したマウス」に贈られる賞．</p><p>マイクロマウスの競技理念である自律性を評価する賞だが，近年該当者がいない．<a href="#%E3%81%95%E3%81%84%E3%81%9F%E3%82%93%E3%81%9D%E3%81%86%E3%81%93%E3%81%86%E3%80%90%E6%9C%80%E7%9F%AD%E8%B5%B0%E8%A1%8C%E3%80%91">最短走行</a>の速さを上げる戦いは，<a href="#%E3%81%8D%E3%82%85%E3%81%86%E3%81%84%E3%82%93%E3%80%90%E5%90%B8%E5%BC%95%E3%80%91">吸引マウス</a>の台頭によって厳しさを増してきているため，しっかりと走って自律賞を狙うのも一つの戦略である．</p><div id="じんくす【ジンクス】"></div><h4>じんくす【ジンクス】</h4><p>いくら技術者だらけであるとはいえ，マイクロマウスの世界にもジンクスは存在する．一例として，「マウスをほめるとコケる」「うまく走らないときは<a href="#%E3%81%B1%E3%82%89%E3%82%81%E3%83%BC%E3%81%9F%E3%80%90%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%80%91">パラメータ</a>を上げろ」「<a href="#%E3%81%BE%E3%81%A3%E3%81%8F%E3%81%99%E3%80%90%E3%83%9E%E3%83%83%E3%82%AF%E3%82%B9%E3%80%91">MAX</a>パラメータは走る」などが挙げられる．</p><div id="しんさいん【審査員】"></div><h4>しんさいん【審査員】</h4><p><a href="#%E3%81%88%E3%82%80%E3%81%97%E3%83%BC%E3%80%90MC%E3%80%91"><s>競技者を煽る</s></a> 機体の走行を審査する人．大会運営に長く関わられている先生方や，ベテラン競技者の方が担当する．</p><p>審査員の隣では，計測係・記録係が競技の進行をサポートする．これらの係の多くは，参加者によるボランティアによって成り立っている．</p><div id="すかーと【スカート】"></div><h4>すかーと【スカート】</h4><p><a href="#%E3%81%8D%E3%82%85%E3%81%86%E3%81%84%E3%82%93%E3%80%90%E5%90%B8%E5%BC%95%E3%80%91">吸引マウス</a>の床面との密着性を保つための機構．機体の裏側にフィルム状のシートをスカートのように貼って作られることから，この名前がついた．加減速に伴う振動によって機体が床面からはがれないようにするための有効な方法であるとされている．</p><div id="すてっぴんぐもーた【ステッピングモータ】"></div><h4>すてっぴんぐもーた【ステッピングモータ】</h4><p>パルスを入力すると一定角度回るモータ(これはあまりにも雑な説明なので他の解説サイトを参照されたい)．マイクロマウスではステッピングモーターに直接車輪を取り付けるダイレクトドライブを採用することが多い．DCモータよりもサイズが大きいことや，制御初心者でも簡単に扱えることから，クラシックマウスで使用されることが多い．</p><div id="すべりかく【すべり角】"></div><h4>すべりかく【すべり角】</h4><p>機体の進行方向とタイヤの進行方向のなす角度．自動車用語の「スリップアングル」「横滑り角」と同一の概念．</p><p>機体を回転させながら進む際にはこれが必ず生じ，直進していない限りすべり角は0にならない．車輪の回転のみから自己位置や進行速度を推定しようとすると失敗することはこれに起因している．</p><div id="すらろーむ【スラローム】"></div><h4>すらろーむ【スラローム】</h4><p>停止することなくカーブと直進を連続的に走行すること．ポールを避けて走行するスキー競技の動きに似ていることから名前がついたとされる．</p><p><a href="#%E3%81%A1%E3%82%87%E3%81%86%E3%81%97%E3%82%93%E3%81%A1%E3%81%9B%E3%82%93%E3%81%8B%E3%81%84%E3%80%90%E8%B6%85%E4%BF%A1%E5%9C%B0%E6%97%8B%E5%9B%9E%E3%80%91">超信地旋回</a>を使用した走行と比較して，スラローム探索(通称:スラ探)は走行時間を大幅に短縮できるため，マイクロマウス初心者脱出にあたって重要なテクニックである．</p><div id="せっとく【説得】"></div><h4>せっとく【説得】</h4><p><a href="#%E3%81%91%E3%81%84%E3%81%B3%E3%81%AA%E3%81%97%E3%82%85%E3%81%86%E3%82%8A%E3%80%90%E8%BB%BD%E5%BE%AE%E3%81%AA%E4%BF%AE%E7%90%86%E3%80%91">軽微な修理</a>として，センサに使用しているLEDやフォトダイオードの足を無理やり曲げること．</p><div id="ぜんにほんたいかい【全日本大会】"></div><h4>ぜんにほんたいかい【全日本大会】</h4><p>憧れの舞台になってしまったもの．従来は登録者が全員競技に参加できたが，2018年からは地区大会での実績をもとに参加の可否が決定されることになった．</p><p>全日本大会は毎年11月下旬〜12月初旬ごろに東京近郊(?)で開催され，全国各地や海外から参加者が集まる．競技に参加しない場合でも，観戦や技術交流のために足を運ぶことをおすすめする．</p><hr><h2>た行</h2><div id="だいかいだん【大階段】"></div><h4>だいかいだん【大階段】</h4><p>非常に長い<a href="#%E3%81%AA%E3%81%AA%E3%82%81%E3%81%9D%E3%81%86%E3%81%93%E3%81%86%E3%80%90%E6%96%9C%E3%82%81%E8%B5%B0%E8%A1%8C%E3%80%91">斜め走行</a>が可能なルート．<a href="#%E3%81%AF%E3%83%BC%E3%81%B5%E3%81%95%E3%81%84%E3%81%9A%E3%81%8D%E3%82%87%E3%81%86%E3%81%8E%E3%80%90%E3%83%8F%E3%83%BC%E3%83%95%E3%82%B5%E3%82%A4%E3%82%BA%E7%AB%B6%E6%8A%80%E3%80%91">ハーフサイズ</a>競技決勝の32x32サイズの迷路によく出現するパターンである．</p><div id="だいけいかそく【台形加速】"></div><h4>だいけいかそく【台形加速】</h4><p>等加速→等速→等減速で位置決めを行う軌道，またはその軌道を使用した制御手法のこと．</p><img src="/2018/03/22/それほど間違っていないマイクロマウス用語辞典/trapezoid.svg" title="台形加速"><p>上図のように加減速中の加速度は一定であり，加速度ではなく速度が台形状になる．ではなぜ台形加速と呼ぶのかという理由については諸説あるが，もともと<a href="#%E3%81%99%E3%81%A6%E3%81%A3%E3%81%B4%E3%82%93%E3%81%90%E3%82%82%E3%83%BC%E3%81%9F%E3%80%90%E3%82%B9%E3%83%86%E3%83%83%E3%83%94%E3%83%B3%E3%82%B0%E3%83%A2%E3%83%BC%E3%82%BF%E3%80%91">ステッピングモータ</a>の<a href="#%E3%81%A0%E3%81%A3%E3%81%A1%E3%82%87%E3%81%86%E3%80%90%E8%84%B1%E8%AA%BF%E3%80%91">脱調</a>を防止する方法として「台形駆動」という名前で紹介されていたものが，ロボコン界隈の中で変化したと考えられる．「台形加減速」という用語がモータ制御業界で使用されていたという説もある．</p><p>加減速時に急激なトルク変化を要するため，進行方向へのスリップを引き起こすことがある．それを防止する亜種として，加速度を連続的に変化させた「S字加速」というものが存在する．</p><div id="たうえ【田植え】"></div><h4>たうえ【田植え】</h4><p><a href="#%E3%81%AF%E3%81%97%E3%82%89%E3%80%90%E6%9F%B1%E3%80%91">柱</a>を床板に埋めること．32x32の迷路になると実に33x33=1089本もの柱が必要になるため，それこそ実際の田植えのようにかがみながら1本1本植えているらしい．誰か田植え機を作ってあげて．</p><p>対義語は<a href="#%E3%81%84%E3%81%AD%E3%81%8B%E3%82%8A%E3%80%90%E7%A8%B2%E5%88%88%E3%82%8A%E3%80%91">稲刈り</a>．</p><div id="たしろしょう【田代賞】"></div><h4>たしろしょう【田代賞】</h4><p>NTFのウェブページ <a href="http://www.ntf.or.jp/mouse/micromouse2017/tashiro.html" target="_blank" rel="noopener">田代賞について</a> を参照．</p><div id="たしろはい【田代杯】"></div><h4>たしろはい【田代杯】</h4><p>→ <a href="#%E3%81%BE%E3%81%86%E3%81%99%E3%81%B1%E3%83%BC%E3%81%A6%E3%81%83%E3%83%BC%E3%80%90%E3%83%9E%E3%82%A6%E3%82%B9%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%83%BC%E3%80%91">まうすぱーてぃー【マウスパーティー】</a></p><div id="だっちょう【脱調】"></div><h4>だっちょう【脱調】</h4><p>過負荷や急激な速度変化指令に伴って<a href="#%E3%82%B9%E3%83%86%E3%83%83%E3%83%94%E3%83%B3%E3%82%B0%E3%83%A2%E3%83%BC%E3%82%BF">ステッピングモータ</a>の同期が失われること．駆動力が抜けるような挙動をする．</p><div id="たーん【ターン】"></div><h4>たーん【ターン】</h4><p>転回．マイクロマウスの文脈では，直進と直進の間をつなぐ旋回動作やその軌道・軌跡のことを指す．多くのマイクロマウスは45度，90度，135度，180度のターンが行えるように設計・プログラミングされている．</p><div id="だんさ【段差】"></div><h4>だんさ【段差】</h4><p>迷路を展開する床板のつなぎ目に生じる厄介者．板の反りが原因．競技規定(<a href="http://www.ntf.or.jp/mouse/kitei_classic.html" target="_blank" rel="noopener">注意-7</a>)にも約1mm程度の段差が生じることが明記されている．</p><p><a href="#%E3%81%84%E3%81%9F%E3%81%BE%E3%81%86%E3%81%99%E3%80%90%E6%9D%BF%E3%83%9E%E3%82%A6%E3%82%B9%E3%80%91">板マウス</a>の裏面に<a href="#%E3%81%B2%E3%82%87%E3%81%86%E3%82%81%E3%82%93%E3%81%98%E3%81%A3%E3%81%9D%E3%81%86%E3%80%90%E8%A1%A8%E9%9D%A2%E5%AE%9F%E8%A3%85%E3%80%91">表面実装部品</a>を実装すると，高速走行時に段差に引っかかってランドごと剥がされてしまうことがあるらしい．</p><div id="たんさく【探索】"></div><h4>たんさく【探索】</h4><p>迷路のスタートから<a href="#%E3%81%94%E3%83%BC%E3%82%8B%E3%80%90%E3%82%B4%E3%83%BC%E3%83%AB%E3%80%91">ゴール</a>までの道のりを探すこと．マイクロマウスにおいて最も重要な要素．</p><p>多くの競技者はまず第1走で迷路の形状を記憶する探索走行を行い，導出した最速の経路を使って第2走以降の<a href="#%E3%81%95%E3%81%84%E3%81%9F%E3%82%93%E3%81%9D%E3%81%86%E3%81%93%E3%81%86%E3%80%90%E6%9C%80%E7%9F%AD%E8%B5%B0%E8%A1%8C%E3%80%91">最短走行</a>でタイムアタックを行う．</p><div id="ちくたいかい【地区大会】"></div><h4>ちくたいかい【地区大会】</h4><p>全日本大会の前に全国各地で開催される大会．地区によっては，梨，米5kgなどの豪華景品が贈呈される場合もある．</p><p>2018年からは<a href="#%E3%81%9C%E3%82%93%E3%81%AB%E3%81%BB%E3%82%93%E3%81%9F%E3%81%84%E3%81%8B%E3%81%84%E3%80%90%E5%85%A8%E6%97%A5%E6%9C%AC%E5%A4%A7%E4%BC%9A%E3%80%91">全日本大会</a>の予選という位置づけになった．</p><div id="ちょうしんちせんかい【超信地旋回】"></div><h4>ちょうしんちせんかい【超信地旋回】</h4><p>左右輪を互いに逆方向に回転させることで，その場で旋回を行うこと．もともとは戦車やショベルのような履帯をもつ重機に関する用語．</p><p><a href="#%E3%81%99%E3%82%89%E3%82%8D%E3%83%BC%E3%82%80%E3%80%90%E3%82%B9%E3%83%A9%E3%83%AD%E3%83%BC%E3%83%A0%E3%80%91">スラローム走行</a>の実装は初心者には難しいため，まずは超信地旋回を実装して1マスごとに停止しながら<a href="#%E3%81%9F%E3%82%93%E3%81%95%E3%81%8F%E3%80%90%E6%8E%A2%E7%B4%A2%E3%80%91">探索</a>を行うことがおすすめである．</p><div id="ちょうせい【調整】"></div><h4>ちょうせい【調整】</h4><p>プログラミングから最終段階の合わせこみまでを包含する非常に広い意味をもつ言葉．「調整が間に合わなかった」など，ネガティブな文脈で使用することが多い．</p><div id="でぃーしーまうす【DCマウス】"></div><h4>でぃーしーまうす【DCマウス】</h4><p><a href="#%E3%81%A7%E3%81%83%E3%83%BC%E3%81%97%E3%83%BC%E3%82%82%E3%83%BC%E3%81%9F%E3%80%90DC%E3%83%A2%E3%83%BC%E3%82%BF%E3%80%91">DCモータ</a>を使用したマイクロマウスのこと．</p><div id="でぃーしーもーた【DCモータ】"></div><h4>でぃーしーもーた【DCモータ】</h4><p>直流電源で動作するモータ．いわゆるモータと言ってイメージするものはだいたいこれ．マイクロマウスに限らずロボコン関係の文脈における「DCモータ」は，ブラシ付きDCモータのことを指すことが多い．</p><div id="とくべつしょう【特別賞】"></div><h4>とくべつしょう【特別賞】</h4><p>特別な賞．大会の運営や盛り上げに貢献した個人・団体に贈られることもある．</p><hr><h2>な行</h2><div id="ななめそうこう【斜め走行】"></div><h4>ななめそうこう【斜め走行】</h4><p>壁や柱の隙間を縫って区画を斜めに走行すること．1区画ずつ90度<a href="#%E3%81%9F%E3%83%BC%E3%82%93%E3%80%90%E3%82%BF%E3%83%BC%E3%83%B3%E3%80%91">ターン</a>を繰り返して走行するよりも，走行時間が圧倒的に短くなる．最も一般的な斜め走行は区画に対して45度の角度．</p><div id="ななめつっきり【斜め突っ切り】"></div><h4>ななめつっきり【斜め突っ切り】</h4><p><a href="#%E3%81%AA%E3%81%AA%E3%82%81%E3%81%9D%E3%81%86%E3%81%93%E3%81%86%E3%80%90%E6%96%9C%E3%82%81%E8%B5%B0%E8%A1%8C%E3%80%91">斜め走行</a>のまま<a href="#%E3%81%94%E3%83%BC%E3%82%8B%E3%80%90%E3%82%B4%E3%83%BC%E3%83%AB%E3%80%91">ゴール</a>すること．</p><p><a href="#%E3%81%9F%E3%83%BC%E3%82%93%E3%80%90%E3%82%BF%E3%83%BC%E3%83%B3%E3%80%91">ターン</a>の前には減速が必要であるため，ゴール付近でターンが発生する場合はタイムがわずかに長くなる．また，多くのパターンにおいて斜めに進入することでゴール区画内での直進距離を長くできるため，その分減速のタイミングを遅らせることができ，わずかにタイムを縮めることができる．斜め突っ切りは，1ミリ秒単位を争う<a href="#%E3%81%86%E3%81%A1%E3%82%85%E3%81%86%E3%81%98%E3%82%93%E3%80%90%E5%AE%87%E5%AE%99%E4%BA%BA%E3%80%91">宇宙人</a>の世界では重要なテクニックであるようだ．</p><div id="なると【ナルト】"></div><h4>なると【ナルト】</h4><p>→ <a href="#%E3%82%89%E3%83%BC%E3%82%81%E3%82%93%E3%80%90%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%B3%E3%80%91">らーめん【ラーメン】</a></p><div id="にりん【2輪】"></div><h4>にじそうこう【二次走行】</h4><p>→ <a href="#%E3%81%95%E3%81%84%E3%81%9F%E3%82%93%E3%81%9D%E3%81%86%E3%81%93%E3%81%86%E3%80%90%E6%9C%80%E7%9F%AD%E8%B5%B0%E8%A1%8C%E3%80%91">さいたんそうこう【最短走行】</a></p><div id="にりん【2輪】"></div><h4>にりん【2輪】</h4><img src="/2018/03/22/それほど間違っていないマイクロマウス用語辞典/kabutogani_aniki.jpg" title="2輪マウス"><p>マイクロマウス用語としての「2輪」はバイクのような構成の2輪車両ではなく，2つの車輪が同軸上に取り付けられた車両のことを指す．</p><p><a href="#%E3%82%88%E3%82%93%E3%82%8A%E3%82%93%E3%80%904%E8%BC%AA%E3%80%91">4輪</a>以上のマウスとは異なり，シャーシのどこか少なくとも1点が床面と接する必要があるため，<a href="#%E3%81%A0%E3%82%93%E3%81%95%E3%80%90%E6%AE%B5%E5%B7%AE%E3%80%91">段差</a>の踏破性能に乏しい．この形状のロボットは，構造が単純であるにもかかわらず任意位置・姿勢への安定化が一筋縄には行かないことから，ロボット工学の典型的な例題(two-wheeled mobile robot)としてよく知られている．</p><p>参考: <a href="/2016/01/04/マイクロマウスと制御理論-2-自由度と非ホロノミック拘束/" title="マイクロマウスと制御理論 (2)自由度と非ホロノミック拘束">マイクロマウスと制御理論 (2)自由度と非ホロノミック拘束</a></p><hr><h2>は行</h2><div id="ばぐ【バグ】"></div><h4>ばぐ【バグ】</h4><p><s>虫．ねずみの好物．</s></p><p>プログラムの不具合．</p><div id="はしら【柱】"></div><h4>はしら【柱】</h4><p>壁を固定するために床板に埋め込まれるもの．<a href="#%E3%81%8D%E3%82%85%E3%81%86%E3%81%84%E3%82%93%E3%80%90%E5%90%B8%E5%BC%95%E3%80%91">吸引マウス</a>のサンドバッグ．</p><div id="はっさん【発散】"></div><h4>はっさん【発散】</h4><p>意図した挙動から外れて暴走すること．制御工学や信号処理の分野で使用する「発散」とほぼ同じ概念だが，ベクトル解析のそれ(divergence)とは異なる．</p><div id="ばってり【バッテリ】"></div><h4>ばってり【バッテリ】</h4><p>電池．小型・軽量・高エネルギー密度であることから，マイクロマウスでは<a href="#%E3%82%8A%E3%81%BD%E3%80%90LiPo%E3%80%91">リチウムイオンポリマー(LiPo)電池</a>が使用されることが多い．取り扱いを誤ると火事のもとになるので十分な注意が必要である．</p><div id="はーふさいずきょうぎ【ハーフサイズ競技】"></div><h4>はーふさいずきょうぎ【ハーフサイズ競技】</h4><p>→<a href="#%E3%81%BE%E3%81%84%E3%81%8F%E3%82%8D%E3%81%BE%E3%81%86%E3%81%99%E3%81%8D%E3%82%87%E3%81%86%E3%81%8E%E3%80%90%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%83%9E%E3%82%A6%E3%82%B9%E7%AB%B6%E6%8A%80%E3%80%91">まいくろまうすきょうぎ【マイクロマウス競技】</a></p><div id="ぱらめーた【パラメータ】"></div><h4>ぱらめーた【パラメータ】</h4><p>マイクロマウスの文脈では，最大速度・加速度・減速度等の設定値のことを指す．</p><div id="ぴにおんぎあ【ピニオンギア】"></div><h4>ぴにおんぎあ【ピニオンギア】</h4><p>噛み合う2枚のギアのうち小さい方のギア．モータに直接取り付けられる初段のギアのことを指すことが多い．</p><p><a href="#%E3%81%A7%E3%81%83%E3%83%BC%E3%81%97%E3%83%BC%E3%81%BE%E3%81%86%E3%81%99%E3%80%90DC%E3%83%9E%E3%82%A6%E3%82%B9%E3%80%91">DCマウス</a>では減速比を低く(約1:4)設計することが多いため，ピニオンギアにかかるトルクが大きい．そのため，モータの軸との摩擦が適切でない状態で走行を行うと，ギアと軸が滑ってしまったりギアが外れてしまったりする場合がある．</p><div id="ひょうめんじっそう【表面実装】"></div><h4>ひょうめんじっそう【表面実装】</h4><p>基板を貫通させず表面に実装する電子部品．英語では略称として「SMD」，「SMT」などがよく用いられる．対義語は「リード部品」．</p><div id="ふぇいるせーふ【フェイルセーフ】"></div><h4>ふぇいるせーふ【フェイルセーフ】</h4><p>異常時に安全に停止する機能．安全第一．</p><div id="ぶつりりょうべーす【物理量ベース】"></div><h4>ぶつりりょうべーす【物理量ベース】</h4><p>物理的な次元をもつ量で内部の演算を行うこと．15年ほど前までは安価な小型<a href="#%E3%81%BE%E3%81%84%E3%81%93%E3%82%93%E3%80%90%E3%83%9E%E3%82%A4%E3%82%B3%E3%83%B3%E3%80%91">マイコン</a>が現在ほど高性能ではなく，また浮動小数点演算が気軽にできなかったことから，通常は計測した値や制御入力は無次元量として(パルス数やADC値のような生データを)取り扱うほかなかった．そうした背景から，物理量をマイコン内の演算に使った制御という意味で，この言葉がガラパゴス的に生まれたらしい．</p><blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">マイクロマウスに乗るようなプロセッサでまともに実数演算できるようになったのはつい最近のことで、整数ベースだった制御演算やパラメータをSI単位系にできるだけでも当時は革新的だったのですじゃ...</p>&mdash; kato (@robolaboN) <a href="https://twitter.com/robolaboN/status/797388941804474369" target="_blank" rel="noopener">2016年11月12日</a></blockquote><script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script><div id="ふらっしゅ【フラッシュ】"></div><h4>ふらっしゅ【フラッシュ】</h4><p>カメラのフラッシュライト．<a href="#%E3%81%9C%E3%82%93%E3%81%AB%E3%81%BB%E3%82%93%E3%81%9F%E3%81%84%E3%81%8B%E3%81%84%E3%80%90%E5%85%A8%E6%97%A5%E6%9C%AC%E5%A4%A7%E4%BC%9A%E3%80%91">全日本大会</a>の<a href="#%E3%81%88%E3%81%8D%E3%81%99%E3%81%B1%E3%83%BC%E3%81%A8%E3%81%8F%E3%82%89%E3%81%99%E3%80%90%E3%82%A8%E3%82%AD%E3%82%B9%E3%83%91%E3%83%BC%E3%83%88%E3%82%AF%E3%83%A9%E3%82%B9%E3%80%91">エキスパートクラス</a>ではフラッシュを使用した撮影が許可されている．</p><div id="ふれっしゅまんくらす【フレッシュマンクラス】"></div><h4>ふれっしゅまんくらす【フレッシュマンクラス】</h4><p>2017年まで存在した初心者向けの競技クラス．全日本大会で<a href="#%E3%81%8B%E3%82%93%E3%81%9D%E3%81%86%E3%80%90%E5%AE%8C%E8%B5%B0%E3%80%91">完走</a>した競技者は出場できない．</p><div id="へんそくよんりん【変則4輪】"></div><h4>へんそくよんりん【変則4輪】</h4><p>4輪のスキッドステア車両(SSV)の意味で使われる．スキッドステアとは，ステアリング機構をもたずに左右輪の差動で旋回する構造のことである．ところでこの用語は素直に「4輪」ではいけなかったのだろうか．</p><div id="ほすうまっぷ【歩数マップ】"></div><h4>ほすうまっぷ【歩数マップ】</h4><p><a href="#%E3%81%94%E3%83%BC%E3%82%8B%E3%80%90%E3%82%B4%E3%83%BC%E3%83%AB%E3%80%91">ゴール</a>からの歩数(必要な移動回数)を記録する配列．歩数が1歩ずつ小さくなる方向に進んでいくとゴールに最短歩数でたどり着けるという性質がある．</p><div id="ほせい【補正】"></div><h4>ほせい【補正】</h4><p>マイクロマウスでは，壁や柱等の外界の情報を利用して機体の位置・姿勢等の推定値を修正することを指す．代表的なものに，<a href="#%E3%81%8B%E3%81%B9%E3%81%8E%E3%82%8C%E3%80%90%E5%A3%81%E5%88%87%E3%82%8C%E3%80%91">壁切れ補正</a>や<a href="#%E3%81%BE%E3%81%88%E3%81%8B%E3%81%B9%E3%81%BB%E3%81%9B%E3%81%84%E3%80%90%E5%89%8D%E5%A3%81%E8%A3%9C%E6%AD%A3%E3%80%91">前壁補正</a>などがある．</p><hr><h2>ま行</h2><div id="まいくろまうすきょうぎ【マイクロマウス競技】"></div><h4>まいくろまうすきょうぎ【マイクロマウス競技】</h4><p>従来の「ハーフサイズ競技」が2018年に改称されてできた競技．</p><p><a href="#%E3%81%8F%E3%82%89%E3%81%97%E3%81%A3%E3%81%8F%E3%81%BE%E3%81%86%E3%81%99%E3%81%8D%E3%82%87%E3%81%86%E3%81%8E%E3%80%90%E3%82%AF%E3%83%A9%E3%82%B7%E3%83%83%E3%82%AF%E3%83%9E%E3%82%A6%E3%82%B9%E7%AB%B6%E6%8A%80%E3%80%91">クラシックマウス</a>の半分の長さ，すなわち1辺90mmの区画を使用する競技．それにしても，既存の名前に別の既存の概念を割り当て直すのは混乱を生むのではないかと筆者は思う．</p><div id="まいこん【マイコン】"></div><h4>まいこん【マイコン】</h4><p>マウスの脳みそ．マイクロコンピュータもしくはマイクロコントローラの略．英語ではMCUと略すことが多い(最後のUはunit)．</p><p>マイクロマウスの進歩はマイコンの進歩に大きく依存している．</p><div id="まいちゃん【マイちゃん】"></div><h4>まいちゃん【マイちゃん】</h4><p>マイクロマウス公式キャラクター(<a href="http://www.ntf.or.jp/mouse/micromouse2017/mai.html" target="_blank" rel="noopener">参照</a>)．かわいい．大会パンフレットの大会の流れを説明する漫画にも登場する．</p><div id="まうさー【マウサー】"></div><h4>まうさー【マウサー】</h4><p>マイクロマウス競技者のこと．ちなみに同じような読みのMouser(マウザー)という電子部品通販サイトがあってたまにややこしい．和製語なので海外の方には通じない．</p><div id="まうすがっしゅく【マウス合宿】"></div><h4>まうすがっしゅく【マウス合宿】</h4><p>有志が開催する合宿形式の交流会．大学のサークルが持ち回りで企画している．</p><div id="まうすじっそく【マウス十則】"></div><h4>まうすじっそく【マウス十則】</h4><p><a href="#%E3%81%86%E3%81%A1%E3%82%85%E3%81%86%E3%81%98%E3%82%93%E3%80%90%E5%AE%87%E5%AE%99%E4%BA%BA%E3%80%91">宇宙人</a>の1人である加藤さんによる訓示．マイクロマウス競技において上位を志す者に求められる心構えが示されている．</p><p>参考: <a href="http://mmk.rulez.jp/?page_id=5" target="_blank" rel="noopener">マイクロマウス委員会　関西支部へようこそ | マイクロマウス委員会　関西支部</a></p><div id="まうすぱーてぃ【マウスパーティ】"></div><h4>まうすぱーてぃ【マウスパーティ】</h4><p>全日本大会の期間中に開催される公式の懇親会兼技術交流会．立食パーティー形式でわいわいできる．2016年から田代杯と称して，大会に出せない前衛芸術的な迷路にチャレンジする企画がはじまった．</p><p>アルコールが入った状態で機体をいじると思わぬ事故のもとになるので，ほどほどにしよう．</p><div id="まえかべほせい【前壁補正】"></div><h4>まえかべほせい【前壁補正】</h4><p>前方の壁との距離を計測することで現在位置を<a href="#%E3%81%BB%E3%81%9B%E3%81%84%E3%80%90%E8%A3%9C%E6%AD%A3%E3%80%91">補正</a>する方法．前方を見る<a href="#%E3%81%8B%E3%81%B9%E3%81%9B%E3%82%93%E3%81%95%E3%80%90%E5%A3%81%E3%82%BB%E3%83%B3%E3%82%B5%E3%80%91">壁センサ</a>の取り付け方によっては，角度も補正できる．</p><div id="まえきょり【前距離】"></div><h4>まえきょり【前距離】</h4><p><a href="#%E3%81%9F%E3%83%BC%E3%82%93%E3%80%90%E3%82%BF%E3%83%BC%E3%83%B3%E3%80%91">ターン</a>や<a href="#%E3%81%8B%E3%81%B9%E3%81%8E%E3%82%8C%E3%80%90%E5%A3%81%E5%88%87%E3%82%8C%E3%80%91">壁切れ</a>の前に低速で直進させる距離．すごくテクニカルな内容になりそうなのでここには詳細は書かないことにする．</p><div id="まっくす【マックス】"></div><h4>まっくす【マックス】</h4><p>最高の<a href="#%E3%81%B1%E3%82%89%E3%82%81%E3%83%BC%E3%81%9F%E3%80%90%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%80%91">パラメータ</a>のこと．<a href="#%E3%81%88%E3%82%80%E3%81%97%E3%83%BC%E3%80%90MC%E3%80%91">MC</a>や<a href="#%E3%81%97%E3%82%93%E3%81%95%E3%81%84%E3%82%93%E3%80%90%E5%AF%A9%E6%9F%BB%E5%93%A1%E3%80%91">審査員</a>に煽られて出すもの．</p><div id="みつりん【密林】"></div><h4>みつりん【密林】</h4><p>木々が立ち並んでいるような迷路パターン．「畑」とも呼ばれることがある．特に下の図のようなものを指す．</p><img src="/2018/03/22/それほど間違っていないマイクロマウス用語辞典/amazon.png" title="通称「密林」"><div id="めいろ【迷路】"></div><h4>めいろ【迷路】</h4><p>マイクロマウスが走るフィールド．いわゆる迷路と異なる点は，ゴールが迷路内に存在することである．</p><div id="もーたどらいば【モータドライバ】"></div><h4>もーたどらいば【モータドライバ】</h4><p>モータを駆動するために必要な回路要素．電子工作初心者は意外と知らないのだが，<a href="#%E3%81%BE%E3%81%84%E3%81%93%E3%82%93%E3%80%90%E3%83%9E%E3%82%A4%E3%82%B3%E3%83%B3%E3%80%91">マイコン</a>のIOピンで直接モータを駆動することはできないのだ．</p><div id="もりながしきはっこうかいろ【森永式発光回路】"></div><h4>もりながしきはっこうかいろ【森永式発光回路】</h4><p><a href="#%E3%81%8B%E3%81%B9%E3%81%9B%E3%82%93%E3%81%95%E3%80%90%E5%A3%81%E3%82%BB%E3%83%B3%E3%82%B5%E3%80%91">壁センサ</a>に使用するLEDの発光方法の1つ．単純にパルス点灯させるのではなく，コンデンサに溜めた電荷を瞬時に流すことによって発光量を稼ぐ手法．近年は指向性・パワーともに高いLEDが出回っているため，大抵の場合はパルス点灯で十分である．</p><hr><h2>や行</h2><div id="やくど【躍度】"></div><h4>やくど【躍度】</h4><p>加速度の時間変化量(時間微分)．加加速度とも．躍度が連続となる軌道を与えることで，タイヤに急激な力がかかりづらくなり，滑りの解消につながる．</p><div id="ゆーざいんたふぇーす【ユーザインタフェース】"></div><h4>ゆーざいんたふぇーす【ユーザインタフェース】</h4><p>競技者が機体に指令する方法．マイクロマウスの小さな機体に搭載できるスイッチやLED等の数は限られるため，<a href="#%E3%81%88%E3%82%93%E3%81%93%E3%83%BC%E3%81%A0%E3%80%90%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%80%E3%80%91">ロータリーエンコーダ</a>，<a href="#%E3%81%8B%E3%81%B9%E3%81%9B%E3%82%93%E3%81%95%E3%80%90%E5%A3%81%E3%82%BB%E3%83%B3%E3%82%B5%E3%80%91">壁センサ</a>，<a href="#%E3%81%98%E3%82%83%E3%81%84%E3%82%8D%E3%81%9B%E3%82%93%E3%81%95%E3%80%90%E3%82%B8%E3%83%A3%E3%82%A4%E3%83%AD%E3%82%BB%E3%83%B3%E3%82%B5%E3%80%91">ジャイロセンサ</a>などを使用してメニュー選択を行えるようにすることが多い．</p><p>2017年には音を使用して指令を行うマウスが登場し，会場を沸かせた．</p><div id="よんりん【4輪】"></div><h4>よんりん【4輪】</h4><p>→ <a href="#%E3%81%B8%E3%82%93%E3%81%9D%E3%81%8F%E3%82%88%E3%82%93%E3%82%8A%E3%82%93%E3%80%90%E5%A4%89%E5%89%874%E8%BC%AA%E3%80%91">へんそくよんりん【変則4輪】</a></p><hr><h2>ら行</h2><div id="らーめん【ラーメン】"></div><h4>らーめん【ラーメン】</h4><p><a href="#%E3%81%AF%E3%83%BC%E3%81%B5%E3%81%95%E3%81%84%E3%81%9A%E3%81%8D%E3%82%87%E3%81%86%E3%81%8E%E3%80%90%E3%83%8F%E3%83%BC%E3%83%95%E3%82%B5%E3%82%A4%E3%82%BA%E7%AB%B6%E6%8A%80%E3%80%91">ハーフサイズ競技</a>で頻繁に登場する渦巻き状の経路のこと．「それはラーメンじゃなくて<a href="#%E3%81%AA%E3%82%8B%E3%81%A8%E3%80%90%E3%83%8A%E3%83%AB%E3%83%88%E3%80%91">なると</a>でしょ！」と思わずつっこみたくなる．ラーメンどんぶりの模様のことを指しているのではという説もある．ラーメンを通ると経路が長くなるだけでなく，同じ方向に何度も回るため角度の偏差が現れやすいという技術的な難しさもある．</p><div id="りたいあ【リタイア】"></div><h4>りたいあ【リタイア】</h4><p><a href="#%E3%81%94%E3%83%BC%E3%82%8B%E3%80%90%E3%82%B4%E3%83%BC%E3%83%AB%E3%80%91">ゴール</a>にたどり着く前に走行を中断すること．退職することでも敗退することでもない．</p><div id="りぽ【LiPo】"></div><h4>りぽ【LiPo】</h4><p>リチウムイオンポリマー<a href="#%E3%81%B0%E3%81%A3%E3%81%A6%E3%82%8A%E3%80%90%E3%83%90%E3%83%83%E3%83%86%E3%83%AA%E3%80%91">電池</a>．リチウム・ポロニウムではない．エネルギー密度が高く，軽量・小型で大容量であることが良い特徴であるが，使用方法を誤ると火災に至る場合もあるため，十分な知識を持ち注意を払って使用するべきである．</p><p>参考: <a href="https://www.rt-shop.jp/blog/archives/2036" target="_blank" rel="noopener">リポ電池の充電にはご注意！ | RT Robot Shop Blog</a></p><div id="りょうもち【両持ち】"></div><h4>りょうもち【両持ち】</h4><p>マイクロマウス用語としてはベアリング2個で駆動軸を支持することを指す．</p><p>材料力学で出てくる両持ちではない．お願いだから学術用語に対する敬意をもっと払ってほしい．</p><div id="るいじせい【類似性】"></div><h4>るいじせい【類似性】</h4><p>似ていること．同一の団体からの参加者が同一と思われる機体とプログラムを使用して上位をさらっていく事案が発生したため，車検・タイム・経路等がほとんど一致している機体の決勝進出権は一台までしか認めないという制度が定められた．類似性の定義は曖昧であり，審査員の一存で決められることから，一時物議をかもした．</p><div id="ろぐ【ログ】"></div><h4>ろぐ【ログ】</h4><p>貴重なデータ．目視をあてにするよりも，ログを参照しながら<a href="#%E3%81%92%E3%81%84%E3%82%93%E3%80%90%E3%82%B2%E3%82%A4%E3%83%B3%E3%80%91">制御ゲイン</a>や<a href="#%E3%81%B1%E3%82%89%E3%82%81%E3%83%BC%E3%81%9F%E3%80%90%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%80%91">走行パラメータ</a>の調整を行う方が効率が良いため，面倒くさがらずに早めに実装するべき機能である．</p><div id="ろぼとれーすきょうぎ【ロボトレース競技】"></div><h4>ろぼとれーすきょうぎ【ロボトレース競技】</h4><p>マイクロマウス大会において，マイクロマウス競技とともに開催されるライントレースロボットの競技．黒の床面に白いテープで引かれたラインをたどるタイムを競う．</p><hr><h2>わ行</h2><div id="わだち【轍】"></div><h4>わだち【轍】</h4><p>ほかのロボットのタイヤが通った跡．</p><p>迷路の床面は競技開始前に清掃されるが，それでもタイヤのゴムは走行時に細かいホコリを少しずつ集めてグリップを失ってしまう．そのため，わだちができる後半の出走が有利であるとされている．</p>]]></content>
    
    <summary type="html">
    
      &lt;img src=&quot;/2018/03/22/それほど間違っていないマイクロマウス用語辞典/dictionary.png&quot; title=&quot;マイクロマウス用語，さすがに多すぎでは…&quot;&gt;
&lt;h2&gt;なにこれ&lt;/h2&gt;
&lt;p&gt;マイクロマウスをはじめたばかりの人にありがちなのが，大会に行ったものの用語がよくわからなくて，「何言ってんだこいつら」状態になるという問題です．
私が初めてマイクロマウスの大会に参加したのは2013年の学生大会なのですが，その際に審査員の方から「これは重ね探索ですか？」と聞かれて「何だそれは」となったのを昨日のことのように思い出します．
また，競技者は当日心の余裕がないので，MCの人にマイクを向けられても観客のことなんかそっちのけで自分が普段使ってる用語で話してしまいがちです．&lt;/p&gt;
&lt;p&gt;というわけで，私が「これはマイクロマウス固有の用語だろう」と独断と偏見により判断した語句を，軽く事典ライクにまとめてみました．
なるべく一般的な語句を使用して説明しようと試みています．
一部内輪ネタが入ってしまっているかもしれません．すみません．&lt;/p&gt;
&lt;p&gt;コメントくだされば2019年版に反映させるかもしれませんが保証はしません．&lt;/p&gt;
&lt;p&gt;ちなみにこの記事のネーミングはこちらの書籍をパクっています．&lt;/p&gt;

&lt;a href=&quot;https://www.amazon.co.jp/%E3%81%9D%E3%82%8C%E3%81%BB%E3%81%A9%E9%96%93%E9%81%95%E3%81%A3%E3%81%A6%E3%81%AA%E3%81%84%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E7%94%A8%E8%AA%9E%E8%BE%9E%E5%85%B8-MW/dp/483991964X/ref=as_li_ss_il?ie=UTF8&amp;qid=1507543677&amp;sr=8-1&amp;keywords=%E3%81%9D%E3%82%8C%E3%81%BB%E3%81%A9%E9%96%93%E9%81%95%E3%81%A3%E3%81%A6%E3%81%AA%E3%81%84&amp;linkCode=li3&amp;tag=gelidium-22&amp;linkId=1343230df36b00e2e5bbdb18ee08e365&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;ASIN=483991964X&amp;Format=_SL250_&amp;ID=AsinImage&amp;MarketPlace=JP&amp;ServiceVersion=20070822&amp;WS=1&amp;tag=gelidium-22&quot;&gt;&lt;/a&gt;&lt;img src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=gelidium-22&amp;l=li3&amp;o=9&amp;a=483991964X&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot;&gt;
    
    </summary>
    
      <category term="ロボット" scheme="http://blog.tokor.org/categories/%E3%83%AD%E3%83%9C%E3%83%83%E3%83%88/"/>
    
      <category term="マイクロマウス" scheme="http://blog.tokor.org/categories/%E3%83%AD%E3%83%9C%E3%83%83%E3%83%88/%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%83%9E%E3%82%A6%E3%82%B9/"/>
    
    
      <category term="用語辞典" scheme="http://blog.tokor.org/tags/%E7%94%A8%E8%AA%9E%E8%BE%9E%E5%85%B8/"/>
    
  </entry>
  
  <entry>
    <title>LaTeX Beamerで図表などの位置を絶対座標で指定する方法</title>
    <link href="http://blog.tokor.org/2018/01/19/LaTeX-Beamer%E3%81%A7%E5%9B%B3%E8%A1%A8%E3%81%AA%E3%81%A9%E3%81%AE%E4%BD%8D%E7%BD%AE%E3%82%92%E7%B5%B6%E5%AF%BE%E5%BA%A7%E6%A8%99%E3%81%A7%E6%8C%87%E5%AE%9A%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/"/>
    <id>http://blog.tokor.org/2018/01/19/LaTeX-Beamerで図表などの位置を絶対座標で指定する方法/</id>
    <published>2018-01-19T08:00:15.000Z</published>
    <updated>2019-05-12T07:24:29.952Z</updated>
    
    <content type="html"><![CDATA[<h2>概要</h2><p>LaTeX Beamerを使いはじめるにあたって，はじめにぶち当たる障壁はなんといっても図の配置だと思います．PowerPointやKeynoteといったWYSIWYG系のプレゼンテーション作成ツールに慣れている人がBeamerスライドを見ると，「ここの図をもうちょっと左に動かして」とか，「ここの部分赤丸で囲んだほうが良いんじゃない」みたいな指摘が飛ぶことがあるのですが，楽な方法がなかなか検索しても出てきません．</p><p>これまで私は<code>\vspace</code>や<code>\hspace</code>をふんだんに駆使して図を巧みに配置していたのですが，さすがにこれではコードが汚くなりすぎます．というわけでシンプルでかつ効果的な方法を見つけたので書きます．</p><img src="/2018/01/19/LaTeX-Beamerで図表などの位置を絶対座標で指定する方法/textpos.png" title="こんな感じのことができるようになります"><p>サンプルスライド:</p><iframe src="//www.slideshare.net/slideshow/embed_code/key/vYFtpvz3dIRrxe" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"><h2>方法</h2><p>textposパッケージを利用します．プリアンブルに以下を記述します．</p><figure class="highlight"><pre><span class="GruvboxRed">\usepackage</span><span class="GruvboxOrange">[</span><span class="GruvboxPurple">absolute,overlay</span><span class="GruvboxOrange">]</span><span class="GruvboxOrange">{</span><span class="GruvboxOrange">textpos</span><span class="GruvboxOrange">}</span></pre></figure><ul><li><code>absolute</code> : textposパッケージを絶対座標指定モードで使用する</li><li><code>overlay</code> : 文字の上から配置する</li></ul><p><code>textblock*</code>環境の幅と座標を指定して，中に表示させたい図表やテキストを差し込むだけでOKです．ここで，<code>figure</code>環境を使わないことがポイントです．<code>figure</code>環境を使用した場合，y座標がずれる可能性があります．</p><figure class="highlight"><pre><span class="Comment">% &#x3053;&#x306E;&#x5834;&#x5408;&#x306F; (230pt, 100pt) &#x306E;&#x4F4D;&#x7F6E;&#x306B; 0.4\linewidth &#x306E;&#x5E45;&#x306E;&#x30D6;&#x30ED;&#x30C3;&#x30AF;&#x304C;&#x3067;&#x304D;&#x308B;&#xFF0E;</span><span class="GruvboxRed">\begin</span><span class="GruvboxOrange">{</span><span class="GruvboxAqua">textblock*</span><span class="GruvboxOrange">}{</span>0.4<span class="GruvboxRed">\linewidth</span><span class="GruvboxOrange">}</span>(<span class="GruvboxPurple">230pt</span>, <span class="GruvboxPurple">100pt</span>)    <span class="GruvboxRed">\centering</span>    <span class="GruvboxRed">\includegraphics</span><span class="GruvboxOrange">[</span><span class="GruvboxPurple">width=\linewidth</span><span class="GruvboxOrange">]</span><span class="GruvboxOrange">{</span><span class="GruvboxOrange">./figure.pdf</span><span class="GruvboxOrange">}</span><span class="GruvboxRed">\end</span><span class="GruvboxOrange">{</span><span class="GruvboxAqua">textblock*</span><span class="GruvboxOrange">}</span></pre></figure><p>TiKZで描画した図形も同様にして配置できます．</p><figure class="highlight"><pre><span class="Comment">% &#x3053;&#x306E;&#x5834;&#x5408;&#x306F; (300pt, 180pt) &#x306E;&#x4F4D;&#x7F6E;&#x306B; 0.4\linewidth &#x306E;&#x5E45;&#x306E;&#x30D6;&#x30ED;&#x30C3;&#x30AF;&#x304C;&#x3067;&#x304D;&#x308B;&#xFF0E;</span><span class="GruvboxRed">\begin</span><span class="GruvboxOrange">{</span><span class="GruvboxAqua">textblock*</span><span class="GruvboxOrange">}{</span>0.4<span class="GruvboxRed">\linewidth</span><span class="GruvboxOrange">}</span>(<span class="GruvboxPurple">300pt</span>,<span class="GruvboxPurple">180pt</span>)    <span class="Comment">% TiKZ&#x3092;&#x4F7F;&#x3063;&#x305F;&#x56F3;&#x5F62;&#x306E;&#x63CF;&#x753B;</span>    <span class="GruvboxRed">\begin</span><span class="GruvboxOrange">{</span><span class="GruvboxAqua">tikzpicture</span><span class="GruvboxOrange">}</span>        <span class="Comment">% &#x5E45; 0.7cm, &#x9AD8;&#x3055; 0.5cm &#x306E;&#x6955;&#x5186;&#x3092;&#xFF0C;&#x7DDA;&#x5E45;2pt&#xFF0C;&#x8272;&#x306F;&#x8D64;&#x8272;&#x3067;&#x4F5C;&#x6210;</span>        <span class="GruvboxRed">\draw</span><span class="GruvboxOrange">[</span>tangored, line width=<span class="GruvboxPurple">2pt</span><span class="GruvboxOrange">]</span> ellipse (<span class="GruvboxPurple">0.7cm</span> and <span class="GruvboxPurple">0.5cm</span>);    <span class="GruvboxRed">\end</span><span class="GruvboxOrange">{</span><span class="GruvboxAqua">tikzpicture</span><span class="GruvboxOrange">}</span><span class="GruvboxRed">\end</span><span class="GruvboxOrange">{</span><span class="GruvboxAqua">textblock*</span><span class="GruvboxOrange">}</span></pre></figure><p>アスタリスクなしの<code>textblock</code>環境との違いは値を自由に指定できる点です．<code>textblock</code>環境の方は，変数で設定した値の定数倍の位置に配置するものになっているので，このような用途では<code>textblock*</code>環境の方が使いやすいと思います．</p><h3>さらに踏み込んだTips</h3><ul><li><p>eso-picパッケージを使ってスライドの上からグリッドを表示することで，座標の決定が楽になります．</p><figure class="highlight"><pre><span class="GruvboxRed">\usepackage</span><span class="GruvboxOrange">[</span><span class="GruvboxPurple">colorgrid,gridunit=pt,texcoord</span><span class="GruvboxOrange">]</span><span class="GruvboxOrange">{</span><span class="GruvboxOrange">eso-pic</span><span class="GruvboxOrange">}</span></pre></figure></li><li><p>layoutパッケージを使うとプレゼンのヘッダやフッタ等のサイズを簡単に調べることができます．配置がうまくいかないときのデバッグに便利です．</p><figure class="highlight"><pre><span class="GruvboxRed">\usepackage</span><span class="GruvboxOrange">{</span><span class="GruvboxOrange">layout</span><span class="GruvboxOrange">}</span><span class="Comment">%...</span><span class="GruvboxRed">\frame</span><span class="GruvboxOrange">{</span>    <span class="GruvboxRed">\layout</span><span class="GruvboxOrange">}</span></pre></figure></li></ul><h2>まとめ</h2><p>この記事では，textposパッケージを用いた図表の絶対座標配置の方法とTipsを解説しました．textposパッケージはもともと発表ポスターを作る際の図の配置を便利にしようというモチベーションで開発されたもののようですので，Beamerとの相性も抜群ではないでしょうか．お困りでしたらぜひお試しください．</p><p>関連記事: <a href="/2016/06/04/TeXでプレゼン-LaTeX-Beamerを使う人のためのTips集/" title="TeXでプレゼン - LaTeX Beamerを使う人のためのTips集">TeXでプレゼン - LaTeX Beamerを使う人のためのTips集</a></p><h2>参考</h2><ul><li><a href="https://www.ctan.org/pkg/textpos" target="_blank" rel="noopener">CTAN: Package textpos</a></li></ul></div>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h2&gt;概要&lt;/h2&gt;
&lt;p&gt;LaTeX Beamerを使いはじめるにあたって，はじめにぶち当たる障壁はなんといっても図の配置だと思います．
PowerPointやKeynoteといったWYSIWYG系のプレゼンテーション作成ツールに慣れている人がBeamerスライドを見ると，「
      
    
    </summary>
    
      <category term="LaTeX" scheme="http://blog.tokor.org/categories/LaTeX/"/>
    
    
      <category term="Beamer" scheme="http://blog.tokor.org/tags/Beamer/"/>
    
      <category term="textpos" scheme="http://blog.tokor.org/tags/textpos/"/>
    
  </entry>
  
  <entry>
    <title>ネタでしかない仮想通貨「円天(Yenten)」をマイニングして暖を取る話</title>
    <link href="http://blog.tokor.org/2017/12/22/%E3%83%8D%E3%82%BF%E3%81%A7%E3%81%97%E3%81%8B%E3%81%AA%E3%81%84%E4%BB%AE%E6%83%B3%E9%80%9A%E8%B2%A8%E3%80%8C%E5%86%86%E5%A4%A9-Yenten-%E3%80%8D%E3%82%92%E3%83%9E%E3%82%A4%E3%83%8B%E3%83%B3%E3%82%B0%E3%81%97%E3%81%A6%E6%9A%96%E3%82%92%E5%8F%96%E3%82%8B%E8%A9%B1/"/>
    <id>http://blog.tokor.org/2017/12/22/ネタでしかない仮想通貨「円天-Yenten-」をマイニングして暖を取る話/</id>
    <published>2017-12-21T15:32:00.000Z</published>
    <updated>2019-05-12T07:24:29.999Z</updated>
    
    <content type="html"><![CDATA[<h2>概要</h2><p>最近身も心も寒いので，とりあえず身の寒さだけなんとかしようと思い暖房をつけるのですが，最近こんなニュース<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>を見てしまったせいで，</p><p><strong>暖房ってめっちゃ無駄なのでは??</strong></p><p>と思うようになってしまい，マイニングで暖を取る環境を整えようと決意したのが数日前の話です．しかし，BitcoinやBitcoinCash等の有名所の通貨はもはや新規参入に旨味がない上，送金にも時間がかかるし手数料も高いというのが現状です．それはあまりにももったいないので，マイナーなコインを採掘して小銭を得つつ暖を取るというのが今回の目標です．</p><h2>円天はCPUでマイニングする暗号通貨</h2><img src="/2017/12/22/ネタでしかない仮想通貨「円天-Yenten-」をマイニングして暖を取る話/yenten_logo.png" title="円天のロゴ"><p>あの2000年代後半の <strong>円天事件の円天ではありません</strong> ．</p><p>円天事件はこれ↓</p><blockquote><p>擬似通貨「円天」は電子マネーとして使用可能と公開されていた。10万円以上を預け、あかり会員になると「1年ごとに預けた金額と同額の円天を受け取ることができる」「年利100%の金利が払われる」とされ、受け取った円天は、円天市場で利用することが可能とされていた。</p><footer><strong>エル・アンド・ジー - Wikipedia</strong><cite><a href="https://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%AB%E3%83%BB%E3%82%A2%E3%83%B3%E3%83%89%E3%83%BB%E3%82%B8%E3%83%BC" target="_blank" rel="noopener">ja.wikipedia.org/wiki/%E3%82%A8%E3%83%AB%E3%83%BB%E3%82%A2%E3%83%B3%E3%83%89%E3%83%BB%E3%82%B8%E3%83%BC</a></cite></footer></blockquote><p>擬似通貨ではない <strong>仮想通貨「円天」</strong> は，2017年10月末に登場したばかりのマイナー仮想通貨です．GPUやASICでは生成しづらい種類のハッシュを使用しているため，基本的に<strong>CPUでマイニングを行う</strong>という特徴があります．わたしはGPUリッチなPCなど持ち合わせていませんので，<strong>手元にある非力なノートPCで手軽にマイニングできる</strong>のはアドです．また，マイナー通貨なので，記事を書いている時点ではそこそこ掘れています．</p><blockquote><p>Yenten is made for reducing MEGA WASTE of electricity by ASIC on the earth.When this cryptocurrency spreads, reduction of CO2 emission would be realize by Yenten.</p><footer><strong>Yenten; cryptocurrency of the cpu, by the cpu, for the cpu</strong><cite><a href="https://conan-equal-newone.github.io/yenten/index2.html" target="_blank" rel="noopener">conan-equal-newone.github.io/yenten/index2.html</a></cite></footer></blockquote><p>概要にCO2排出量削減とかまじめっぽいことが書いてありますが，これは(たぶん)<strong>ネタです</strong>．ウェブサイトを見ればわかりますが，「円く円天」とか，「どう払うん？」「円天で」とか完全に<strong>ネタづくしです</strong>．作者の名前も conan-equal-newone (コナンは新一) とかいうやつで，これもたぶん<strong>ネタです</strong>．</p><p>これで仮想通貨「円天」の魅力を知ってもらえたと思います(?)．</p><p>ここから先は，実際に円天ウォレットを作成し，マイニングして報酬を得るところまでを説明していきます．</p><p>もし万が一この記事が役に立ったのであれば，ぜひチップをはずんでください．<br>円天アドレス: <a href="yenten:YjRBHYAcbmGkvGrKWVqFfXFrKHCRMx4gqp" target="_blank" rel="noopener"><code>YjRBHYAcbmGkvGrKWVqFfXFrKHCRMx4gqp</code></a></p><script type="text/javascript" src="https://files.coinmarketcap.com/static/widget/currency.js"></script><div class="coinmarketcap-currency-widget" data-currency="yenten" data-base="USD" data-secondary="USD" data-ticker="true" data-rank="true" data-marketcap="true" data-volume="true" data-stats="USD" data-statsticker="false"></div><a id="more"></a><h2>円天ウォレットを作る</h2><p>まずはウォレットを作らないことには始まりません．Yenten Core<sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup>についているウォレットを使って，受取アドレスを取得します．</p><ol><li>GitHubからYenten Coreをダウンロードする<br>バイナリ: <a href="https://github.com/conan-equal-newone/yenten/releases" target="_blank" rel="noopener">Releases - conan-equal-newone/yenten - GitHub</a><br>ソースからビルドもできます: <a href="https://github.com/conan-equal-newone/yenten" target="_blank" rel="noopener">conan-equal-newone/yenten - GitHub</a></li><li>起動する<br>言語設定をしておくと便利です．<img src="/2017/12/22/ネタでしかない仮想通貨「円天-Yenten-」をマイニングして暖を取る話/yenten_qt.png" title="Yenten Coreを起動した様子"></li><li>受取アドレスを取得する<br>「受信」から「Request Payment」をクリックすると，円天の受取アドレスが表示されます．<img src="/2017/12/22/ネタでしかない仮想通貨「円天-Yenten-」をマイニングして暖を取る話/yenten_receive.png" title="「Request Payment」をクリック"><img src="/2017/12/22/ネタでしかない仮想通貨「円天-Yenten-」をマイニングして暖を取る話/yenten_receive2.png" title="QRコードとアドレスが表示される"></li></ol><p>これで円天の送受信ができるようになりました．</p><h2>円天をマイニングする</h2><p>ウォレットの準備ができたので，つぎは円天をマイニングしていきます．</p><h3>プールへの登録</h3><p>ソロマイニングとプールマイニングがありますが，今回はプールマイニングを行います．使用するプールはひとまずここです:</p><ul><li><a href="https://bunnymining.work/yenten/" target="_blank" rel="noopener">Yenten POOL - bunnymining.work - Home</a></li></ul><p>ユーザ登録をします．</p><ol><li>左のメニューから「Other」→「Sign Up」</li><li>ユーザ名，パスワード等を入力して「Register」すれば登録は完了</li><li>左のメニューから「Login」</li></ol><p>つぎに，ワーカの登録を行います．</p><ol><li>「My Account」→「My Workers」<img src="/2017/12/22/ネタでしかない仮想通貨「円天-Yenten-」をマイニングして暖を取る話/bunnymining_worker.png" title="「My Account」→「My Workers」"></li><li>ワーカの名前とパスワードを決めて「Add New Worker」</li></ol><p>最後に，受取口座の設定を行います．</p><ol><li>「My Account」→「Edit Account」</li><li>「Account Details」の「Payment Address」に受取口座のアドレスを入力します．その他の項目はてきとーに．<br>一回の払い出しに0.1YTN手数料が乗るので，わたしは100YTNで自動的に払い出しするように設定しました．項目を変更したら，一番下のPINを入力してから「Update Account」を押してください．<img src="/2017/12/22/ネタでしかない仮想通貨「円天-Yenten-」をマイニングして暖を取る話/bunnymining_account.png" title="設定を変更するときはPINを入れ忘れないように！"></li></ol><h3>マイニングをはじめる</h3><p>マイニングには，cpuminer-opt<sup class="footnote-ref"><a href="#fn3" id="fnref3">[3]</a></sup>を使用します．</p><ol><li><p>GitHubからダウンロード<br>バイナリ(Windows): <a href="https://github.com/JayDDee/cpuminer-opt/releases" target="_blank" rel="noopener">Releases - JayDDee/cpuminer-opt - GitHub</a><br>LinuxやMacな方はソースコードからビルドしてください．</p></li><li><p>ちなみにわたしの場合 <code>configure</code> のオプションはこんな感じにしました．<br><code>CFLAGS=&quot;-O3 -march=native -Wall&quot; CXXFLAGS=&quot;$CFLAGS -std=gnu++11&quot; ./configure --with-curl</code></p></li><li><p>以下で起動します</p><figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">$ cpuminer -a yescryptr16 -o stratum+tcp://bunnymining.work:20333 -u 10gtokoro.test -p test</span><br></pre></td></tr></table></figure><p><code>-u</code> と <code>-p</code> には，ユーザ名.ワーカ名とパスワードをそれぞれ入力します．<code>-B</code> オプションをつけるとバックグラウンド実行されます．サーバで動かす場合につけると便利です．</p></li></ol><p>マイニングが始まると，下の画像のようなログが流れていきます．</p><img src="/2017/12/22/ネタでしかない仮想通貨「円天-Yenten-」をマイニングして暖を取る話/mining_log.png" title="ここほれわんわん"><p>また，プールの「<a href="https://bunnymining.work/yenten/index.php?page=dashboard" target="_blank" rel="noopener">Dashboard</a>」で，どの程度マイニングできているか，どれだけ報酬をもらえたか等を確認することができます．</p><img src="/2017/12/22/ネタでしかない仮想通貨「円天-Yenten-」をマイニングして暖を取る話/pool_ui.png" title="眺めているだけでも楽しい"><p>これで一連の作業は完了です．あとは待つだけ．</p><h2>我が家の構成と運用</h2><ul><li><strong>ノートPC(2015年製) Intel Core i7-4710MQ @ 2.50GHz (8論理コア)</strong><br>メインPCであるため，自宅作業時のみマイニング</li><li><strong>ノートPC(2011年製) Intel Core i5-2520M @ 2.50GHz (4論理コア)</strong><br>使用していないため常時マイニングに割り当て可能　現状自宅にいるときのみ</li><li><strong>(さくらVPS 2Gプラン)</strong>テスト用</li></ul><p>ゆくゆくは積んでいるボードPCたちにも頑張ってもらおうと考えています．</p><h2>メリットとデメリット</h2><h3>メリット</h3><ul><li><strong>ちょっとだけあったかい</strong><br>暖房ほど効果はありません．上記2台を1時間半ほど動かしてようやく1℃上がりました．というか，その場にいたわたし自身のほうが熱を放出してそう．<strong>膝の上に置いて暖を取る</strong>のにはちょうどいい感じです．</li><li><strong>ちょっと小銭を稼げる</strong><br>ちょっと小銭というのは，小銭をちょっとということです．儲けようとは考えないほうがいいです．電気代的にどうなのかは報告できそうなら報告します．</li><li><strong>マイナー通貨やブロックチェインへの興味がちょっと湧く</strong><br>効率的に暖を取れそうなマイナー通貨は何か探すことで，ちょっとだけ無駄知識が増えます．</li></ul><h3>デメリット</h3><ul><li><strong>うるさい</strong><br>なんといってもノートPCのファンの音はサイズが小さいのでうるさいのです．睡眠の妨げにならないか懸念があります．</li><li><strong>火事が怖い</strong><br>ノートPCの常時起動といえば火事<sup class="footnote-ref"><a href="#fn4" id="fnref4">[4]</a></sup>です．「めっちゃ暖房になりました」では済まされないので，家にいるときだけ動かすようにしています．</li><li><strong>PCの寿命がたぶん縮む</strong></li></ul><h2>まとめ</h2><p>仮想通貨「円天」は，CPUで公平にマイニングできる特徴的な暗号通貨です．暖を取るというこの記事の目的はさておき，この機会にぜひマイニング・取引してみましょう．また，ネタですがCO2排出量が少ないという触れ込みなので，ビットコインたちが消費電力の問題で頓挫した場合は，もしかすると日の目を見ることになるかもしれません．そういう意味で，少量でも保有しておくとおいしいことがある可能性があります．</p><p>再度になりますが，もし万が一この記事が役に立ったのであれば，ぜひチップをはずんでください．<br>円天アドレス: <a href="yenten:YjRBHYAcbmGkvGrKWVqFfXFrKHCRMx4gqp" target="_blank" rel="noopener"><code>YjRBHYAcbmGkvGrKWVqFfXFrKHCRMx4gqp</code></a></p><hr><hr class="footnotes-sep"><section class="footnotes"><ol class="footnotes-list"><li id="fn1" class="footnote-item"><p><a href="https://news.bitcoin.com/siberians-use-cryptocurrency-miners-heat-homes/" target="_blank" rel="noopener">Siberians Use Cryptocurrency Miners to Heat Homes - Bitcoin.com News</a> <a href="#fnref1" class="footnote-backref">↩</a></p></li><li id="fn2" class="footnote-item"><p>この記事の手順・スクリーンショット等は，Yenten Core v1.2.1 の時点でのものです． <a href="#fnref2" class="footnote-backref">↩</a></p></li><li id="fn3" class="footnote-item"><p><a href="https://github.com/JayDDee/cpuminer-opt" target="_blank" rel="noopener">JayDDee/cpuminer-opt - GitHub</a> <a href="#fnref3" class="footnote-backref">↩</a></p></li><li id="fn4" class="footnote-item"><p><a href="http://www.hotel-raj.si/hr" target="_blank" rel="noopener">ノートPCをサーバーにして大惨事になった話 | vps比較メモ</a> <a href="#fnref4" class="footnote-backref">↩</a></p></li></ol></section>]]></content>
    
    <summary type="html">
    
      &lt;h2&gt;概要&lt;/h2&gt;
&lt;p&gt;最近身も心も寒いので，とりあえず身の寒さだけなんとかしようと思い暖房をつけるのですが，最近こんなニュース&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;を見てしまったせいで，&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;暖房ってめっちゃ無駄なのでは??&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;と思うようになってしまい，マイニングで暖を取る環境を整えようと決意したのが数日前の話です．
しかし，BitcoinやBitcoinCash等の有名所の通貨はもはや新規参入に旨味がない上，送金にも時間がかかるし手数料も高いというのが現状です．
それはあまりにももったいないので，マイナーなコインを採掘して小銭を得つつ暖を取るというのが今回の目標です．&lt;/p&gt;
&lt;h2&gt;円天はCPUでマイニングする暗号通貨&lt;/h2&gt;
&lt;img src=&quot;/2017/12/22/ネタでしかない仮想通貨「円天-Yenten-」をマイニングして暖を取る話/yenten_logo.png&quot; title=&quot;円天のロゴ&quot;&gt;
&lt;p&gt;あの2000年代後半の &lt;strong&gt;円天事件の円天ではありません&lt;/strong&gt; ．&lt;/p&gt;
&lt;p&gt;円天事件はこれ↓&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;擬似通貨「円天」は電子マネーとして使用可能と公開されていた。10万円以上を預け、あかり会員になると「1年ごとに預けた金額と同額の円天を受け取ることができる」「年利100%の金利が払われる」とされ、受け取った円天は、円天市場で利用することが可能とされていた。&lt;/p&gt;
&lt;footer&gt;&lt;strong&gt;エル・アンド・ジー - Wikipedia&lt;/strong&gt;&lt;cite&gt;&lt;a href=&quot;https://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%AB%E3%83%BB%E3%82%A2%E3%83%B3%E3%83%89%E3%83%BB%E3%82%B8%E3%83%BC&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;ja.wikipedia.org/wiki/%E3%82%A8%E3%83%AB%E3%83%BB%E3%82%A2%E3%83%B3%E3%83%89%E3%83%BB%E3%82%B8%E3%83%BC&lt;/a&gt;&lt;/cite&gt;&lt;/footer&gt;&lt;/blockquote&gt;
&lt;p&gt;擬似通貨ではない &lt;strong&gt;仮想通貨「円天」&lt;/strong&gt; は，2017年10月末に登場したばかりのマイナー仮想通貨です．
GPUやASICでは生成しづらい種類のハッシュを使用しているため，基本的に&lt;strong&gt;CPUでマイニングを行う&lt;/strong&gt;という特徴があります．
わたしはGPUリッチなPCなど持ち合わせていませんので，&lt;strong&gt;手元にある非力なノートPCで手軽にマイニングできる&lt;/strong&gt;のはアドです．
また，マイナー通貨なので，記事を書いている時点ではそこそこ掘れています．&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Yenten is made for reducing MEGA WASTE of electricity by ASIC on the earth.
When this cryptocurrency spreads, reduction of CO2 emission would be realize by Yenten.&lt;/p&gt;
&lt;footer&gt;&lt;strong&gt;Yenten; cryptocurrency of the cpu, by the cpu, for the cpu&lt;/strong&gt;&lt;cite&gt;&lt;a href=&quot;https://conan-equal-newone.github.io/yenten/index2.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;conan-equal-newone.github.io/yenten/index2.html&lt;/a&gt;&lt;/cite&gt;&lt;/footer&gt;&lt;/blockquote&gt;
&lt;p&gt;概要にCO2排出量削減とかまじめっぽいことが書いてありますが，これは(たぶん)&lt;strong&gt;ネタです&lt;/strong&gt;．
ウェブサイトを見ればわかりますが，「円く円天」とか，「どう払うん？」「円天で」とか完全に&lt;strong&gt;ネタづくしです&lt;/strong&gt;．
作者の名前も conan-equal-newone (コナンは新一) とかいうやつで，これもたぶん&lt;strong&gt;ネタです&lt;/strong&gt;．&lt;/p&gt;
&lt;p&gt;これで仮想通貨「円天」の魅力を知ってもらえたと思います(?)．&lt;/p&gt;
&lt;p&gt;ここから先は，実際に円天ウォレットを作成し，マイニングして報酬を得るところまでを説明していきます．&lt;/p&gt;
&lt;p&gt;もし万が一この記事が役に立ったのであれば，ぜひチップをはずんでください．&lt;br&gt;
円天アドレス: &lt;a href=&quot;yenten:YjRBHYAcbmGkvGrKWVqFfXFrKHCRMx4gqp&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;code&gt;YjRBHYAcbmGkvGrKWVqFfXFrKHCRMx4gqp&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;

&lt;script type=&quot;text/javascript&quot; src=&quot;https://files.coinmarketcap.com/static/widget/currency.js&quot;&gt;&lt;/script&gt;&lt;div class=&quot;coinmarketcap-currency-widget&quot; data-currency=&quot;yenten&quot; data-base=&quot;USD&quot; data-secondary=&quot;USD&quot; data-ticker=&quot;true&quot; data-rank=&quot;true&quot; data-marketcap=&quot;true&quot; data-volume=&quot;true&quot; data-stats=&quot;USD&quot; data-statsticker=&quot;false&quot;&gt;&lt;/div&gt;
    
    </summary>
    
      <category term="仮想通貨" scheme="http://blog.tokor.org/categories/%E4%BB%AE%E6%83%B3%E9%80%9A%E8%B2%A8/"/>
    
    
      <category term="円天" scheme="http://blog.tokor.org/tags/%E5%86%86%E5%A4%A9/"/>
    
      <category term="ウォレット" scheme="http://blog.tokor.org/tags/%E3%82%A6%E3%82%A9%E3%83%AC%E3%83%83%E3%83%88/"/>
    
      <category term="マイニング" scheme="http://blog.tokor.org/tags/%E3%83%9E%E3%82%A4%E3%83%8B%E3%83%B3%E3%82%B0/"/>
    
      <category term="Yenten" scheme="http://blog.tokor.org/tags/Yenten/"/>
    
      <category term="YTN" scheme="http://blog.tokor.org/tags/YTN/"/>
    
      <category term="cpuminer-opt" scheme="http://blog.tokor.org/tags/cpuminer-opt/"/>
    
  </entry>
  
</feed>
