コンテンツへスキップ

アフィリエイトをしばらくやっているけど、広告を改良しようと思っても毎回忘れている。個人的メモを兼ねたまとめ。 なお、このブログはwordpressで実践したことをまとめています。一部無料ブログでは貼り付けられませんのでご注意ください。
追記(2019/3/18) ドメインについて書くのを忘れていました。アフィリエイトをやるなら独自ドメインがあったほうがいいと思います。私はレンタルサーバ+独自ドメインでやっています。サーバというのはざっくりいうとPCで、ドメインというのはサイトの住所で、ユーザー目線ではURLの一部です (inopage.comというやつです) 。どちらも有料なので気を付けてください。

目次

  • アフィリエイトとは
  • Google Adsense
  • Google Adsense を登録する
  • Google Adsense を貼り付ける
  • AMPについて
  • Amazon アソシエイト
  • Amazon アソシエイトを利用する
  • 参考

アフィリエイトとは

アフィリエイトとは成功報酬型のインターネット広告です。

アフィリエイト商品を売る人をアフィリエイター、アフィリエイターと広告主を仲介する企業をASP(Affiliate Service Provider)と呼びます。 アフィリエイターは企業の広告をし、商品を売ることで報酬が得られます

このブログは部品等の資金稼ぎのために導入していますが、対策してないのでかなり雑です。文章間に広告が無理矢理入っている始末。

Google Adsense

Google AdSenseとは、Googleの提供しているコンテンツ連動型広告配信サービスです。ブログ記事でよく見かける広告はGoogle Adsenseです(多分)。

PPC(Pay Per Click)広告という方式で、クリック数で報酬が入るようになっています。Google Adsenseではクローラーが巡回し、内容に合った広告が表示されるようになっています。この報酬のメリットは初期コストが低いことデメリットはクリックして貰えないと報酬が貰えないことです。

このブログでは電気製品、ブログ、ゲームなどが出ているみたいです。「みたいです」というのも、管理者(私)が口出しできるのは広告の場所や大きさ、分野までなので出た広告を見てみないとわらないからです。

Google Adsenseには基本的な広告の他に、自動広告があります。自動広告はgoogleがページをスキャンして自動で広告を選んで貼ってくれます。

自動広告のメリット

  • かなり楽! 掲載したい各ページに同じコードを 1 つずつ設置するだけで、自動広告を表示できます。 広告の掲載と最適化が自動的に行われますので、手作業にかかる時間を節約できます.
  • 増収が見込める レイアウト、コンテンツ、既存の Google 広告に基づいてページを分析してくれます

自動広告のデメリット

  • 予期しない位置に広告が出る 段落に注意しないと広告によって読みづらくなります。スキャンを意識した構成にしなければなりません。

詳細は公式を参照してください。 自動広告について -AdSenseヘルプ

Google Adsenseを登録する

このサイトで登録して、アドセンスアカウントを取得しましょう。このあたりは何もスクショ取ってませんので丸投げです。 Gogle Adsense

このあと、審査がはいります。長い人は1ヶ月以上掛かります。このブログに導入した2019/2ごろに調べたところによると、審査が厳しくなったとのことです。内容や記事数などが基準になるという噂。以下参考までに当時のことを書いておきます。

  • 1度目落ちたとき
  • この記事は10記事くらい。多くは1記事2000文字行かないくらいでした。

  • 受かったとき
  • オリジナル文章の文字数が重要なのではと考え、以降6000文字程度の記事を1つ書きました。この時点で11記事くらいでした。このときの投稿はこれです。

Google Adsense を貼り付ける

受かったら広告を貼っていきます。基本的にHTMLを書き加えるので、wordpress内部にカスタムHTMLとして挿入すれば表示はさせるはず、ですが正直毎回入れるのは面倒。なので、一括で全体に表示できる方法をやります。プラグインWordPress Ad Manager & AdSense Ads – Ad Inserterというのを使っています。

広告に限らず、PHPやHTMLをいじらないといけないことがよくあると思いますが、元コードに直接やって居るときに操作をミスすると突然全く動かなくなる、表示すらされなくなる事故が起きる危険がありますので、直接手を加えるのはおすすめしません。そこで登場するのがプラグインです。この Ad Inserter は、対応するタブにコードを書き加えるだけでheaderやfooterを編集できるので便利です。画像のプラグインをインストールして有効化します。

次にGoogle AdSenseのページからコードを取得します。

  • 自動広告

Google AdSenseの「自動広告を設定」を押すとコードが出てくるので、それをコピーします。

次にwordpressの設定/Ad Inserterを開き、設定(歯車マーク)をクリックしてheaderを開きます。コードをコピペしてsave settingで終了です。

