"Assetto Corsa EVO" が発表になった。

テクスチャがかなり綺麗になったし、いい感じ。

今のMOD環境もある程度使えるって事らしいけど Content ManagerやAssettoServerの対応など 諸々待って状況判断かな。

"Pure"導入しようか迷ってたから 一先ずワクワクしながら新しい情報を待つことにしようwww
"Assetto Corsa EVO" が発表になった。

テクスチャがかなり綺麗になったし、いい感じ。

今のMOD環境もある程度使えるって事らしいけど Content ManagerやAssettoServerの対応など 諸々待って状況判断かな。

"Pure"導入しようか迷ってたから 一先ずワクワクしながら新しい情報を待つことにしようwww
最近記事を書いてないので備忘録な感じです。
過去の記事にて テレポート (Teleport) 導入に関して記載しましたが.... ttl0x77.hatenablog.com
公式から提供されている位置以外に自分で好きな場所を追加したい。 SRP以外のコースにてテレポート位置情報が無い場合に 自分で設定したいって思いますよね???? ※ 特にSRP(首都高)などエリアが広いので、各PA,SAや湾岸線などなど
"Overtake" にてテレポート用のすばらしいアプリが展開されてますので まずは導入しておいてください。
【重要】 この記事はサーバーを立てている(管理出来る)人向けです。 一般ユーザーでは位置追加を行う事は出来ません。
テレポートしたい位置まで、頑張って走行する。
車両は完全停止(停車)する

"comfy map"の設定をクリック。 画面右のMenuウィンドウから
"Teleport Config helper"を選択する

4."テレポート"画面上にある "save point"をクリック

登録されたことを確認
先の操作を行った事で、自車位置にポイントが追加された事を確認する。
"count"が 1になっていれば位置情報が保持されたはず

必要に応じて項目2から繰り返す
位置情報が保存される
"config save"をクリックする事で、"save point"情報がファイル保存されます。



point Noやグループ名などは必要であればわかりやすい数字や名称を設定すればOKです。 特に設定しなくても大丈夫な気がする...
かなり以前からMT欲しかったけど... Assetto Corsa をやりすぎた為、MT車が欲しくなった。
※SIM上にてMT車走らせるだけでも、かなり楽しいので良かったのだが...以下のきっかけがあったので...
ダイハツ Rocky (AT、HEV)を発注していたのだが、不正の規模が大きくなり、 注文キャンセルとなってしまった。 ※現在Rockyのガソリン車は販売再開となったがHEVは再開されるのか...
受注キャンセルを受け、ひそかに目論んでいた"エンジン車"かつ"マニュアル車"を購入するチャンス到来。 速攻でエンジン車の優位性やMTに乗る理由などをまとめ、ドキュメントを提出。
エンジン車の優位性までは良かったが... "MT"という所で一旦差し止めが入ったが、 プレゼンの結果、ひとまずOKが出たww
新車販売されている車両で"エンジン"かつ"MT"であると必然的にスポーツカー若しくは オフロード車などになる為、中古から選定。 Webから色々情報を集め、再度プレゼン。
購入ターゲットとした車両を Assetto Corsaへ導入し、 首都高や大阪環状、教習所などのコースを走りまわり、雰囲気確認。 凄く楽しい。(SIM上の話だが...) 2,3速で回すといい感じである事が確認できたwww
近場で実車確認が出来る店舗をピックアップ。 実車確認しOKとなったので、速攻契約。
店舗引き渡しであった為、メチャメチャ久しぶりにMT車を運転し帰宅。 楽しいけど、クラッチミート位置など探り探りで運転していた感じ。
※クラッチなどは実車とSIMでは違うので実車合わせは必要(当然だが...)
※シフトレバーなどSIMでは自分のポジションに合わせて変更可能だが、実車では位置を変えられないので慣れが必要。
今時の車は"Drive by Wire"(電子制御スロットル)となっている為、不意に干渉(回転数上がるなど)される場合が あるので慣れが必要な感じだが、やっぱMTは楽しい。
ちょっとした傾斜でも下がったり、進んだりするため、 今まで気づかなかったポイントも若干傾斜がある事を再認識できたww
操作は少し増えたけど、運転する楽しさは激増したので良しとする。 色々とメンテナンスを行う必要がある箇所が多々あるが、ちゃんと整備しながら乗っていこうと思う。
※Version 0.0.55 も pre13 まで進んでいるのでそろそろReleaseされる感じもあるが...
git hub の情報を見てみる
0.0.53からの大きく変わった点はない感じ

New parameter "WrongWayTraffic" , "PlayerChecksumTimeoutSeconds"が追加になっている。
Version 0.0.53 , 0.0.54 を単純に展開し、cfgフォルダ内 extra_cfg.yml の中身がどのように 変わっているか一応チェック。
diff コマンドを叩いて...

Version 0.0.53 では CSP 0.1.80+で動作していたが、 Version 0.0.54 では CSP 0.2.0+ でないと動作しない項目があるって事と、 二つのパラメータが追加になっている事が確認できた。
Maximum time the server will wait for a checksum response before disconnecting the player (サーバーがプレーヤーを切断するまでにチェックサム応答を待機する最大時間)
Enable traffic spawning if the player is driving the wrong way. Only takes effect when TwoWayTraffic is set to false. (プレーヤーが間違った方向に運転している場合、交通の生成を有効にします。 TwoWayTraffic が false に設定されている場合にのみ有効)
現状動作しているVersion0.0.53 の環境をベースに 0.0.54 へ移行し 上記2つのパラメータを追記するだけで動きそう
※CSPのVersionは適宜上げた方が良い感じである (0.2.0 以上) ※色々なパラメータを変更しているので、流用できる事は正義。
Raspberry Piにて動作させているので、 "assetto-server-linux-arm64.tar.gz"をダウンロード

