Google カレンダーの自動変更 (PHP)

□ 概要
プログラム内で認証手順を行って $client 変数を作る。そのための認証情報を Google Clould Platform で作る。認証は、公開されている情報を取得するだけならば API キーで動作するが、データを作成し保存する場合は OAuth 2.0 クライアント ID が必要 (JSON ファイルをダウンロード、ユーザーが認証を行って、token を作成) (自分がユーザーの場合でも)。1回目は OAuth 同意画面も作る。Google Clould Platform のプロジェクトで Calender API を有効化する。フリーのライブラリ google-api-php-client を使う (ファイルを直接ダウンロードすれば composer は使わなくて良い)。$client から Google カレンダーの $service 変数を作る。

 


□ 予備知識

Google Clould Platform
    https://console.cloud.google.com/

    上部ボタン、新しいプロジェクト
    プロジェクト名:My Project 39176 (デフォルト)
    場所:組織なし (デフォルト)
    作成ボタン

    上部ボタン、Cloud Shell をアクティブにする

    Cloud Shell 上部、エディタを開く (戻るときは、ターミナルを開く)

    Cloud Shell 上部、さらに表示、アップロード

    Cloud Shell 上部、ウェブでプレビュー、ポート 8080 でプレビュー

    上部ボタン左、ナビゲーション メニュー、ホーム、ダッシュボード

 

・Git
    ソースコードのコピー (クローン)
    Code ボタンから HTTPS のアドレスを取得
    git clone https://github.com/googleapis/google-api-php-client.git

 


□ 参考ページ

google-api-php-client:
https://github.com/googleapis/google-api-php-client

PHP Quickstart:
https://developers.google.com/calendar/api/quickstart/php

スパイスワークス社、今井様:
https://www.spiceworks.co.jp/blog/?p=10254

REFFECT 社、SAKODA 様:
https://reffect.co.jp/php/php-google-calendar-api

PHP Google Event Examples:
https://developers.google.cn/calendar/api/v3/reference/events/insert
https://developers.google.cn/calendar/api/v3/reference/events/list
https://hotexamples.com/jp/examples/-/Google_Event/-/php-google_event-class-examples.html
https://gist.github.com/AFelipeTrujillo/fc7cf8d379ddb39e56c1

 


□ システム条件
PHP 5.6.0 以上

Cloud Shell は PHP Version => 7.2.34
Lolipop は 7.3 (選択可能)

 


□ リリースのダウンロード
google-api-php-client-[RELEASE_NAME].zip をダウンロードして、解凍する
mkdir google-api-php-client
cd google-api-php-client
unzip ../google-api-php-client--PHP7.0.zip

コードに次の行を追加する
require_once '/path/to/google-api-php-client/vendor/autoload.php';
(または、require_once 'vendor/autoload.php';)
(または、require __DIR__ . '/vendor/autoload.php';)

 


□ サンプルコード
次のコマンドで確認できる
git clone https://github.com/googleapis/google-api-php-client.git
cd google-api-php-client
php -S localhost:8080 -t examples/
Cloud Shell 上部、ウェブでプレビュー、ポート 8080 でプレビュー

 


□ 基本サンプル (link)
google-api-php-client フォルダ内に BasicExample.php を作成
コードの先頭に <?php、末尾に ?> を追加
作成した APP_KEY を使用 (下記)

APIとサービス
ライブラリ
Google Books API
有効にする

php -S localhost:8080 -t . BasicExample.php

Cloud Shell 上部、ウェブでプレビュー、ポート 8080 でプレビュー

 


□ APP_KEY の作成

上部ボタン左、ナビゲーション メニュー

APIとサービス
ライブラリ
Google Calender API
有効にする

APIとサービス
認証情報
上部ボタン、認証情報を作成
API キー
******

 


□ OAuth 2.0 クライアント ID の作成 (デスクトップ アプリ) (link)

APIとサービス
認証情報
上部ボタン、認証情報を作成
OAuth クライアント ID

アプリケーションの種類:デスクトップ アプリ
名前:デスクトップ クライアント1