これによってすべてのページのheaderに自動広告のタグが貼り付けられました。しばらく待つと広告がでます。私はsaveし忘れて表示されずに慌ててたので、時間は全然計ってません。たぶん30分くらいじゃないかと。

  • その他の広告

広告ユニットを開きます。今回は「テキスト広告とディスプレイ表示」で作ってみます。「テキスト広告とディスプレイ表示」を選択 わかりやすい名前をつけます。広告サイズは推奨のままで行きます。広告のスタイルはサイトのデザインも考慮しつつテキトーにきめます。 最後に保存すると、コードが出てきます。これをコピーします。

次にwordpressの設定/Ad Inserterを開き、bookにコピペして保存します。このとき、コードの一番下に<p>スポンサーリンク</p>と書くことをおすすめします。

自分のページを別なタブでひらいて上のAdInserterを開くと、ページ内のどこがどういう名前か確かめることができます。

外観/ウィジェットから、Ad Inserterでメインサイドバーを選択します。すると右側のメインサイドバーの一番下にAd Inserterと言うのができますので、先ほどコピペした先のbook(私はbook5)を選択します。わかりやすいようなtitleを記入。

すると、自分のページのメインサイドバーに表示されるであろう枠が表示されています。

しばらく待つと表示されると思います。お姉さんの笑顔がまぶしいですね。

AMPについて

自動広告のページにAMP自動広告というのがあります。AMP(Accelerated Mobile Pages)とはGoogleとTwitterで共同開発されている、モバイル端末でウェブページを高速表示するためのプロジェクト、またはそのためのフレームワーク(AMP HTML)のことです。

公式Accelerated Mobile Pages Project – AMP

これはGoogleが推奨しているもので、SEOも表示速度を判断材料の1つにしているといううわさもあります。このブログは大学生を対象にしているので、スマホに特化させようと思い、AMP化しようとしてみました。そのときのことについて書き残しておきます。

これはネタバレなんですが、AMP化しないことにしました。AMPとはざっくり言うと、サイトを読み込むときに不要なものを読み込まないような作りみたいです。それで、このブログは数式も表示しているんですが、AMP化HTMLを読み込むときに、数式を綺麗に表示するためのプラグインが読み込まれないらしいんです。それに画像も表示されませんでした。数式を表示するにはMathMLというHTMLの数式版に書き換えたりしないといけないんですが、それをする労力とAMPのメリットが釣り合うかと考え、断念することにしました。

Amazon アソシエイト

このAmazonアソシエイトはamazonが提供するアソシエイトプログラムで、商品が売れたとき、自分が紹介した商品の値段の何割かが報酬として受け取れます。何を隠そうこのページの収入の本命はAmazonさんです。以下が紹介料率です。


Amazonアソシエイト・プログラム紹介料率表から転載。

以下のリンクからサインインしてください。申込画面はこれまたスクショしてなかったので丸投げです。頑張ってください。

amazon アソシエイト

Amazon アソシエイトはちまたの噂ではgoogle Adsenseよりも審査基準が厳しいみたいです。合格時のこのブログについて参考までに書き残しておきます。なお私はamazon prime 会員です。

  • 2度落ちたとき 10記事くらい。多くは1記事2000文字行かないくらいでした。1記事増やして再度申し込み、落ちました。
  • 合格したとき オリジナル文章の文字数が重要なのではと考え、以降6000文字くらいしたところ、受かりました。このときのサイトはこれです。(確かjupyter)。Google Adsenseとほぼ同時期に受かってます。二日後くらいに合格のメールが来ました。

Amazon アソシエイトを利用する

アソシエイトのページからやる場合と、ツールバーからやる場合が有ります。いずれにせよHTMLコードが表示され、wordpressのカスタムHTMLとして貼り付けるようになります。商品リンクの表示は「テキスト」、「画像」、「テキストと画像」の3つから選べますが、「テキストと画像」はなぜか画像が表示されないので使わない方がいいかも知れません。 プラグインもありますが、HTMLを貼り付けするだけなので全く問題なく使えてます。私は部品や参考本の紹介として使っているので今のところ「テキスト」を使うことが多いです。

商品リンク/商品リンクから商品検索をします。 出てきた商品の横のリンク作成を押すと、作成画面へ移動します。

テキストでリンクを作成する場合、テキストのみのタブを選択し、各種項目を適宜変更します。リンクテキストは表示される文字で、リンク先ページは商品紹介ページか出品一覧ページから選べます。 最後に、HTMLを取得します。