ダウンロードを行った "tar.gz"をServerへ転送
解凍を行うフォルダを新規作成するなど準備を行い、解凍を行う。
Content Managerにて"Pack"したServerデータを解凍。
./Assettoserver
cfgフォルダ内に"extra_cfg.yml"が作成される。
こんな感じで何とかなると思われる
近々、SRPなどのトラックデータを用いて実験的に構築し動作確認してみよう。
比較的早い頻度でVersion Upされている気がするwww ※既に 0.0.55 開発中...
現在 Raspberry Pi にて AssettoServer Version0.0.51 を用いて SRP、大阪環状など4コースを運用しているが同時参加台数が少ないため、 負荷が軽い事からトラブルなく動作しているwww
近頃、MFゴーストなるものが流行っているようであり、 小田原トラックを Version 0.0.53にて動かしてみる。
自分の過去記事読みながら、再度セットアップを実施 www
過去記事参照の事。
Version 0.0.51から追加された設定項目が少し存在していたので 設定ファイルの使いまわしはやめておいた方が良いと思われる。
※AI Traffic の走行用パラメータなど追加になっているような気がする(override設定)
Version 0.0.53 を動作させ、様子を見ているが、現状特に問題ないっぽい。
他のトラック用のServerも "0.0.53"へ移行する事とする。
何事も放置していると忘れる事を痛感。
Serverへアクセスするためのアカウント情報すら忘れている始末www
※しばらく悩んだ...
※入れてよかったwww
首都高や大阪環状など、複数のトラックを同時に運用したい欲求が出てくる。 今回は同時運用するための備忘録である。
Content ManagerにてServer設定ファイル出力に関しては別の記事を参照頂くとして、 サーバーを公開する為には外部から見えるようにする必要がある。
Content ManagerにてServer情報を設定する画面の右側にポート設定がある。

UDP、TCP、HTTP のポート番号を変更する事で1台のServerにて複数のTrackを動作させることが可能となる。

"server_cfg.ini"ファイル内に通信用ポート設定が記述されている。
※ファイルは cfgフォルダ内にあるはず
例えば以下のように設定する事で同時起動が可能となる。
UDP_PORT=9600 TCP_PORT=9600 HTTP_PORT=8081
UDP_PORT=9601 TCP_PORT=9601 HTTP_PORT=8082
RaspberryPiにて4トラック同時に動作させてますが、 参加人数が少なければ負荷も低いので問題なく動作しています。
本当はポート番号変更しちゃダメなのかは不明www たまたまやってみたら普通に動いたので動作が不安定となっても 自己責任でお願いします。
Buffalo製 32GB 安い www
UbuntuやKaliなどをUSB Bootにて使用する目的で購入。
まずは CrystalDisk でベンチマークとってみる。 Mainで使用しているデスクトップではなく、 ちょっと古い NotePC にてベンチとったので、参考程度に見てください。
1st

2nd