クライアント ID:******
クライアント シークレット:******
JSON をダウンロード
名前を credentials.json に変更

php quickstart.php

 

 

□ QuickStart サンプルの試し方 (Google Clould Platform 環境)
https://github.com/googleworkspace/php-samples/blob/master/calendar/quickstart/quickstart.php
php quickstart.php
Open the following link in your browser と表示されるので、ブラウザで開く
OAuth 同意画面が開くので
ユーザーを選択
Continue
Continue を押して進んで行くと、最後にコードが表示される
******
Enter verification code と表示されているので、コマンドプロンプトに貼り付け
token.json が作成され、Google カレンダーデータ取得のサンプルプログラムが動作している ※ 昔の token.json がある場合は前もって削除

 

quickstart.phpAPI_KEY に書き直した場合
//if (php_sapi_name() != 'cli') { をコメントアウト
//$client = getClient(); を削除 (function getClient() も削除)
$client = new Google\Client();
$client->setApplicationName("Client_Library_Examples");
$client->setDeveloperKey("******");
$service = new Google_Service_Calendar($client); そのまま
$calendarId = 'hoge.hoge@gmail.com'; 自分のメールアドレスに変更
printf("<a href=\"%s\">%d</a> %s %s (%s)<br>\n", $event->getHtmlLink(), $cnt, $event->getDescription(), $event->getSummary(), $start);

summary と description は、credentials.json では、予定:予定なし・デフォルトの公開設定、も表示するが、API_KEY では、予定:予定あり・公開、しか表示されない

 

 

□ OAuth 2.0 クライアント ID の作成 (ウェブ アプリケーション) (link1) (link2)

機能:
ブラウザで、PHPJavaPythonRuby などのウェブページを開く
$authUrl のリンクをクリックすると、OAuth 同意画面が開く
同意が完了すると、?code=*** が付加されて戻る (リダイレクト)。code を token に変換してセッションに保存する
必要ならば一旦確認ボタンを表示して、カレンダーへ書き込みを行う

APIとサービス
認証情報
上部ボタン、認証情報を作成
OAuth クライアント ID

アプリケーションの種類:ウェブ アプリケーション
名前:ウェブ クライアント1

承認済みの JavaScript 生成元: (なし)
承認済みのリダイレクト URIhttps://hoge-hoge.com/simple-events-insert.php  ※プログラムで指定するものと同じ

クライアント ID:******
クライアント シークレット:******
JSON をダウンロード
名前を client_secret.json に変更

ブラウザで https://hoge-hoge.com/simple-events-insert.php を開く
Connect Me! をクリック
OAuth 同意画面が開くので
ユーザーを選択
Continue
Continue

 

 

□ Events: insert サンプルの試し方 (Lolipop 環境)
https://github.com/googleapis/google-api-php-client/tree/main/examples
https://developers.google.cn/calendar/api/v3/reference/events/insert
元コード: examples/simple-file-upload.php
コピーして名前を変更: simple-events-insert.php

変更①:
include_once __DIR__ . '/google-api-php-client/vendor/autoload.php';
include_once __DIR__ . '/templates/base.php';

echo pageHeader("Events: insert - Google Calendar Events Insert");

echo('Place: ' . __DIR__ . '/templates/base.php' . '<br>');
echo('Exist: ' . file_exists(__DIR__ . '/templates/base.php') . '<br>');
echo('<br>');


変更②:
$redirect_uri = 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];


変更③:
$client->addScope("https://www.googleapis.com/auth/calendar.events");
$service = new Google\Service\Calendar($client);