HTMLはテキスト+リンク+文字の大きさなどその他情報がすでに入力されていて、URL、短縮URLはリンク先の情報しかありません。特に目的がないときはHTMLをそのままコピーします。wordpressにもどり、カスタムHTMLとしてコピペします。プレビューはこんな感じ。

  • ツールバーから

自分のamazonアカウントでログインすると一番上にツールバーが表示されています。表示されていない場合は先ほどのアソシエイトのページから、ツール/アソシエイト・ツールバーでアソシエイト・ツールバーの設定はこちらから表示をオンにします。

以降は ページから と同様です。

amazonにログインして商品を検索染します。ツールバーの「テキスト」、「画像」、「テキストと画像」のうちテキストを選びます。出てくるURLをwordpressでいつものようにクリップのようなマークでリンクにすればOKです。

「画像」、「テキストと画像」を選んだ場合はHTMLがそのまま出てくるので、ページからで紹介した方法と同じようにカスタムHTML表示にしてコピペすればOKです。

追記(2019/3/18) 新しく投稿したら、Google consoleでインデックス登録とサイトマップの更新を忘れずに。

雑記

なんでも世の中の1/3のサイトはwordpressで作られているとのことです。もしwordpressに重大なエラーがあったり攻撃されたりした場合、世界中のサイトの1/3が動かなくなるというわけですね。あるいは、wordpressの学習だけに力を入れて脆弱性を調べれば儲かるかもと考えている怖い人が世界中にいると考えられます。セキュリティについても無関心ではいられませんね。

参考 WordPress(ワードプレス)とは? -wordpress超初心者講座
追記(2019/3/18) ドメイン、Google consoleでの更新について追記しました。

参考

目次

  • やった事
  • 目的
  • ラズパイとは
  • ROSとは
  • 環境構築1 Ubuntu
  • 環境構築2 ROS

やった事

Raspberry Pi 3 B+ に Ubuntu MATE と ROSをインストールし、ROSで動作確認を行いました。PCはWindows10です。

目的

これは Web X IoT メイカーズチャレンジ のハッカソンの一環としての活動で、機能の1つである通知機能をやったので、もっといろいろやってみる準備をします。 =>webIoTメイカーズチャレンジに参加前編

一方でゼミでROSをやっていて、全然解らなくてヤバいので家で勉強しようかとも思っています。というわけで、

  • ROSが使える
  • Webとの通信ができる

上記2点を満たした環境を用意しようと思います。調べてみるとRaspbian(ラズパイで一番スタンダードであろうOS)でROS環境を作るのは大変そうなので、Ubuntuでいきたいと思います。ラズパイに向いているのは軽量なMATEらしいですので採用。

Raspberry Piとは

ラズパイとは、内蔵ハードディスクなどを搭載しない代わりに、SDカード又はmicroSDを起動および長期保存用のストレージに利用する、「ワンボードマイコン」と呼ばれるハードウェアです。ラズベリーパイ財団より安価な教育用のシングルボードコンピューターとして開発されました。

つまり、PCほどの計算の能力はないけど、PCみたいに使えるIoTに向いた機械です。標準でネットにつなげたりするので初心者に優しいらしい。今回私はRaspberryPi 3 model B+ を使います。一番新しい奴です。

ラズパイ本体の他にいくつか用意するものがあります。

  • SDカード(ubuntuMATE、ROSを入れるなら32GB以上)
  • ディスプレイ(HDMLが接続できるTVでOK。PS4をやってるやつとか)
  • 有線ネットワーク(raspberryPiは3はwifiでもいける)
  • キーボード
  • マウス

RSコンポーネントRaspberry Pi 3 B +マザーボード

Team microSDHCカード 32GB 高速転送UHS-1 日本国内10年保証 SD変換アダプター付属 正規品

アイトランク iTrunk Raspberry Pi 3用USB電源アダプター PSE認証 5V 2.5A Raspberry Pi 3 Model B/B+ Raspberry Pi 2 Model B Raspberry Pi Model B+ B Plus適用

この章の参考

ROS とは

ソフトウェア開発者のロボット・アプリケーション作成を支援するライブラリとツールを提供しているオープンソースのソフトウェアです。特徴として以下をあげます。

  • ソフトウェアプラットホームである
  • ミドルウェアである
  • フレームワークである

ソフトウェアプラットホーム

情報プラットホームのエコシステムの4要素としてハードウェア、OS、アプリケーション、ユーザがあります。 「情報プラットホームのエコシステム」というのはわかりにくい言い回しですが、これは俗な言い方をすれば「技術が流行る」ということです。

現在私たちはスマホを持ち、アプリをインストールして使って居ますが、このようにスマホが流行るとよりよいアプリが開発されてさらに利用される、というような循環が生まれます。

