Atomのmarkdown previewで数式を見る
tex形式で数式を書くとき、リアルタイムにプレビューしながら書きたいなって思った。Atomのmarkdown preview機能を使うことにした。下記手順が面倒な人はVisual Studio Code使うといいかも。
必要なパッケージのインストール
Atomはデフォルトのmarkdown preview機能だと数式が見れないので、パッケージをインストールする。下記記事を参考にmarkdown-preview-plusとmathjax-wrapperをインストールしました。
見出しのフォントサイズを変更する
markdown-preview-plusだと見出しがめちゃくちゃでかい。ちょっとしたメモにも使いたかったので設定で小さくすることにした。下記サイトを参考に見出しサイズを変更することができました。
↓こんな感じ
.update-preview { font-size: 0.8em; font-family: sans-serif; }
その後
Atomはアイコンが可愛いなって思って使ってたのだけど、Visual Studio Codeをおすすめされて今はそっちを使ってる。Visual Studio Codeはmarkdown previewで数式も表示されるし文字サイズもちょうどいいのでいい感じ。
VRからロボットを操作する記事を書きました
ちょっと前の話だけど、HMDとコントローラで構成されたVR機器でロボットを操作した。簡単に言えば僕の手の位置と頭の向きをロボットが真似するやつ。その際趣味TECHオンラインというサイトにお誘いいただいたので、記事を書いた。
動いている様子
記事にも載ってるんだけど一応ここにも動画を。
書いた記事
大事なことは全部ここに書いた。見てくれ。
GitHub
先輩に暖かく見守られながら製作した記録がここに。ちなみに動画でお察しだけどバグが多々あるのであまり参考にはならないかと思います。
感想
人様のサイトに何か書くのは初めてだったけど楽しい。制作を通して先輩や研究室の皆さんに大変お世話になりました。ありがとうございます。特にTiryohさんには全面的にアドバイスをいただいたり、撮影のお手伝いをしていただきました。この場で感謝申し上げます。
VRChatからリアル扇風機を動かす
VRChatからリアル側にアクションを起こせたら面白そう。今回は縁があってタナベさん、いくこさんとVRChat上のボタンからリアルの扇風機を動かすことができた。っていう思い出記事を2018年9月10日に書いたのに下書きのまま放置してたので供養します。
できたもの
@mukaderabbit @Naoki_Kosaka_ さんご協力ありがとうございました。@FeelzenVr さん、VRCHATに「風」を導入する事に成功いたしました。@magi_ikuko @beet_lex さんお疲れ様でした! pic.twitter.com/zN2JGqefl8
— vtuber蕎麦屋 (@sobatang1) 2018年9月9日
きっかけ
VRChatからラジコンを操作する
以前オフ会の余興としてパノラマカメラでリアル会場の様子をVRChatから見つつラジコンを操作する取り組みがあった。この時点ですでにカオス。
蕎麦ハッカソン 目標達成!VRCHATからラジコンを動かす。
— vtuber蕎麦屋 (@sobatang1) 2018年7月15日
(私はジュース買ったりノラキャットさんの動画見せる係) @magi_ikuko @Reichan__now @beet_lex さん達お疲れ様でした!動きた時すっごい興奮しました。本当に面白かったです! pic.twitter.com/dOXq3ZqGPu
ラジコンと大きいバッテリーと回路が揃うと気分はテロリストだった。
VRChat内から現実世界のラジコンを360度配信を見ながらボタンで操作できるヤベーシステムを見てる。 pic.twitter.com/jG1L36tkWI
— 坪倉輝明@メディアアーティスト (@kohack_v) 2018年7月22日
この時はまだWebpanelがあったので、いくこさんが用意してくださったサーバを経由してVRChatからラジコンを操作することができた。ちなみに僕はサーバから受け取った信号を元にラジコンを制御するコードと回路を教えていただきながら作ってた。ラジコンの制御回路については、趣味でラジコンやってるれいちゃんさんに教えてもらいながらできた。
しかしWebpanelは死んだ。他の方法が必要になった。
制作の記録
全体の構成
センサを用いてVRChatの画面の明るさを取得し、明るさに応じてアクションを起こす仕組み。例えばスイッチを押すと白→黒に変化するオブジェクトがあれば、センサの値が変化するので、VRChat上のスイッチ入力がリアルで検知できる。
ちなみに元ネタはこちら。
回路図
Arduino UNOにセンサのCdSセルと、動かす対象のサーボモータを接続した。お蕎麦屋さんにモータドライバがなかったため、冒頭の動画はサーボでスイッチを押す方式にしている。逆に他の電子部品がお蕎麦屋さんに揃っていることが驚きである。
プログラム
こんなプログラムを書いた。myservo.write()
が書かれている部分にそれぞれ明るくなったときと暗くなったときに実行したい処理を書く。
#include <Servo.h> Servo myservo; int cds_pin = 0; int servo_pin = 3; int val = 0; void setup() { myservo.attach(servo_pin); Serial.begin(9600); } void loop() { val = analogRead(cds_pin); Serial.println(val); if(val >= 350){ //明るくなったときの処理 myservo.write(90); }else{ //暗くなったときの処理 myservo.write(0); } delay(100); }
あまりオススメはしない
ディスプレイにセンサを貼り付ける時点で相当不格好だし、ディスプレイの輝度設定や周囲の明るさの影響を受けやすい。大人しく画面の色を取得するなんらかのプログラムを使うことをオススメします。
VR蕎麦屋アドベントカレンダー
本記事はVR蕎麦屋アドベントカレンダーに登録されています。長らく下書きだった記事を書き上げるきっかけをくださりありがとうございます。
自分の代わりに判子を押してくれるロボットを作る
クワマイの名の下に勝手に判子を押すロボットをお友達と作った。ハッシュタグ付けてTweetするとロボットが書類っぽく印刷して押印、写真にとってTweetで送り返してくれるもの。この記事はロボットの特徴と思い出の記録。
動いてる様子
珍しく動画内で色々解説しちゃった。この記事いらないかも。 ちなみに動画内でウィーンって鳴ってるのは研究所で放し飼いにされているDQNがSegway Drift W1を乗り回している音である。
実際のTweet
こんな感じでTweetすると。
寝る前にアイス食べちゃう #vv_kuwamai
— クワマイ (@beet_lex) 2019年12月12日
こんな感じで判子を押してもらえる。
#vv_print pic.twitter.com/ltDaDMLweF
— vv_kuwamai (@vv_kuwamai) 2019年12月12日
写真も結構きれいに印刷できちゃう。これは撮影風景。
#vv_print pic.twitter.com/eu4jQcLZDT
— vv_kuwamai (@vv_kuwamai) 2019年12月12日
GitHub
ロボットないと動かせないけど、思い出として公開。
作った人
このロボットは授業の自由製作課題をきっかけに4人で作った。大体の担当とかはこんな感じ。工作機械や実験の場を提供していただいた研究室に感謝します。
作品のコンセプト
デジタルデータで送られた書類を一旦印刷して判子押してスキャンして再び送り返すナンセンスな行為をロボットにさせたら面白いと思った。
なんとなく世の中はAIブームだし、機械が責任を負う滑稽さをビジュアライズできたらいいな。
ロボットの特徴
大体動画に書いてあるけど文章でも簡単に書いとく。
シンプルでスリムな構造
判子とカメラを載せた手先を水平に保ちつつ移動できる機構をタイミングベルトで構成した。よく平行リンク機構を使ってるアームを見かけるけど、ベルトを使った方が部品数が少ないしスリムにできる。
シミュレータを作った
期間が短かったので簡易的なシミュレータを作ってソフトの動作確認をしてた。ハードが完成するとほぼ同時に動かせたのでよかった。
シミュレータの作成については以前書いたこの記事見て。
軌道生成と逆運動学
点と点を直線で結ぶ簡単な軌道生成プログラムと、その軌道を実現するための逆運動学を実装した。逆運動学は以前記事を書いたので見て。
判子を作ってもらった
あ〜クワマイの判子欲しいな〜って思ってたらお友達から「クワマイ判子作らない?」って声かけられた。エスパーかよ。ちなみにそのお友達はさっきのDQNである。作っていただきありがとうございました。
お友達にハンコ作ってもろた。かわいい。 pic.twitter.com/EcAa8sk2dT
— クワマイ (@beet_lex) 2019年11月28日
おまけ
定期的にTweetを取得したからか、あなたがロボットでないことを証明してくださいとか連絡が来てお友達とめっちゃ笑った。多分Twitterが想像する以上にがっつりロボットだろうから。
あとこの授業課題の発表は12/10だったんだけど、その翌日にデンソー ウェーブがマジの押印電子化ロボットを発表したのでめちゃくちゃびっくりした。
TwitterのCall to action機能でTweetから動画やブログへ誘導する
Tweetは見てもらえても本編の動画やブログを見てもらえない問題を解決すべく、Twitter Media studioのCall to action機能を使ってみる。上記スクショみたいに動画やブログへのリンクが表示されるようになるので、多少はアクセスが増えたりしたらいいな。
ちなみにMedia studioは動画や画像の予約投稿とかできてCall to action以外も色々と便利。
設定したTweet
僕もVRからロボット操作してみたいなって思ってやってみました。新鮮なリアクションとトラブルを求めて出来るだけ事前の動作確認はしてなかったのですが、いい感じにポンコツな感じになったと思います。
— 🔫📛クワマイ✨🍣 (@beet_lex) October 5, 2019
VRでロボットを操作する_動作確認https://t.co/PNCJp9qT2U pic.twitter.com/WbRKjLre0Z
設定の手順
動画をMedia studioへアップロード
まずはCall to actionを設定したい動画をMedia studioにアップロードする。右上のメディアをアップロードボタンか、動画をドラッグアンドドロップする。
Call to actionの設定
アップロードが完了したら、動画のサムネイルをクリックしてメディアの詳細を開く。スクショ下部にある設定タブを選択。
下へスクロールしていくとCall to actionがあるので、誘導したいリンクを貼ればおしまい。
効果はよくわかんない
Call to actionのおかげでどれほどクリック数が増えたのかは謎。確認方法とかあるのかな。少なくともMedia studioのアナリティクス欄には出てこない。
アナリティクス曰く1000~2000人くらいがこの動画をちゃんと見たみたいなんだけど、YouTubeは100再生くらいなので効果はあまりなさそう。でもなんかかっこいいから今後は積極的に設定しておきたい。
VSCodeでURDFをプレビューしながら書く
以前記事を書いたURDFとxacro(XML macro)はロボットのシミュレーションに必要な形状とか物理特性、センサーやアクチュエータなどを記述できる形式。確認のためにいちいちrvizを起動してたけど、Visual Studio CodeのROS向けExtensionsにURDFをプレビューする機能があったのでメモ。
以前のxacro記事
使用環境
- Ubuntu 16.04
- ROS Kinetic Kame
- Visual Studio Code 1.38.1
- VSCode extension for ROS 0.6.0
手順
VSCodeのInstallと起動
公式サイトの手順通りにやったらできた。
Installは下記コマンド。
$ sudo snap install --classic code
起動は下記コマンド。
$ code
VSCode extension for ROSのInstall
Window左端下部のアイコンをクリックしてExtensions marketplaceを開いて、ROSで検索すると出てくる。Installボタンを押せばInstall完了。
URDF previewを開く
Ctrl + Shift + p
でVSCodeのコマンドパレットを開いてrosって入力すると候補に出てくる。
開いてしばらく待つとこんな感じで出てくる。
間違えてるとちゃんと教えてくれる。優しい。
数値計算で逆運動学を解く
Denavit-Hartenberg parametersでマニピュレータを記述し、数値計算で逆運動学を解いた。パラメータさえ書けば色々なマニピュレータに対応できるので便利そう。運動学はにわかなので違うところあったら教えてください。
Notebook
実装の例と式はJupyter Notebookに書いた。だからこのブログは参考にしたサイトの紹介だけ。
Denavit-Hartenberg parametersと同次変換行列
Denavit-Hartenberg parametersはマニピュレータの関節角やリンクの長さを表現する際によく用いられている記法。このパラメータから同次変換行列を求め、順運動学を解く。
こちらのサイトが図や式が豊富で大変わかりやすかったです。
今回はこんな感じの3DoFなマニピュレータを考える。
Denavit-Hartenberg parametersは多分こんな感じ。
0 | 0 | 0 | ||
0 | 0 | |||
1 | 0 | 0 | ||
1 | 0 | 0 | 0 |
同次変換行列はこれに代入していく。この式をJupyter Notebookに書いてもGitHubで見るとレイアウトが崩れるから発狂しそうだった。ここに書いておく。SやCはそれぞれsin、cosの略。
同次変換行列を順にかけていくと、ベースから見たエンドエフェクタの位置姿勢がわかる。つまりこれで順運動学が解ける。
数値計算
まず関節角ベクトル, 手先位置ベクトルを下記のように定義する。
するとヤコビ行列はこんな感じ。
初期値を適当に設定して、下記式を繰り返し計算すると解ける。ちなみにが順運動学。
計算してみるとこんな感じ。水色の棒がマニピュレータで、赤い丸が目標手先位置。計算を繰り返すごとに手先位置と赤い丸の位置が近づいていくのがわかる。
使用例
書いたコードをそのまんまROSパッケージに入れてアームを動かしてみた。PythonなのでC++と比べて遅いけど、とりあえず動くしわかりやすいのでいいかなと思ってる。
参考
マニピュレータの描画方法を参考にさせていただきました。