変更④:
if ($_SERVER['REQUEST_METHOD'] == 'POST' && $client->getAccessToken()) {
以降に Events: insert ページのサンプルコードを貼り付ける。元の file upload は削除
予定の日付は近日に変更
'visibility' => 'public', を追加。予定の設定が、予定あり、公開、になる


変更⑤:
HTML の部分は、Events: insert に合わせて、文言を変更
次のように改善 (?code=.. にリダイレクトすると FireFox では正しく動作しない)
<?php else: ?>
  <form action="<?= $redirect_uri ?>" method="POST">


追加コード: example/templates/base.php
コピーして1箇所変更: templates/base.php


変更 (base.php):
フォルダ名・ファイル名を直接記述
function getOAuthCredentialsFile()
{
  // oauth2 creds
  $oauth_creds = '/home/users/hoge/hoge/client_secret.json';

 

 

□ OAuth 同意画面

同意画面を設定
  OAuth 同意画面
  User Type:外部
  作成
アプリ登録
  アプリ名:ModifyCalendar
  ユーザー サポートメール:hoge.hoge@gmail.com
  デベロッパーの連絡先情報:hoge.hoge@gmail.com
  保存して次へ
スコープの設定
  何も設定せずに、保存して次へ
テストユーザー
  ADD USERS、自分の gmail アドレス (hoge.hoge@gmail.com)
  保存して次へ

 

 

□ ウェブ プレビューの使い方
https://cloud.google.com/shell/docs/using-web-preview
SimpleHTTPServer の例
cd `mktemp -d` \
    && echo '<html><body>Hello World</body></html>' >./index.html \
    && python -m SimpleHTTPServer 8080

cd `mktemp -d` && echo '<html><body>Hello World</body></html>' > ./index.html && python -m SimpleHTTPServer 8080

 

 

(20220228 追加コメント)
1回目
※ セッションを閉じ、ログイン情報や、クッキーをクリア後。または他のブラウザから
Connect Me!

アカウント (hoge.hoge@gmail.com) のログインと認証 (許可) (「招待元のデベロッパーを信頼できる場合のみ、続行してください。」)

Click here to insert an event

Event created


2回目
※ セッションを閉じ (ブラウザを閉じ)、ブラウザを再起動した後。またはPC再起動後
Connect Me!

Click here to insert an event

Event created

 

<< HTML から PHP に書き換え >>
<?php
echo("<div class=\"box\">\n");
if (isset($authUrl)):
  echo("<div class=\"request\">\n");
  echo("<a class='login' href='" . $authUrl . "'>Connect Me!</a>\n");
  echo("</div>\n");
elseif($_SERVER['REQUEST_METHOD'] == 'POST'):
  echo("<div class=\"shortened\">\n");
  echo("<p>Your call was successful! Check your calendar for the following link:</p>\n");
  echo("<ul>\n");
  echo("<li><a href=\"" . $event->htmlLink . "\" target=\"_blank\">Event</a></li>\n");
  echo("</ul>\n");
  echo("</div>\n");
else:
  echo("<form action=\"" . $redirect_uri . "\" method=\"POST\">\n");
  echo("<input type=\"submit\" value=\"Click here to insert an event\" /><br>\n");
  echo("<br>\n");
  echo("<!-- <a href=\"insert-by-http-request.html\">(insert by HTTP request)</a><br> -->\n");
  echo("</form>\n");
endif;
echo("</div>\n");
?>

 

 

 

GitHub ハローワールド

「ハローワールド」プロジェクトは、コンピュータプログラミングの伝統的な初心者向けの練習です。新しい技術を学ぶ際のシンプルなスタート地点となります。それでは、GitHubの使用を始めてみましょう。

GitHubは、プロジェクトの管理と協力作業のためのプラットフォームです。HDDでのデータ損失や複数のPCの管理に関する心配は不要です。どこからでもプロジェクトを同期できます。最も重要なのは、GitHubが協力的かつ非同期的な作業プロセスを通じて、より良いソフトウェアの共同開発を可能にすることです。

このガイドでは GitHubの基本について学びます:リポジトリ、ブランチ、コミット、課題、取込み要求

これらを理解するだけで、開発プロセスを進めることができます。また、「ハローワールド」リポジトリを利用して、アイデア(例:jlord/hello-world のような機能リポジトリ)、素材、その他の一般的な事項を保存したり、他の人との議論内容(例:holman/feedback のような)も記録できます。

・インストールやプログラミングは不要

このガイドは GitHub.com を使用して進めます。コマンドラインに関する知識や Git のインストールは必要ありません(GitはGitHubの基盤となるバージョン管理システムです)。プログラミングスキルも不問です。ただし、GitHubのアカウントが必要になるため、持っていない場合は事前に登録しておいてください。

注:このガイドをブラウザの別ウィンドウやタブで開いておくと、各ステップを実行しながら内容を確認することができます。

 

リポジトリの作成

リポジトリGitHubの基本的な単位であり、1つのプロジェクトを表します。リポジトリには、フォルダ、ファイル、画像など、プロジェクトに必要な要素が含まれています。リポジトリごとにREADMEやプロジェクトの説明書を作成することを推奨しています。GitHubでは、新しいリポジトリを作成する際にこれらを簡単に追加できます。ライセンスファイルなどの他の共通オプションも利用可能ですが、この説明では省略します。

・新しいリポジトリを作成する

  1. 右上にあるユーザー名の隣の「+」アイコンをクリックします
  2. リポジトリに名前を付けます
  3. 簡単な説明を入力します
  4. 「Initialize this repository with a README」を選択します

(図1)

「Create repository」ボタンをクリックすると、リポジトリが作成されます。

 

■ 課題を作成する

リポジトリにおける「課題」は、注意が必要な事項を記録する場所です。これにはバグ、機能要求、質問などが含まれます。GitHubでは、課題に対するラベル付け、検索、問題の割当て、効果的なプロジェクト管理のための工程を簡単に行うことができます。

リポジトリを作成した後、初めてであれば内容がまだ何もない状態です。何を行っているのかを他人に伝えるために、情報を記載したREADMEが役立ちます。ここでは、「課題」の作成方法を見ていきます。

・READMEの編集に関する「課題」を作成する

  1. サイドバーの「Issues」タブをクリックします
  2. 「New Issue」ボタンをクリックします
  3. 題名(例:「READMEを完成させる」)と説明を入力します

(図2)

情報を入力したら、「Submit new issue」ボタンをクリックします。これで、「課題」は作成され、閉じた後でもURLでいつでも参照可能になります。

後ほど、READMEを編集し、完成させたら、この「課題」を閉じることができます。

 

■ ブランチの作成

ブランチを使用すると、1つのリポジトリ内で複数の人が同時に作業を進めることができます。

リポジトリを作成すると、デフォルトで「master」というブランチが作成されます。このブランチだけで作業を続けることも可能ですが、新しい機能やアイデアを試したい時には、動作中の master ブランチから新しいブランチを作成できます。

ブランチを作るということは、作成時点でのオリジナルブランチのスナップショットを取ることです。新しいブランチで作業している間にオリジナルブランチに変更が加えられても、それらの更新をいつでも取り込む(pull)ことができます。

(図3)

あなたがstory.txt、story-joe-edit.txt、story-sue-edit.txtといった1つのファイルの異なるバージョンを作成した経験があるかもしれません。ブランチの目的もこれと同じですが、GitHubリポジトリ上で扱うことがより簡単です。

GitHubでは、開発者、ライター、デザイナーがバグ修正や新機能の追加のために、製品用の master(製品)ブランチとは別のブランチで作業を進めます。機能や修正が完成したら、そのブランチを master にマージします。

 ・新しいブランチを作成する

  1. hello-world リポジトリに移動します
  2. 「branch: master」と表示されているドロップダウンのファイルリストの上部をクリックします
  3. テキストボックスに新しいブランチ名「readme-edits」を入力します
  4. 青色で表示される「Create branch」を選択するか、Enterキーを押します

(図4)

これで、master と readme-edits の2つのブランチが作成されました。現時点では内容は同じですが、将来的には異なるものになります。次に、新しいブランチに変更を加えてみましょう。

 

■ コミットを行う

GitHubでは、保存された変更点をコミットと呼びます。コミットを通じてプロジェクトの歴史をたどることができるのが魅力的です。

各コミットには、なぜその変更が行われたのかを説明するコミットメッセージが付随します。これにより、誰でもそのコミットを読み解き、何が行われたのか、なぜそれが行われたのかを理解できます。

readme-edits ブランチにいくつかの変更を加えましょう。

・変更をコミットする

  1. READMEファイルをクリックします
  2. ファイルビューの右上にある鉛筆アイコンをクリックして編集モードに入ります
  3. エディターで文書を記入します
  4. 変更内容を説明するコミットメッセージを記入します

(図5)

「Commit changes」ボタンをクリックすると、変更が readme-edits ブランチのREADMEファイルに反映されます。このブランチは、master とは異なる内容になります(master は元の状態を保持)

 

■ 取込み要求を作成する

取込み要求はGitHubでの協同作業の核心です。取込み要求を通じて、変更内容を共有し、誰かにその変更を取り込んで欲しいと依頼します。つまり、その変更を他のブランチにマージするよう求めます。GitHubの取込み要求機能により、2つのブランチ間の内容を比較し、変更点、追加点、削除点を「diffs(差異)」として緑色と赤色で表示できます。

変更を加えた直後に取込み要求を作成できます。コードが完全には完成していなくても、取込み要求を利用してコミットについて議論することができます(コードレビュー)。これにより、進行に必要なフィードバックや行き詰まりを解消するためのアドバイスを得ることができます。

取込み要求メッセージ内で、GitHubの @mention システムを使用して特定の人やチームにフィードバックを求めることができます。他の階に居たり、10区画離れた場所に居ても構いません。

自分自身のリポジトリに対して取込み要求を行い、自分でそれをマージすることも可能です。これは、大規模なプロジェクトに取り組む前に、手順を習得するのに良い方法です。

・README に行った変更の取込み要求を作成する

  1. サイドバーの「Pull Request」アイコンをクリックします。Pull Requestページから、緑色の「New pull request」ボタンをクリックします(図6)
  2. master(オリジナル)と比較するために、作成したブランチ readme-edits を選択します(図7)
  3. Compareページの「diffs」で変更を表示し、登録したい変更に間違いがないか確認します(図8)
  4. 間違いがなければ、大きな緑色の「Create Pull Request」ボタンをクリックします(図9)
  5. 取込み要求にタイトルを記入し、変更の簡単な説明を加えます。既存の課題に直接関連する場合は、「fixes #」と課題番号を題名に含めます(図10)

メッセージを記入し終わったら、「Create pull request」をクリックします。 

注: コメントや取込み要求に絵文字を加えたり、写真やGIFをドラッグアンドドロップで追加することもできます。 

 

■ 取込み要求をマージする

これにより、2つのブランチの変更を統合します。すなわち、readme-edits ブランチをmaster ブランチにマージします。

  1. 変更をmasterにマージするには、「Merge pull request」の緑色のボタンをクリックします
  2. 「Confirm merge」をクリックします
  3. 変更が統合されたので、紫色の「Delete branch」ボタンをクリックしてブランチを削除します 

(図11)

(図12)

以前作成した「課題」は「closed」と表示されるはずです。「fixes #1」という記述が取込み要求のタイトルに含まれている場合、GitHubはその取込み要求がマージされると課題を自動的に閉じます。

 

■ 賛辞

GitHubで取込み要求を作成する方法を学びました。

このガイドを通して、以下のステップを実行しました:リポジトリの作成、ブランチ、課題、取込み要求、そして、取込み要求のマージ

あなたの新しい貢献を誇りに思ってください。

取込み要求の機能についてさらに学びたい場合は、GitHubの作業フローガイドをお勧めします。また、GitHubの探索ページやオープンソースプロジェクトへの参加も検討してみてください。

注: GitHubの使用方法については、他にもガイドやYouTubeチャンネルがあります

 

■ ツールの紹介

GitLab:GitHub をオンプレミスで構築する
ATLASSIAN Sourcetree: Git の GUI ツール
VMware ESXi:複数の OS を同じ物理サーバー上で実行
Redmine:タスク管理、ガントチャートWiki


コンソールデバッグ

Python, Pdb

デバッグしたい部分に次の行を追加
import pdb; pdb.set_trace()
または, python -m pdb test.py

(Pdb) b 123 … ブレークポイントの設定

(Pbd) b 123, number > 500 … 条件付きブレークポイント

(Pdb) b … ブレークポイントの一覧

(Pdb) cl 123 … ブレークポイントの解除

(Pdb) c … コンティニュー

(Pdb) n … ステップオーバー

(Pdb) s … ステップイン

(Pdb) p value … 変数表示

(Pdb) l … 周辺のソースコード表示

(Pdb) q … 終了

 

GDB

gdb test

(gdb) run arg1 arg2

(gdb) b 123 … ブレークポイントの設定

(gdb) b 123 if number > 500 … 条件付きブレークポイント

(gdb) i b … ブレークポイントの一覧

(gdb) d 123 … ブレークポイントの解除

(gdb) c … コンティニュー

(gdb) n … ステップオーバー

(gdb) s … ステップイン

(gdb) p value … 変数表示

(gdb) [Ctrl]+x, 1 … TUI モード (周辺のソースコード表示)

(gdb) [Ctrl]+a … TUI モード解除

(gdb) q … 終了

gcc デバッグ用ビルド
CFLAGS = “-g3 -O0″ ※ -s は削除する

  

 

ECU 適合の基礎

[自動車向けの基本用語]

適合変数、 測定変数 (パラメータ、ASAM ラベル)

  特性値 (Value)

  カーブ (Curve)

  マップ (Map)

  測定変数は、カーブ、マップにおいてでも、配列要素 1 個でアクセスする

実験画面

  ワーキングページ (WP)

  リファレンスページ (RP)

プロセスポイント

  ECU に設定される現在値

ラスタ

  変数の測定周期を定義。A2Lファイル内で定義

ファイル

  a2l ファイル: ECU プログラムや個々の変数について
    - データ構造体
    - アドレス範囲
    - メモリサイズ
    - 各測定変数と適合変数のアドレス、名前、データ型、変換メソッドなど

  hex ファイル (Intel)、s19 ファイル (Motolora)
    コードとデータを含む ECU プログラムが格納されている。このファイルを ECU にダウンロードすれば、ECU を稼動することができる。

ASAP2 (ECU内部変数の記述形式)

ASAP3(外部からコントロールするためのインターフェイス

ASAM XIL v2.1.0

 

 

MATLAB mファイル

Excel ファイル読み書き

FileName = ‘sample.xlsx’;
PathName = ”;
FullPathFileName = strcat(PathName, FileName);
[num, txt, raw] = xlsread(FullPathFileName);
[m, n] = size(raw);
label_readData = raw(1,:);
unit_readData = raw(2,:);
firstColumn_readData = raw(3:m,1);

xlswrite(FullPathFileName_w, Map);
行列 Map を、最初のワークシート、最初のワークブックの、A1 に書き込む
入力は、二次元の数値行列、文字列行列、または、単一要素を持ったセル行列

 

■ 配列

(行, 列) の順

上記で Excel から読み込んだ raw データはセル配列(cell array)

() でアクセスすると部分配列を取出す(配列のインデックス)
要素を取出す場合は {} でアクセスする(セル配列の要素の取出し、セル配列の作成もこれで)
[] は行列の作成や結合、行または列の削除

; は行の区切り(列要素の区切り)。, は行要素の区切り

num2cell ?

yaxis = SomeCells{1,1}{1,2} は、要素{1,1}の配列の、要素{1,2} の配列 ?

Map_temp = [yaxis, MapValue] は横方向結合

inputNames = get…;
outputNames = get…;
inputNames = transpose(inputNames);
outputNames = transpose(outputNames);
header = [inputNames, outputNames];
datacell = num2cell(resultValue);
datatable = [header; datacell];

 

■ 制御フロー

if strcmp(name1, name2)
fnd = j;
elseif strcmp(name1, ‘finish’);
fnd = 99;
else
fnd = -1;
end

for i = 1:m
end

switch name
case
otherwise
end

while index <= m
end

 

■ 機能

disp

fprintf

uigetfile

h=msgbox(‘OKを押してください’, ‘操作確認’);
uiwait(h);

h=figure();
plot(Residual{1,2}, ‘ro’);
title(‘誤差’);
xlabel(‘計測点’);
ylabel(‘誤差’);

transpose

repmat

scatter3

 

電気自動車の HILS モデル

ROBOMECH Journal

A signal hardware-in-the-loop model for electric vehicles

 

■ 概要

■ 背景

■ HILS (Hardware-In-The-Loop Simulation)

 

■ 自動車モデル(動的、運動学的)

【 運動学モデル 】
vx = ax + r vy
vy = -ay + r vx
a は車の重心の加速度、v は速度、r はヨーレート

【 力学モデル 】

Fi はタイヤの摩擦力

Fair は空気抵抗力
cw は空気抵抗係数、A は車の前面投影面積、p は空気密度

前後方向と左右方向の力の等式は次の式で表される

垂直方向を軸にしたトルクの等式は次の式で表される
bf と br は前と後の車幅、lf とlr は車の重心からの前と後の車輪軸までの距離、d は車輪のハンドル角度、m は車両重量、Jz は垂直方向を軸にした車両の慣性モーメント(=イナーシャ

【 タイヤモデル 】

タイヤの前後方向にかかる力は次の式で表される。
Fx
li は滑り率、Sh と Sv は係数 b を使った関数の値、Fz は車輪の垂直方向にかかる力

タイヤの左右方向にかかる力は次の式で表される。
Fy

 

■ ドライブトレインモデル

Drivetrain of a vehicle is series of component that dispatches power to driving wheels.
In internal combustion engine vehicles (ICEV), the main parts of drivetrain may include traction engine, clutch, transmission with gear, shafts and wheels.
自動車のドライブトレインとは、動力を車輪に伝える一連の部品です。
内燃エンジン自動車において、ドライブトレインの主な部品は、エンジン、クラッチ、ギアを含むトランスミッション、シャフト、車輪です。

 

■ ハードウェア・システム設計

■ 実験結果

■ 結論

■ 謝辞

■ 参考文献

DC モーター制御

https://www.mathworks.com/help/control/examples/dc-motor-control.html

本文では、目標値への追従と、負荷変動への感度を低減するための、DC モーター制御について、3種類の方法を比較します。

フィードフォワード命令
積分フィードバック制御
・LQR 定常化

DC モーターモデルの詳細については、「ゲッティングスターテッド:モデル作成」を参照してください。

 

■ 課題

電機子制御の DC モーターは、供給電圧 Va が、シャフトの角速度 w を制御します。

f:id:sato-7411:20200624104510p:plainInertial Load:慣性負荷

本文では、負荷変動(反対側のモーター負荷によるトルクの変化)による w の感度を低減するために、2個の DC モーターを制御する方法を示します。

f:id:sato-7411:20200624104545p:plainArmature:電機子、Vemf:起電力

DC モーターの簡易モデルを上図に示します。トルク Td は負荷変動を表します。このような変動によって引き起こされる速度の変化を最小限に抑えなければなりません。

例えば、物理特性は以下とします。

R = 2.0; % Ohms
L = 0.5; % Henrys
Km = 0.1; % torque constant
Kb = 0.1; % back emf constant
Kf = 0.2; % Nms  ニュートンメートル秒
J = 0.02; % kg.m^2/s^2

最初に、2入力(Va、Td)と1出力(w)の DC モーターの状態空間モデルを作ります。

h1 = tf(Km,[L R]); % armature  tf:伝達関数モデル作成(TF オブジェクト)
h2 = tf(1,[J Kf]); % eqn of motion  運動の等価式

dcm = ss(h2) * [h1 , 1]; % w = h2 * (h1*Va + Td)  ss:状態空間モデル作成(ss モデルオブジェクト)
dcm = feedback(dcm,Kb,1,1); % close back emf loop  feedback:モデルオブジェクトを作成、arg1:状態空間プラントモデル P、arg2:状態空間フィードバックコントローラー K、sys = feedback(sys1,sys2,feedin,feedout)  feedin:sys1 の入力ベクトル(u, v, …)、feedout:sys1 の出力ベクトル(y, z, …)

注:モデルの次数を最小にするために状態方程式で計算します

電圧 Va で、ステップ入力についての、角速度応答を図示します。
図中で、マウス右クリックし、「特性:整定時間」を選べば、整定時間を表示できます。