ロボットが身近な存在になり、 ユーザーや開発者が増え、市場が活発になれば様々な技術が生まれて行く。このようなサイクルを作るために必要なものがロボットソフトウェアプラットホーム です。

ROSの機能

技術を流行らせるためにはソフトウェアを使い回せるようにしたり、開発者がロボットのすべてを知らなくても一部だけのソフトウェアを作ればいいようにしたりする必要があります。

ROSでは機能(モジュール)を小さな単位(ノード)に分割し、ノード間で厳格なプロトコルのもとで異なる言語でも通信する仕組みになっています。それによって、C++で書かれたモジュールとPythonで書かれたモジュール間で通信するような事を可能にしています。

また、パッケージ管理、デバッグ用ツール、開発ツールなどが整っているので開発がしやすくなっており、誰でも公開できるようになっています。

という訳でROSはミドルウェアとフレームワークの側面をとったロボットソフトウェアプラットホームです。(という風にまとめましたがどうでしょう)

この章の参考

Ubuntuとは

ラップトップ、デスクトップ、そしてサーバーに利用することができるOSで、無料で提供されています。一般のコミュニティによって開発されており、Linuxの派生のDebianから派生して作られました。カノニカル社が支援しており、Linuxとしては資金的にも人員的にも非常に手厚い支援によって開発されています。 半年ごとにリリースされていて開発が早い一方で、長期補償板(LTS)も存在します。最新のアプリケーションを利用する事も、安定した環境で作業する事も出来ます。また、Ubuntu Japanese Teamによって日本語環境が整えられています。インストール後すぐに使える、GUIでデスクトップでマウスで操作できる、など初心者にも使いやすいOSです。

今回入れるのはUbuntuの派生の一つである Ubuntu MATE です。メモリ消費が軽いのでラズパイ向きです。

この章の参考

環境構築1 Ubuntu MATE

起動まで

ラズビアンでROS環境を作るのは大変そうなので、ubuntu の中でラズパイに向いている ubuntu MATE 環境を作ります。このとき、

ラズパイ公式 Downloads

でダウンロードしたのを使うと、ラズパイ3 model B+ではOSが動きません。虹&雷マークで固まってしまいます。

雷マークは電圧不足のマークですが、電源を変えてもダメでした。調べてみるとシステムファイルの不具合でも発生するとのこと。ラズパイはB B+でハードもファームウェアも違うらしい。なのでいろいろ設定が必要みたいです。 下のサイトが最高に神なので乗せていきます。ありがとうございます。このサイトの添付に3B+でも動くように修正されたimgファイルがありますので、これを使います。

RaspberryPi 3B+にROSを導入する - Isao HARA

このページのubuntu MATE からダウンロードした「ubuntu-mate-16.04~.img.xz」を解凍します。このとき解凍は7-zipをインストールして使いました。


「ubuntu-mate-16.04~.img」をSDカードに書き込みます。このSDカードがラズパイのメモリになります。書き込みにはWin32 Disk Imagerをインストールしました。microSDをセットして起動すると、

出ました。ついに!(ここまで調べるのになんやかんや2日)

ここからはubuntu上での作業です。言語等の説明は省略します。ただ、wifi設定は後でやるのが無難だと思います。wifi設定に失敗するとユーザーが登録されなくなるのではじめからやり直す事になります。左上の アプリケーション/システムツール/MATE端末 で指示を出していきます。この端末はよく使うので右クリックしてデスクトップに追加しておくと良いと思います。

更新

まずはいろいろ更新 //コメント

sudo apt apdate //最新のパッケージを取得
sudo apt dist-upgrade// 最新のパッケージの更新と不要なパッケージの削除
sudo apt autoremove//依存関係で必要なくなったパッケージの削除

初回の更新なのでこれだけで1時間くらい掛かりました。

日本語入力

日本語設定をします。システム/設定/ユーザー向け/言語サポートででたウインドウの「言語のインストールと削除...」を押してインストール、「システム全体に適用」そのあと再起動します。もう一度言語サポートを開いて「キーボード入力に使うIMシステム:」のドロップダウンリストから「fcitx」を選択して再起動します。

インターネットブラウザ

インターネットブラウザのChromiumをインストールします。 私はいつもネットにつなっているか試すとき猫で検索をかけるんですが、あらかじめ入っているfirefoxというブラウザがcrashしたという通知が出ました。新しくChromiumを入れます。Chromium は Google Chrome のベースらしいです。コマンドのsudoというのは管理者権限のようなものです。

sudo apt install chromium-browser

以上です。

本来ならリモートデスクトップしたいんですが、うまくいきませんでした。出来たら追記します。RDPできるとコピペができます。