早くもないけど... 遅くもない... うぅぅん若干遅いか...
けど、まぁ いいかぁって感じ。
で、 いつも通り Rufus を使って早速ブート用に仕立ててみた....
正常にイメージ作成は出来たのだが.... BootメニューにUSBメモリが表示されない.... (なぜ??
サブのノートPCでもBootしない...
これはもしかして... Boot出来ない USBメモリかもwww
というわけで、まずはググって以下の記事を参考にやってみた。
何回か色々と試してみたが... 結果は予想通り、Bootしなかった www
同様の方法にて手元にあるUSBメモリではBoot出来たので、 今回購入したUSBメモリがBoot不可という事で間違いない。(と思う
まぁ今回は通常のUSBメモリとして使用すれば良いという事でwww
Boot用に使用するUSBメモリは過去実績があるものを購入する事にしよう。
久々にBoot時に認識しない USBメモリ購入した話でした。
ネタが無いので、いまさらながら blog に書いてみる。
私の環境ではRaspberryPiを用いて複数のAssettoServerを稼働させている。
都度メンテナンスを行うために停止/起動の作業が発生する為、 tmux上にて運用してます。
合計6セッションを同時に動作させてますが、快適に動作してます。
ターミナルマルチプレクサです。 使用する事でターミナルを終了してもセッションが維持される便利機能。
Serverなどリモートにて動作させている環境において SSH接続し、フツーにアプリ起動させた場合、SSHを切ると アプリも終了しちゃいます。
OSのアップデートやアップグレード、ソフトウェアのビルドなど 処理に時間がかかる場合などSSHを切断しても動作継続してほしい場合に使用します。
裏で動いているので、再度SSHなどにて接続する事で継続して作業を行う事が可能となる。
Server起動時にサービスにて自動実行するのも良いのですが、 都度実行するソフトウェアの場合、サービスに組込むのは難しいので ちょっと実行したいけど、SSHなどを接続し続けるのはちょっとという場合に使用します。
しれっと既にインストールされている可能性もあるので、 コンソールからコマンドを叩いてみる
tmux -V tmux 3.3a
上記のようにtmuxのVersionが表示されればインストール済み。 "tmuxってコマンド存在しないよ"ってerrorが表示された場合は 別途インストールを行う必要あり。
環境に応じてinstall方法は変わるので 公式サイトを確認しインストールする。
linux アップデート作業を例とします。
tmux
sudo apt update -y
tmux a
exit
と入力しエンターを押す事で終了となる"tmux"にてネット検索すると山ほど情報が出てくるので、そちらを参照。 杜甫々さんのpageが分かりやすい。(有難う御座います)
コマンドは最低限以下の項目が分かれば十分です。 * 起動 / 終了 * 中断 / 復帰 * セッション名変更 * セッション移動
どこからでもメンテが出来るので非常に便利。 おためしあれ。
AsettoServer にてオンラインサーバーを運用している時、 誰がコネクトしているのか知りたい。誰かが走っているなら、追走したい。 という欲求から AssettoServerへコネクト(Connect) / ディスコネクト(Disconnect)している情報を Discordへ通知出来れば便利だよねって事で実現を目指す。
オンライン参加者が Chat を行うと、内容を Discord へ通知する仕立ては 導入済みだけど、一人で参加している時にわざわざchatは打たない。
自動で Connect / Disconnect が分かると皆うれしい(はず
※個人練習している時はバレたくないが....
AssettoServerのプラグインにて"DiscordAuditPlugin"がある。 オンラインにてChatした内容がDiscordへ送られるプラグイン。 これがあるなら...Connect/DisconetもDiscordへ送ってくれればよいのに...
Discord側にて Webhook を事前に準備する必要あり。
Webhookの準備が出来れば、あとは送るだけ。 AssettoServerに限らず、Webhookのurlが分かっていれば どこからでもDiscordに対してメッセージ送信が可能となる。
AssettoServerが出力するログをトリガーにてwebhookする方法も考えたが、 AssettoServerが吐くログファイルはタイムスタンプが付加されているので 最新のファイルを検索処理も作る必要がある。
だが、そこまでして通知を実装する気なし!!
git hub を漁ったところ... iiferedon さんが作ってた!!
一先ず、ありがたくダウンロードさせて頂き導入してみた。
設定は簡単に終了。以下の2点だけで完了 * Discord webhook URL 設定 * AssettoServerのURL、port番号設定
Pythonで書かれているので、Pythonで実行するだけ...
AssettoServer Onlineへconnectしてみると...
おぉぉ。connect情報がDiscordへ送信されている!!!
ぢゃぁ、Disconnect!!
ん?? Errorが出て止まってる??
ちょいと調査が必要
そもそもAssettoServerを動作させると、Content Managerなどオンライン情報表示を行うため、 jsonにて現在のサーバー接続状況を取得可能となっている。 ※ウェブブラウザを使用すると簡単に見る事が可能。
という流れぽい。
"Disconnect"の情報までは検知しているが、Webhookするためのデータ作成処理においてエラーが発生。
エラーの状況から"Null"参照しているっぽいけど... どのタイミングで発生しているのかわかりづらい... "Python"ってデバッグしづらい... (Pythonに限ったことではないが...)
※"pdb"というpythonデバッガが存在している事は後で知る事になる。
※"pdb"は便利!! これが無いと python デバッグ無理!!
デバッグすれば済む事なのだが、以下の点が気になる。 * jsonデータをローカルファイルへ保存 * AssettoServerに誰かがログインしている状態にて python を動かすとエラー出る。
だったら勉強がてら自分で組むことにする
Python , jsonともに素人の私がググって調べると時間がかかるので、 "ChatGPT"へお伺いする。
※ChatGPTの回答内容は自粛
Pythonを使用しWebページからjsonデータを取得しjsonデータの内容に変化があるか確認を行うためのサンプルコードを教えてほしい
ChatGPT : 再帰的なアプローチを使用してJSONデータを探索し、差分を検出する方法を採用しています。
で、サンプルコードが吐かれる... ふむふむ。 さすがPython!! コード量が少なくて見やすいwww
追加質問
get_json_dataにて取得したjsonデータにてどの部分が変更になったか確認したい
あぁ、なるほどねぇwww
雰囲気はわかったのであとは実装!! (ほんとうはわかってない
※ iiferedonさんのPythonではユーザー名、使用車両、スキン名などもWebhookされるが Connect情報が重要なので、他の項目は捨てる。 webhookしている部分は参考にする。(ありがたい)
ついでにwebhook関係をググってみる www
※最重要な事は 動けば良い をコンセプトとする。
get_jsonする事で簡単にjsonデータ取得が行える。便利だねぇ。
current_data= get_json_data(url)
新旧jsonデータを保持するために2つバッファを用意 * current_data * previous_data
起動時に"previous_data"へ一発jsonを読ませる。 最新データを"current_data"へ読み込み 二つのデータに差異があるか確認すれば全てOK
ChatGPTさんに教えてもらったサンプルコードをcopy して2つのjsonデータ比較を行う。
def get_json_data(url): try: response = requests.get(url) if response.status_code == 200: return response.json() else: print(f"Failed to fetch data from {url}. Status code: {response.status_code}") return None except requests.exceptions.RequestException as e: print(f"An error occurred while fetching data: {e}") return None def compare_json_data(data1, data2, path=""): if isinstance(data1, dict) and isinstance(data2, dict): for key in data2.keys(): if key not in data1: print(f"Key '{key}' added at path: {path}/{key}") else: compare_json_data(data1[key], data2[key], f"{path}/{key}") for key in data1.keys(): if key not in data2: print(f"Key '{key}' removed from path: {path}/{key}") elif isinstance(data1, list) and isinstance(data2, list): for i in range(min(len(data1), len(data2))): compare_json_data(data1[i], data2[i], f"{path}/{i}") if len(data1) > len(data2): for i in range(len(data2), len(data1)): print(f"Item '{data1[i]}' removed from path: {path}/{i}") elif len(data1) < len(data2): for i in range(len(data1), len(data2)): print(f"Item '{data2[i]}' added at path: {path}/{i}") (続くけど...)
上記の場合 "data1"と"data2"を使用しているので
if data1 != data2:
とするだけで比較完了!! なんて簡単な!!
後は条件をダラダラを書いて、Webhookを書けば終了。
ログインしているユーザーは"DriverName"というキー名にて管理されている。 結果が保持されている"path"中に "DriverName"が含まれているか確認
出来上がったコードは以下の通り。
import requests import json from urllib.request import urlopen, Request import time import os import sys import colorama from colorama import Fore from discord_webhook import DiscordWebhook, DiscordEmbed #Change these values webhook = DiscordWebhook(url="DiscordWebHookURL") server_address = "localhost:8081" def get_json_data(url): try: response = requests.get(url) if response.status_code == 200: return response.json() else: print(f"Failed to fetch data from {url}. Status code: {response.status_code}") return None except requests.exceptions.RequestException as e: print(f"An error occurred while fetching data: {e}") return None def send_webhook(title, player, colour): embed = DiscordEmbed(title=title, color=colour) embed.set_timestamp() embed.add_embed_field(name='User Name :', value=player) webhook.add_embed(embed) response = webhook.execute() return None def compare_json_data(data1, data2, path=""): if isinstance(data1, dict) and isinstance(data2, dict): for key in data2.keys(): if key not in data1: print(f"Key '{key}' added at path: {path}/{key}") else: compare_json_data(data1[key], data2[key], f"{path}/{key}") for key in data1.keys(): if key not in data2: print(f"Key '{key}' removed from path: {path}/{key}") elif isinstance(data1, list) and isinstance(data2, list): for i in range(min(len(data1), len(data2))): compare_json_data(data1[i], data2[i], f"{path}/{i}") if len(data1) > len(data2): for i in range(len(data2), len(data1)): print(f"Item '{data1[i]}' removed from path: {path}/{i}") elif len(data1) < len(data2): for i in range(len(data1), len(data2)): print(f"Item '{data2[i]}' added at path: {path}/{i}") else: if data1 != data2: if path.find('DriverName') > 0: #Send Discord Messages if data1 == None: title = "SRP Connected" color=5763719 usr = data2 else: title = "SRP DisConnected" color=15548997 usr = data1 print(f"Path: {title}") print(f"{usr}") send_webhook(title,usr,color) if __name__ == "__main__": # Specify the URL of the web page you want to check for changes url = "http://"+server_address+"/JSON%7C" # first fetch previous_data = get_json_data(url) if not previous_data: exit() while True: # Get data every 10 seconds and check the change time.sleep(10) current_data = get_json_data(url) if current_data: compare_json_data(previous_data, current_data) previous_data = current_data else: print("Failed to Get Data")
webからjson情報を取得し実行するため、AssettoServer動作中のPC以外からも実行可能である。 まずはAssettoServerが動作している端末にてpythonを実行し通知を行う事とする。
Connect / Disconnectを行い、以下のような通知が来ればOK.

オンラインにて走行していると路面やヘッドライトの照射がおかしい事に気づく。
AIなどにて使用する車両情報も今まで通り設定しているのに、走行してない車両が何種類かある...
"mod"環境が壊れた可能性もあるので、 いつもの事のように、"Assetto Corsa"側の問題と思い 再インストールなどを実施したが症状変わらず。
公式ページを再確認....
"Support for CSP handshakes (does not work yet, release version of CSP 0.1.80 required)"
もしかするとこの機能などが邪魔しているのかも???
設定項目が存在しているのかもしれないが、現時点では未確認。 ※エディタ開くだけなのに面倒がる...

一先ずCustom Shaders Patch 公式ページを確認
Patronしてないと "0.1.80"は落とせない... ※2023/08/01現在

真因は不明だが、現状では AssettoServer Version 0.0.51 を使用したほうが安定動作する
※ 公式マニュアルを見ればすぐに分かる事だったが、そこにたどり着くまでが長かったので備忘録。
※ 公式ページも説明がざっくりなのよね...
※ FAQページなんてトラブった時しか読まんし...なぜFAQ???
※そもそも"AssettoServer"に関するドキュメントを探すのは非常に大変...サーバ立ててる人ってかなり限定的なのかも???
通常オンラインサーバへ入ると決まったPIT(PA)からスタートします。
辰巳PAなどからスタートした場合、大黒あたりまで走るのにはそれなりに時間がかかる...
大クラッシュなどの場合、スタート時点のPIT(PA)へ戻ります。
複数人で"追いかけっこ"していてクラッシュ -> PITへ戻ると追いかけるのが大変... 皆で一斉にPitへ戻ったりして...
そんな時に"テレポート機能"を使用する事でトラック上、 任意の場所へテレポートするので移動がめっちゃ楽ちんになります。
基本的には公式サイトに全て記載されてます。(英語
使用しているAssettoServerのVersionによっては動きが違う可能性もありますので、公式サイトを一度は確認してください

テレポートに関する記述は "Frequently Asked Question"ページ内、"How do I enable Teleportation?"項目に記載されてます。
やる事は以下の2点。 エディタとContent Managerがあればサクッと完了します。(基本的には
サンプルにて展開されているテレポート位置情報だけだと若干足りない部分もあるのですが、一度動かしてしまえば、あとから追加するだけなので手間はないはず。
"Custom Shaders Patch"の拡張機能となる為、新規にて"csp_extra_options.ini"を作成します。
※ "公式もしくは自分で作ってね" との事なので 公式データ をまずは使用します。


エディタ (メモ帳など)を開いてペーストする

"csp_extra_options.ini"という名称にて保存(save)

準備完了
オンラインサーバを立てる際に基本情報を"Content Manager" (CM)を用いて設定しているはず。
"Main Tab"を開きます
ウィンドウ右下あたりにある"Require CSP to Join"へチェックが入っている事を確認。チェックが入ってない場合はチェックする
"Auto-fill"ボタンをクリック

Car Entry List を開きます。

"entry_list.ini"をエディタで開くと、テレポートを有効化した車両情報のスキン指定へ "/ADAn"が追加されているので、Content Managerを使用せずエディタでゴニョゴニョしたほうが手っ取り早いかも...

これでオンラインサーバ側の準備は完了
ここからはオンライン参加者側の操作となります。 * "Chat"ウィンドウを開く* * ウィンドウ下部にある"電球"アイコンをクリック * "Teleport to..." Menuをクリック * テレポート先一覧が表示される * テレポート先を選択 * "Teleport"をクリック -> Teleport !!

※一瞬にて移動出来るので非常に便利
※公式位置情報の一部には奈落へ落ちる場合あり(落ちない場合もある
"RaceDepartment" にてテレポート用のすばらしいアプリが展開されてます。
2024.06.11 追記
RaceDepartmentからOvertakeになったので、リンク張り直し
地図上にて拡大/縮小が行えるほか自車位置などの表示も行う感じです。 テレポート先がドット表示されているので、ドットをクリックする事でテレポートが行われます。
ほんとに素晴らしい。
最近AssettoCorsaをはじめたばかりですが、非常に面白い。 有用なskinやmod、Appなどを色々な人が作成し展開して頂き、遊ばせて頂いているので 私なりの備忘録ですが、ちょこっとでも参考になれば幸いです。
前回までのblogにてサーバー起動確認までは行えたはずですが、まだAI車両などは走ってないですよね。
今回はそのあたりの設定を行います。
AssettoServer公式ページにも色々記載がありますので参照ください。
Linuxに慣れている人たちは直接RaspberryPi側のファイル変更を行ってOKですが、"vi"や"nano"などのエディタに不慣れな人はなかなか難しいですよね。
今まではWindows側からRaspberryPi側へのファイル転送を行ってましたが、RaspberryPi側のファイルをWindows側へ転送出来れば便利ですよね。
"ファイル(F)"メニュー中の "SSH SCP..."をクリック

以下のウィンドウが開きます。
上側: Windows -> RaspberyPiへの転送 (send : 送信)
下側:RaspberryPi -> Windows への転送 (Receive : 受信)

"From:"へ転送を行う”Path + file名"を記入します。
今回はAIを走らせるための設定を行うため"extra_cfg.yml"を転送する事とします。
ファイルまでのパスは"/home/<user名>/ACS/SRP/cfg"ですので、"From"欄へ以下の様に記述します。
"/home/<user名>/ACS/SRP/cfg/extra_cfg.yml"
※おさらいですが <user名>は自身のユーザー名へ置き換えてください
何処へ転送するかを"To:"欄へ記入します。"..."をクリックする事で選択できますので分かりやすい場所を指定

"Receive"をクリック
正常に転送完了の場合、何もメッセージなど表示されません。
エラー時のみメッセージが表示されますのでエラー時はパスやファイル名など確認し再度実行します。
正常に受信できていれば指定フォルダへファイルが存在しているはずです。

この方法を使用する事でTeraTermにてSSH接続している環境であれば、容易にファイル転送が行えますので他の環境でも便利に使用出来るはず。
extra_cfg.ymlファイルをエディタ(メモ帳でもok)で開きます。
"EnableAi:"の項目を探します。
false を trueへ書き換えます。
ファイルを保存(save)しエディタを閉じます。
ファイルをSSH通信を行っているTeraTermへドラッグアンドドロップします。(おさらい

いつもの画面が表示されますのでcfgフォルダまでのパスを記入します。
/home/<user名>/ACS/SRP/cfg <リターン>
"OK"をクリックする事でファイル転送が実行されます。

この様に、RaspberryPi側とWindows側にてファイル転送が行えますので各種設定を行い、Assetto Coras Onlineを楽しみましょう。
AI車両設定は奥が深いです。
日々調整しながら最適値を模索中。
次回 "テレポート設定"
AssettoServerにて使用するトラック、車両情報などを"Content Manager"を使用し準備します。
今更ですが、Content ManagerにてServer設定を行う場合、LiteVersion(無償版)では非常に面倒(らしい)ですので"Full Version"を使用する前提です。
※私は最初から"Full Version"にしちゃったので....
※"Full Version"へ移行する方向などはググってください。
Online Serverを立上げ、楽しく遊ぶためにも機能制限のない、"Full Version"へ移行する事をお勧めします。
Content Managerを起動し "server"を選択します。
標準メニューでは”server”の項目は非表示となっているので、Content Manager設定メニューから”server”表示へチェックマークを入れる事で上段メニューへ"server"が表示されるようになります。

という準備を行う事で画面上部メニューに “サーバ”が表示されます。
デフォルト設定にて1つサーバサンプルが存在している事を確認する。
※Content Managerインストールが正常に行われていないと文字化けや正常に設定を行う事が出来ないのでその場合は一度、全てをアンインストールし心を落ち着けたのちに再度トライする。
※私は何度か再インストールしている際に文字化けではまった....
サーバ名など自由に入力する(半角英数)
2バイトコードはエラーとなる可能性が高いので半角英数のみとした方がベターと思われる。(トラブルが怖いので試してはいない...)

"首都高"を想定し設定を進める
"track preview"(上図だと"Imola"が表示されている部分)をクリックする事でトラック選択となる。

PIT収容台数値設定
AIなども走行させる為、ひとまず最大である "40"を設定。

※あとから設定ファイルを変更する事も可能なのでまずは数台でもOK
Online Serverへ参加する際に必要となるパスワードを設定。
空欄の場合は誰でも参加可能となる為、必要に応じて設定
プライベートサーバーとするならばパスワード設定は必須。
管理者用パスワード設定を行う。
※8文字以上のパスワード設定が必要。(公式
※単純なパスワードは絶対に避ける。(自己責任
※Discordなど見ていると簡易パスワード設定のサーバーはそれなりに狙われている
CPUスレッド数の設定を行います。
RaspberryPi 3B+は4コアとなっているので、"4"を設定
※RaspberryPi 3B+ のコアは 1コア/1スレッド となっている。
※今時のCPUにて1コアにて複数スレッドが動作する場合はそのスレッド数を設定
※簡単にソースコードを見ただけだと使われていない雰囲気もあるのだが???
デフォルトのまま変更しない事。(重要
一度、"Auto-fill"をクリックする事で"Minimum version"が自動設定される。
"Reequire CSP to join"へチェック

※AIも含め走行可能な車種は先の"Capacity"に依存していると思われます。
※肌感覚なので詳細は調査していないが、車種登録数をCapacity以上で設定すると何処かでエラーとなったはず...
※公式ビギナーズガイドにてpit数以上に車両登録を行うとゲームがクラッシュするとの表記があるので、pit数以下の登録とすること
---
”Only add as many cars to the entry list as there are pits available for the track and layout you've chosen.
Ignoring this limit will result in the game crashing when joining the server.”
---
自車として使用する車両、AIとして使用する車両をCapacityで指定した数分選択します。
※車種のスキンなども個別に選択する必要があります。それらも1車両として登録されます。
※自車、AI車は後で設定します。

サーバー走行ルールを決定します。
好きに設定して頂ければOKです。

コースコンディションの設定を行います。
TIME : コースの時間 ※管理者はchatを使用し変更可能なので適当でOK
公式参考設定

"WeatherFX"項目の右端のドットをクリックする事で時間や日時変更を行う事が出来ますが、AssettoServerでは動作しないので設定を行わないでください。
AssettoServerにて走行する際には"Practice"(練習)のみ有効とする必要があります。

画面下にある"保存"(Save)をクリックする事でデータ保存が行われます。

長かった....やっとここまで来た...
Online Serverとして使用する元データが一先ず完成しました。
このデータをRaspberryPiへCopyする事でOnline Server用のデータがそろいます。
"ENTRY LIST"にて使用する車両選択を行いましたが、ユーザーが使用する車両、AIが使用する車両を設定する必要があります。
1. データフォルダを開く
画面下の"フォルダ"をクリックする事で先ほど"Save"を行ったフォルダが開きます。

"entry_list.ini"ファイルをメモ帳などで開きます。
※今後もファイル操作を行うことが多々ありますのでエディタを必要に応じてインストールしておいたほうが良いと思います。
※無償で使用できるエディタは沢山ありますが、Microsoft から提供されている"Visual Studio Code"が機能豊富であり使いやすいと思いますので参考に...
と、話がずれましたがファイルを開くと[CAR_x]という項目と共に先ほど選択した車両情報が記載されていることが確認できると思います。

各車両情報の最後の所へ"AI=xxxx"という1行を追加していきます。
xxxx部分は以下の3種類を記述します。
この情報をすべての車両に対して行います。
Content Managerが生成した"entry_list.ini"にはこの1行は記載されてませんので、このままサーバーを動かすと全てがユーザー用となるため、AI車両が1台も走らない事になります。
下図の感じになります。
全車両に対して追記が完了したら保存してファイルを閉じます。

データはPC内に保存されてますので、RaspberryPiへ転送するためのデータ生成を行います。


保存先などのウィンドウが表示されますので確認を行い、"保存(S)"をクリックします。

これで使用する車両データおよびOnline用の設定データがパックされました。
このデータをRaspberryPiへ転送します。
先でパックした圧縮ファイル (tar.gz)をRaspberryPiとSSH接続しているTeraTermへドラッグアンドドロップします。

データ転送先を聞かれますので
"/home/<user名>/ACS/SRP"を指定します。
※<user名>は各環境のものに書き換える事

cd ~/ACS/SRP
ファイルを解凍します
tar zxvf xxxx.tar.gz (ファイル名はPackした圧縮ファイル名)
AssettoServer , トラック、車両情報などがRaspberryPiにそろいましたが...
まだServerは立ち上がりません。
cfgフォルダ内に"yml"ファイルが存在していないので生成する必要があります。
現在"SRP"フォルダにいるはずですが...
不安な人は以下のコマンドを実行し"SRP"フォルダへ移動
cd ~/ACS/SRP
"AssettoServer"を一度実行する事で"yml"ファイルが生成されます。
./AssettoServer<リターン>
"yml"ファイルが無いので、エラーが出て止まりますが焦らずです。

ymlファイルが生成されたか確認します。
ls -l cfg<リターン>

"extra_cfg.yml"ファイルが存在していれば一安心です。
ファイルサイズが "ゼロ"でない事も確認します。
※稀にファイルは生成されても中身が無い場合あり。
サーバー起動時にErrorとなります。※他の要因の場合もあるけど...
実際ファイルサイズが "0"だった時があるので備忘録
"extra_cfg.yml"ファイルを一度削除し再度AssettoServerを実行しymlファイルを生成します。
再度上記 "ls -l cfg"を行いファイルサイズを確認してください。
後は"AI"ファイルを入れれば基本的にはサーバーの準備は完了です。
Discord "Shutoko Revival Project" #ai-spline-disussionにてcompuさんが公開しております。 #ai-spline-releases
#ai-spline-disussionは他のAI情報も公開されてます。
channelの先頭付近なので、頑張って先頭までページを進めます。


"fast_lane.aip"をダウンロードします。

サーバ側にAIデータ保持用のフォルダを作成します。
ssh端末からフォルダ作成を行います ※階層が深いのでちょっと注意。
"pack"されたデータを展開しているので、ざっくり以下のような階層となってます。
グレーアウトしている"ai"と書いてあるフォルダを作成する事となります。

次のコマンドを叩いてディレクトリを作成します。
mkdir ~/ACS/SRP/content/tracks/csp/shuto_revival_project_beta/ai
フォルダが作成できましたので、AIデータをコピーします。

もう慣れましたよね。
いつものウィンドウが表示されますんおで、
送信先へ先ほど作成したパスを入力します。
/home/<user名>/ACS/SRP/content/tracks/csp/shuto_revival_project_beta/ai
"OK"をクリック

Online Serverの準備は整いました。
一度起動してみましょう。
ssh端末より以下のコマンドを実行します。
./AssettoServer
初期起動はちょっと時間がかかりますが、じっくり待ちます。
正常に起動できれば"Lobby registration successful"が表示されます。

"ドライブ" -> "LAN"を選択

online serverが見えるとサーバー情報が表示されます。

実際に「参加」をクリックしレースができるか確認
ここまで出来れば、あとはインターネット側の設定をどうにかすればOnlineができます。
長かった...
ひとまず完了
次回 "設定・ファイル転送"
RaspberryPiへAssettoServerを導入まで行います。
この状態ではServerとしてはまだ機能しません。
Serverとして使用するにはContent Managerにて設定が必要です。(後の記事にて書く予定
AssettoServerの公式ページを開きます。
"Download"をクリック

最新リリースバージョンのページへ移動

画面をスクロールし"Assets"まで移動

今回はRaspberryPiへ導入するので、 "assetto-server-linux-arm64.tar.gz"をクリックしダウンロードを実行。
※間違うと動きませんので確実に"arm64"を選択してください
※他のCPUを搭載しているLinuxなどの場合やWindowsの場合は適宜選択を行う。
RaspberryPiを起動しSSH接続まで行ってください。
SSH接続を行った直後はhomeディレクトリにいるはずですが...
不安な人は以下のコマンドを実行し確実にhomeディレクトリへ移動してください。
cd ~/ <リターンキー>
homeディレクトリへサーバーを立ててしまうと他のトラックなどの切替時に面倒なので、Server専用のディレクトリを作成し、その中に各トラック用ディレクトリを作成する事とします。
イメージとしては下図の緑枠で囲まれた部分となります。
"その他"と書いてあるのは今後他のトラックなどを増やす場合を想定してます

コンソールから以下のコマンドを実行しフォルダを作成します。
名称はなんでも良いのですが、今後のメンテナンス性なども考慮して命名してください。仮にACS(AssettoCorsaServerの略)とします。
midir ACS <リターン>
首都高用ディレクトリを作成します。仮に"SRP"とします。
midir ACS/SRP <リターン>
![]()
これで ACSディレクトリの下へSRPフォルダが完成しました。
![]()
"SRP"フォルダへAssetto Server公式ページよりダウンロードした圧縮ファイルをRaspberryPiへコピーします。
先ほどダウンロードを行った圧縮ファイル"assetto-server-linux-arm64.tar.gz"をSSHしているTeraTermへドラッグアンドドロップします。

以下のウィンドウが開きますので
※以下の例ではユーザー名が "ttl"となっておりますので、各自のユーザー名へ変更してください。
/home/<user名>/ACS/SRP

入力後"OK"をクリック。
入力情報に誤りなどが無ければRaspberryPi側へデータコピーが実行されます。
実際にファイルがコピーされたか確認します。
以下のコマンドを実行し、先ほどの圧縮ファイルが存在しているか確認。
ファイルが存在していればOK。
ls ACS/SRP <リターン>
![]()
もしファイルが存在していない場合は入力情報が誤っている可能性が高いので再度確認し同じ操作を行ってください。
圧縮ファイルを解凍します。
まずは"SRP"ディレクトリへ移動します。
cd ACS/SRP <リターン>
間違いないと思いますが....
確認の為、以下のコマンドを入力し圧縮ファイルが存在しているか確認します。
ls <リターン>

うん。大丈夫。
ファイルを解凍します。
tar zxvf assetto-server-linux-arm64.tar.gz <リターン>
色々表示されていれば解凍できてます。

"ls"コマンドを実行し "AssettoServer"という文字列があればOK.
![]()
これでOnline Server 実行環境の準備完了です。
あとは"Content Manager"を使用しサーバーにて動作させる環境データを作成すればOK
備忘録として書き始めたけど...
記事にするのは大変だなぁ...
でも、ここまで来れば後は実際に使用するデータを作れば最低限online出来るのでもう少し頑張ろう (と自分に言い聞かせるww
次の記事へ続く
ここまで書いて気づいたのですが....
AssettoServer V0.0.52の公式ページにビギナーズガイドが追記されていた...
0.0.51までは存在していなかったので、それなりに困っている人が多かったものと思われます。(私も困ってたwww
機を逸した感はあるが、公式ではざっくりとWindows用にServerを立ち上げる方法が記載されているので、それはそれで一読して頂いた方が間違いないはずなので参考に
こっちの記事の方が参考って話もあるwww
次回 Content Manager 導入
準備編1にてRaspberryPiの起動及びネットワーク接続確認が出来ているはずなので次のステップです。
※この記事もググれば色々な情報があるので個人的な備忘録な感じは否めない。
この記事ではAssettoServerを実行するための環境構築まで行います。
※最新の情報は各公式ページの情報を参照願います。
※Version Upなどによりこの記事が役に立たない事もありますので自己責任で...




なにはなくともアップデートが必要です。以下のコマンドを実行
sudo apt -y update
次に upgradeを実行 ※ちょいと時間がかかるので気長に待つ
sudo apt -y upgrade
プロンプト表示となればOK。

ここまででRaspberryPi (Linux 側)の下準備はOKです。
今後使用する可能性がある為、"nmap"と"curl"をインストールする
※詳細は割愛しますが、"nmap"を入れておいた方がネットワークトラブル時有用。
※curlは後々サーバーの状況をwebhookする際に入れておいた方が間違いないと思うので入れておく
sudo apt install -y nmap curl
※まだRaspberryPiでの作業は続きますのでssh接続はそのままで
AssettoServer導入するにあたり、公式ページを参照します。
待望の"AssettoServer"公式ページですwww
公式ページを開くと以下のような画面となりますので"Get Started"をクリック。

"Installation"の"Linux"をクリックすると".Net 7 Runtime"をインストールする必要があると書いてあります。 ※2023年07月現在
".Net"をインストールするため、Microsoftのページへ移動します。

"ASP.NET 7 Runtime installation instructions for your distro"をクリックしページ移動

スクリプトを使用し.Netを導入しますので"Scripted install"をクリック
手順に従いスクリプトをダウンロードします。
RaspberryPi SSHにて以下のコマンドを入力します。
wget https://dot.net/v1/dotnet-install.sh -O dotnet-install.sh
web pageの "copy"部をクリックする事でクリップボードへコピーされます。
そのままSSHしているTeraTermへマウスを移動し、右クリックする事でペーストされますので、簡単です。

手順通りに進めます。実行権限を付与
chmod +x ./dotnet-install.sh
今回必要な Versionは 7 ですので、Version7を指定しインストールします。
※インストール完了までしばらく時間がかかります。
./dotnet-install.sh -c 7.0
しばし待つ....結構待つ...
Bugってる??と思うくらい変化がない状況が続きますが焦らず騒がずです。
---
ttl@as0077:~ $ ./dotnet-install.sh -c 7.0
dotnet-install: Attempting to download using aka.ms link https://dotnetcli.azureedge.net/dotnet/Sdk/7.0.306/dotnet-sdk-7.0.306-linux-arm64.tar.gz
dotnet-install: Extracting zip from https://dotnetcli.azureedge.net/dotnet/Sdk/7.0.306/dotnet-sdk-7.0.306-linux-arm64.tar.gz
dotnet-install: Installed version is 7.0.306
dotnet-install: Adding to current process PATH: `/home/ttl/.dotnet`. Note: This change will be visible only when sourcing script.
dotnet-install: Note that the script does not resolve dependencies during installation.
dotnet-install: To check the list of dependencies, go to https://learn.microsoft.com/dotnet/core/install, select your operating system and check the "Dependencies" section.
dotnet-install: Installation finished successfully.
ttl@as0077:~ $
---
“Installation finished successfully.”となれば正常にインストール完了。
Installした".Net"へPath(パス)を通します。
Pathを通さないとAssettoServerが正常に動作しませんので重要です。
エディタを使用し.bashrcファイルを修正します。
"vi"や"nano"など標準的なエディタはインストール済みなので、それらを使用し変更する形です。
※Linuxなどに不慣れな人は"vi"は使いづらいけど...頑張る
※ネット上に"vi"の使い方は色々あるので、頑張ってchallenge
※間違った場合は エスケープキー(ESC)を一度押したのち、":q!"と入力すれば保存せずにエディタ終了となるので再チャレンジ。

追記が正常に行えたか以下のコマンドにて確認する。
cat .bashrc

一度ログオフもしくは再起動する事で反映される為、一旦再起動する
sudo reboot
※再起動する際、SSH接続が切れるので、RaspberryPiが起動した後、再度SSH接続を実行
envコマンドを使用しPath確認を行います。
env | grep .dot
正常に設定できていれば、先の2行が表示されます。

ここまでで"AssettoServer"を起動するための下準備が完了です。
後は実際にOnlineにて使用するデータ準備とServer準備となります。
もう一息です。
次回へ続く