この章の参考

以前使って居たラズパイでは画面サイズがおかしくなりました。画面の大きさはディスプレイによっては合っていないことがあります。以下を見ました。メモとして張っておきます。

環境構築2 ROS

参考に挙げた本によれば、2019年現在(次のROS LTSまでは)Ubuntu 16.04 Xenial Xerus(LTS)(またはLinux Mint 1.8x) + ROS Kinetic Kameがいいらしいです。

以下を順番に実行しました //コメント

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' //関連サーバのURL追加
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116//ROS関連サーバの公開キー。サーバ更新のたびに変化するのでwikiで確認してください
sudo apt-get update  //ubuntuのアップデート さっきやったからやらなくていいかも
sudo apt-get upgrade 
sudo apt-get install ros-kinetic-desktop-full //rosのインストール 関連ライブラが含まれる
sudo apt-get install ros-kinetic-rqt*//グラフィカルユーティリティーツールrqtに関連するすべてのパッケージのインストール 上で基本的なqrtの機能はインストールされるためやらなくてもいい
sudo rosdep init //ROSのメインコンポーネントを利用したりコンパイルする際に、ROSのOSに依存したライブラリやツールをインストールするツールであるrosdepを初期化
rosdep update 
sudo apt-get install python-rosinstall //ROSパッケージをインストールするときに役立つrosinsrallのインストール
source /opt/ros/kinetic/setup.bash //環境変数の読み込み
mkdir -p ~/catkin_ws/src //ROS専用のビルドシステムcatkinのワークスペースcatkin_wsを作成、初期化
cd ~/catkin_ws/src
catkin_init_workspace 
cd ~/catkin_ws/ 
catkin_make //ビルドコマンドcatkin_make。ビルド関連ファイルはbuild、実行関連ファイルはdevelに作成される
source ~/catkin_ws/devel/setup.bash //catkinビルドシステムの環境設定ファイルの読み込み

このあとROSの動作確認のために

roscore

してエラーをはきました。

reboot //再起動

再起動してからroscoreしたら動きました。成功の場合、最後に

started core service [/rosout]

と書かれた文が表示されます。ROSを使うときはorscoreは動かしっぱなしにするので端末を複数開いて使います。 Ctrl+Cで終了することができます。

source のコードを毎回書くのは面倒なので、いくつか設定します。エディタにはemacsを使いました。

emacs ~/.bashrc

で開いて、以下を付け加えました。今回はショートカットコマンドと環境設定の自動読み込みだけ追加します。

# 環境変数
source /opt/ros/kinetic/setup.bash
source ~/catkin_ws/devel/setup.bash

# コマンド
alias cw='cd ~/catkin_ws'
alias cs='cd ~/catkin_ws/src'
alias cm='cd ~/catin_ws && catkin_make'

変更を反映するために一度端末を閉じてからもう一度開いて

source ~/.bashrc

これで自動で読み込まれるようになりました。ラズパイを起動してすぐにroscoreでもオッケーです。

最低限のエディタ

その前に、エディタが入っていないので、ひとまず最低限のエディタの用意をします。ひとまず知ってるエディタemacsをインストール。好きなのを使ってください。

sudo apt-get install emacs24

ROSのテスト

roscoreが起動できればどのサイトでもオッケーみたいでしたが、つまらないのでROSに入っているシミュレーションツールを動かしてみます。

roscore //すでに起動している場合は不要
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key

この状態で←↑→↓など矢印を押してみると、カメが動きます。楽しい!!

これでデータの流れを可視化します。

rosrun rqt_graph rqt_graph

このカメ、矢印上で前進、右で120度右、左で120度左を向きました。動かしにくいので設定をいじりたかったんですが、やめました。

この章の参考

雑談

私はすべてのSNSで亀のアイコンにしているんですが、ROSのシミュレーションも各バージョンで毎回カメでなので運命を感じざるを得ませんね。
追記(2019/3/20)Amazonリンクを増やしました。

pythonでグラフを表示するまでの流れを紹介します。グラフは自由振動、減衰振動、強制振動、倒立振り子(倒立振子、縦棒制御)の制御っぽいことをして時間変化をグラフで表示しました。おまけでCR回路の電圧の充電具合をプロットしました。 グラフを表示するのはCとかでも簡単にできますが、機械学習やってみたいのでpythonに触れる機会にします。

目次

  • 目的
  • グラフの様子
  • pythonとは
  • 環境とインストール
  • Jupyter Notebookの使い方
  • 振動の基礎とコード
  • 倒立振り子の運動方程式
  • 雑記
  • 参考

目的

思いのままのグラフを表示します。多項式だけではなく行列やベクトル、微分方程式も扱えるようになりたいと思います。

グラフの様子

今回は2つの似たような数式モデルをプロットしました。

図1:倒立振り子
  • 倒立振り子(縦棒制御)

手の上で箒のバランスを取るやつです。振動の中でも強制振動です。ニュートンの運動方程式を立てると、次のようになります。振り子は2l[m]、棒はm[kg]、台車はM[kg]です。このとき、角度Θを十分に小さいとして 近似してかなり簡単な式にまとめてあります。導出過程はページ最後に書きました。

$$\dot \theta_1(t)=\theta_2 \\ \dot \theta_2(t) = \frac{3}{l(4M+m)}(-L\theta_2+{g(M+m)-K}\theta_1)$$

簡単のためにl=1[m],M=2/3[kg],m=1/3[kg]を選ぶと、

$$\dot \theta_1(t)=\theta_2 \\ \dot \theta_2(t) = -L\theta_2+(g-K)\theta_1$$

この式で常微分方程式を解くと下記のような美しいグラフに!!コードが汚いのは御愛嬌ということで。python初めてだったのでほぼパクリです。減衰比については振動の基礎の項目に軽く書いています。

図2:倒立振り子の角度制御
from sympy import *      # sympyライブラリから全ての機能をimoprt
import numpy as np       #ベクトルや行列を表すのに使うライブラリnumpy
from scipy.integrate import odeint #scipyに含まれる常微分方程式を解く関数
import matplotlib.pyplot as plt #グラフを書くためのライブラリ
%matplotlib inline     #jupyter notebook内で表示させるため

"""
2階微分方程式 倒立振子 
"""
#シンボル定義
x=Symbol('x')                  # 文字'x'を変数xとして定義
t=Symbol('t')                  # 文字 't'を変数tとして定義

g = 9.8     #重力加速度
La = 0.89   #減衰比0.7のグラフのフィードバックゲイン
Ka = 10.2  
Lb = 1.0    #減衰比1.0のグラフのフィードバックゲイン
Kb = 10.05  
Lc = 0.0    #減衰比0.0のグラフのフィードバックゲイン
Kc = 10.0   
Ld = 1.0    #減衰比0.3のグラフのフィードバックゲイン
Kd = 12.57  

def func1(x, t, K):
    x1,x2=x
    dxdt=[x2,(-La*x[1])+((g-Ka)*x[0])]
    return dxdt
#同じことを複数書いているので省略

x0 = [10.0,2.0] # 初期条件 [x(0), dx(0)/dt]を表す

t=np.linspace(0,30,1000) # 時間 0から10までを101等分する
sol1=odeint(func1, x0, t, args=(k,)) # 微分方程式を解く 
#同じことを複数書いているので省略

#グラフ表示
plt.plot(t, sol3[:,0], linewidth=1,label='ζ=0.0') #  角度を図示。
plt.xlabel('time t[s]', fontsize=18)
plt.ylabel('angle θ[rad]', fontsize=18)
plt.legend(loc='upper right')
plt.savefig('huriko1.jpg')
plt.show()
  • LCR回路

そしてもう一つの式がこれです。回路のキャパシタはダンパー、インダクタはばねと同じです。

$$ E = v_R + v_C + v_L \\ E = L\frac{di(t)}{dt}+Ri(t)+\frac{1}{C}\int i(t)dt $$

これをキャパシタ電圧でまとめると

$$ i = C\frac{d}{dt}v_C \\ \frac{d^2}{dt^t} v_c = -\frac{R}{C} \frac{d}{dt}v_c -\frac{1}{LC}v_c + \frac{E}{LC}$$

これは強制振動の式と同じ形なので、同じようなグラフがかけます。

図3:LRC回路のVcの時間応答

python とは

今回のpythonは読みやすく、それでいて効率もよいコードをなるべく簡単に書けるように作られたプログラミング言語です。言語自体も書きやすいように作られていますが、ライブラリやワーススペースが豊富で、だいたい何でも出来るみたいです。最近ではAIや機械学習が人気ですが、そういう事をするためのライブラリが豊そろっているみたいで、最近活躍している言語です。 2系と3系は全然違うので注意が必要です。

ライブラリというのは、

ライブラリとは、複数のプログラムが共通して利用するコードをまとめたファイルである。 ライブラリ自体は単独で実行することはできない。 from I-8-8. ライブラリとプログラムの関係 | 日本OSS推進フォーラム

というものです。必要なときに呼び出すと自分の仕事だけやって帰って行きます。

ちなみに、初学者へ。世の中のホームページやアプリの画面表示は別な言語で書いています。pythonとかCとかは計算処理をやってくれるものなので、これだけやっても画面表示は出来ません。注意してください。勉強しはじめたころの私はこのあたりよく分かって無かったために時間が掛かってしまったので一応書いておきました。

環境とインストール

環境はAnacondaでまとめてインストールしてJupyter Notebookで書きます。 python公式でインストールしても良いんですが、他にもいろいろまとめてインストール出来るらしいDownloads - Anacondaでインストールした方が楽みたいです。デフォルトのままで良いので指示に従うだけです。

Jupyter Notebookの使い方

インストールしたらJupyterNotebookを起動します。するとコマンドコマンドプロンプト(っぽいなにか)が出てきますので、そこに書かれているURLをブラウザで開いてください。

ユーザーのフォルダの中身が表示されますので、好きなのを選んで右上のnewからpython3をクリック。すると、プログラムを書くためのセルが出てきます。

今数字が書いてある色塗りの部分を押すとコマンドモードになり数式やらがかけます。In[]やOut[]と書いている部分はエディットモードで、コピーやらが出来ます。エディットモードでHを押すとヘルプが出ます。

コマンドモードで上のcodeの部分をmorkdownにすると、morkdownで文章を書けます。 morkdownは私がこのブログの下書きやメモに普段使いしているマークアップ言語(HTMLの仲間)で、# ABC と書くとタイトル的な大きな文字、## ABCと書くと1段階小さい文字、なにもつけないと普通の文字、- と書くと箇条書き、というようにかなり使いやすい言語です。

pythonの記法はすっ飛ばします。numpyというライブラリを読みこんでベクトル(1次元配列)や行列(2次元配列)を表せます。 スライシング。bool。

コマンドプロンプトでサーバーをlocalhostで立てて、ブラウザで表示しているんじゃないかと思います(このあたりよく解ってませんが。たぶん。。なので、ブラウザで開いている間にJupyterNotebookを消すとエラーをはきます。

発生したエラーについて

  • 保存した画像が真っ白になっている。jupyterにはグラフが出力されている

Python matplotlibのグラフが保存できない(windows+anaconda) teratail

振動の基礎とコード

図4:線形振動系の力学モデル

機械屋さんにとってのかなり基本的なモデル(らしい)で考えます。ニュートンの運動方程式を立てます。

$$ f(t)= m\frac{d^2x(t)}{dt^2}+c\frac{dx(t)}{dt}+kx(t) $$

これは強制振動を表しています。

振動は、自由振動、減衰振動、強制振動の3つに分けられます。自由振動は正弦波などのように振動し続けます。減衰振動は自由振動が次第に減衰していきます。強制振動は減衰振動に外力を加えている場合です。 日常生活では大概空気抵抗などで減衰するので減衰振動がイメージしやすいかと思います。一方、制御するときはモータが動いているので強制振動です。

外力をf(t)と書いていますから、f(t)=0なら減衰振動、f(t)の項が有れば強制振動になります。

上の式を作為的に以下のように変形します。

$$ f(t)= \frac{d^2x(t)}{dt^2}+2\zeta\omega_n\frac{dx(t)}{dt}+\omega_n^2 \ \\減衰比\zeta = \frac{c}{2\sqrt{km}}, 固有振動数\omega_n = \sqrt{\frac{k}{m}} $$

減衰比ζは減衰具合、固有振動数ω_nは振動時の周波数に対応しています。これが減衰振動の基本的なモデルです。ζ=0のとき全く減衰しないのでsin波のような自由振動をし、ζ=1の時過不足無く(クッションに沈むように)目標値に到達します。実際には誤差や外乱が入るので制御系を作るときには0.7くらいにするそうです。

今回はpythonで解きたいので、ここから変形していきます。本当はいろんな方法が有るみたいなんですが、そのうちやると言うことにして、今回は参考本と同じ方法で解いていきたいと思います。

常微分方程式を解きます。二次方程式は大変なので、以下のように書きかえます。

$$\frac{dx_1(t)}{dt}=x_2 \\ \frac{dx_2(t)}{dt} = -\frac{c}{m}x_2-\frac{k}{m}x_1 +f(t)$$

これを行列を用いたベクトル表現にすると、

$$ \frac{d}{dt} \left[ \begin{array}{rrr} x_1 \\ x_2 \end{array} \right] = \left[ \begin{array}{rrr} 0 \ & 1 \ \\ -\frac{k}{m} & -\frac{c}{m} \\ \end{array} \right] \left[ \begin{array}{rrr} x_1 \\ x_2 \end{array} \right] + \left[ \begin{array}{rrr} 0 \\ 1 \end{array} \right] f(t)$$

この式のように変数の位置x(t)を配列としてpythonで定義すると、以下のようになります。

m = 1.0 #質量
c = 0.5 #粘性減衰
k = 1.0 #ばね定数

def func(x, t, k):
    x1,x2=x
    dxdt=[x2,-c/m*x[1]-k/m*x[0]+sin(t/2)]
    return dxdt

x0 = [0.0,0.0] # 初期条件 [x(0), dx(0)/dt]を表す.今は初速0.

t=np.linspace(0,50,100000) # 時間 0から10までを101等分する
sol=odeint(func, x0, t, args=(k,)) # 数値的に微分方程式を解き, x(t)とx'(t)をsolのリストの[:,0]、[:,1]成分へ格納する。

以上のような感じで、パラメータをいじることで自由振動、減衰振動、強制振動がそれぞれ再現出来ました。

  • 自由振動(図5) 初期x=0.0, 初期x' = 1.0, m = 1.0, c = 0.0, k = 1.0
  • 減衰振動(図6) 初期x=0.0, 初期x' = 1.0, m = 1.0, c = 0.5, k = 1.0
  • 強制振動(図7) 初期x=0.0, 初期x' = 0.0, m = 0.0, c = 0.5, k = 1.0 f(t) = sin(t/2)
  • 強制振動(図8) 初期x=0.0, 初期x' = 0.0, m = 1.0, c = 0.5, k = 1.0 f(t) = 1
図5:自由振動
図6:減衰振動
図7:強制振動
図8:強制振動

倒立振り子の運動方程式

再度掲載

台車と振り子を図に示します。 粘性摩擦係数をB、 軸の粘性摩擦係数をCとおきました。ここから、下の4つの式が立てられます。

振り子について

$$J\ddot \theta = Vlsin\theta - Hlcos \theta - C\dot \theta …(1)\\ (J=\frac{ml^2}{3})\\ m\frac{d^2}{dt^2}(x + lsin\theta)= H…(2) \\ m\frac{d^2}{dt^2}(lcos\theta)=V - mg…(3)$$

台車について

$$M \ddot x = f(t) - B \dot x - H…(4)$$

簡単のためにC = 0, B = 0とします。ここからH,Vを消去します。

$$H = m \ddot x + ml \ddot \theta sin\theta - ml (\dot \theta)^2 sin\theta…(5) \\ V = -ml \ddot \theta sin \theta - ml(\dot \theta) cos \theta +mg…(6)$$

これを(1)(4)に代入してまとめると、

$$ J\ddot \theta= -ml^2 \ddot \theta - lmcos\theta \ddot x + mglsin\theta…(7) \\ (M+m) \ddot x = -ml\ddot \theta cos\theta + ml(\dot \theta)^2 sin\theta+f(t)…(8)$$

この式からxの2階微分を消去して、Θが十分小さいとして線形化すると

$$cos\theta\approx 1,sin\theta\approx\theta, (\theta)^2 \approx 0 \\ \ddot \theta l (4M+m)-3(M+m)g \theta = -3f(t)…(9)$$

f(t)に角度と各速度についてフィードバックさせます。

$$ f(t)= L \dot \theta + K \theta\ $$

簡単のために l = 1[m], M = 2/3[kg], m = 1/3[kg]とおくと、以下のようにかけます。プログラムで解けるように一階化します。

$$ \dot \theta_1 = \theta_2 \\ \dot \theta_2 = -L \theta_2 + (g-K)\theta_1$$

一応全体の全体をラプラス変換して伝達関数の式を求めます。(せっかく導出したから書きたい。)

$$L{\theta(t)}=\Theta(s),L{f(t)}=F(s)として\\ \frac{\Theta(s)}{F(s)}=\frac{-3}{(4M+m)ls^2+3ls-3(M+m)g+K}$$

雑記

プログラミング系のサイトは最近公開されたものを見るように気をつけるようになりました。機械系や電気系の、特に理論はかなり成熟しているのでふるいサイトでも何でも読みやすくわかりやすければ良いんですが、情報系はツールがどんどん更新されていくので最新のを見ないと妙なところで躓いてしまいます。 おかげで私のPCちゃんはパスとかアプリとか訳が分からない感じになっています。情報系の特にweb系のブロガーさんは情報収集がすごいので、最新のでも誰かしら先にやっていますので安心ですね。先人は偉大です。 それと、解析力学が難しいですね。もう少し時間をかけないとわからないです。ラグランジュ難しい。制御はやって行きたいので、のんびり本を読んでいきます。
追記(2019/3/20)参考リンクをリストにしました。Amazonリンクを増やしました。

参考