AUTOSAR 1079:2024 Explanation of ARA Applications in Rust
Figure 1.1: Current AUTOSAR-Rust communication diagram
の図をPlantUMLで描いてみようと思います。
AUTOSARは、Classic Platformは、EnterPriseArchitect(ソフト名)のファイルを配付している。
なぜか、より公開側に振ったはずのAdaptive Platrformでは、UML図を配布していない。
AUTOSAR APの図をChatGPTにPlantUMLで書いてもらう企画を考案。
今回はRUST文書の第1回目。
Figure 1.1: Current AUTOSAR-Rust communication diagram
Explanation of ara::com API AUTOSAR 846, R23-11, AP
https://www.autosar.org/fileadmin/standards/R24-11/AP/AUTOSAR_AP_EXP_ARARustApplications.pdf
で参照している
AUTOSAR Adaptive Platfrom PlantUML with ChatGPT
https://qiita.com/kaizen_nagoya/items/4fef7700b57419ddf2c2
Si desea leer el código fuente de PlantUML, puede hacerlo seleccionando la solicitud de edición.
If you would like to read the source code of PlantUML, you can do by selecting the edit request.
PlantUMLのソースコードを読みたい方は、編集リクエストを選択するとソースコードが読めます。
ChatGPT
https://www.autosar.org/fileadmin/standards/R24-11/AP/AUTOSAR_AP_EXP_ARARustApplications.pdf の Figure 1.1: Current AUTOSAR-Rust communication diagram を PlantUMLで記述してみてください。
ChatGPT:
以下は Figure 1.1: Current AUTOSAR-Rust communication diagram を元に、PlantUML で表現した例です。実際の図の細部(矢印の種類、ラベルの有無、配置など)は文献を見ながら必要に応じて調整してください。
この構造を実際の図に近づけるには、以下の点を確認して補正するとよいでしょう:
矢印の双方向/一方向性
通信/同期/非同期を示す表現(点線矢印、ラベル、矢印の矢頭など)
モジュール名称や役割(たとえば “ARA-com Manager”, “Transport” モジュール名など)
コンポーネント間のレイアウト(左から右、上下などの配置)
もし PDF の該当ページを入手できれば、私の方でより正確な PlantUML を作成できますが、試してみましょうか?その PDF の図を送ってもらえますか?
どうやって送ればいいですか。
ChatGPT:
このチャットのメッセージ入力欄のすぐ下にある 「📎ファイルをアップロード」ボタン(またはドラッグ&ドロップ)を使って、
PDFファイルそのものか、該当ページを切り出したPDF/画像(スクリーンショットでも可)をアップロードしてください。
アップロードいただければ、その図を直接確認して、より正確なPlantUMLコードに仕上げられます。
https://qiita.com/kaizen_nagoya/items/2a0109bb402b7c6c46fa にあります。
ChatGPT:
画像は取得できなかった(ぼやけていて判別できず)ため、手元で確認できる限りの情報をもとに、もう少し洗練した PlantUML の案を出します。
もし可能なら、その Qiita 記事中の該当図(スクリーンショット等)をアップロードしていただけると、さらに正確にできます。
下記は改良版の PlantUML(シーケンス図スタイル)です。モジュール名/矢印ラベルなどは PDF や記事の図に合わせて調整してください:
この構成では次のように表現しています:
左端が「Rust アプリケーション(ユーザ側)」
次に “ARA-com Client (Rust)” があって、Manager / Server / Transport とつながる
通信 (IPC / transport) のレイヤを明示的な “Transport / IPC Layer” として表現
矢印に “request”, “response”, “send”, “receive”, “deliver” のようなラベルを付与
もし、図中で「双方向通信」だったり「非同期コール」「コールバック」など特別な通信様式が使われていれば、それも dotted arrow(点線矢印)や “->>” のような非同期矢印で表現できます。
もしよろしければ、あなたが見ている図をスクリーンショットで送ってもらえますか? それをもとに 完全一致 な PlantUML を作ります。どうしますか?
「📎ファイルをアップロード」ボタンがありません。
ChatGPT:
ブラウザ版のChatGPTでは、現在の環境によってはアップロード機能が表示されない場合があります。
その場合でも、図を共有する方法はいくつかあります。
代替案:
スクリーンショットを撮る
Mac: ⌘ + Shift + 4(範囲指定)
Windows: Win + Shift + S(範囲指定)
その画像をここにドラッグ&ドロップしてください。
入力欄に直接ドラッグすれば自動的に添付されます。
もしドラッグ&ドロップもできない場合は、
図をできるだけ詳細に文章で説明(各ボックス名・矢印の方向・接続関係など)
あるいは図をオンラインの画像共有サービス(例: Imgur, Gyazo など)にアップしてURLを貼る
のいずれかをいただければ、それをもとに正確なPlantUMLを作成できます。
よろしくお願いします。(ここにDrug and Drop)
ChatGPT:
ありがとうございます!いただいた図を参考に、Figure 1.1 を PlantUML のコンポーネント図で表現すると以下のようになります。
矢印の方向や点線は、図のイメージを忠実に再現しています。
ポイント
rectangle / package で「APD (C++)」「Rust」ブロックを再現
..> は点線矢印として通信方向を表現
各アプリ(Radar, Camera, Lidar, Ultrasonic)の proxy / skeleton を個別のコンポーネントとして配置
図右側にあった「Pure C++ / Rust communication example」などは legend で簡易表示
このコードをPlantUMLに貼り付ければ、ほぼ同じレイアウトのコンポーネント図を生成できます。
必要に応じて矢印の向き・ラベルや、色付け (skinparam など) を加えることでさらに図に近づけられます。
この図を可能な限りC++およびRUSTのソースコードで表現してください。
ChatGPT:
以下は、いただいた図をそのまま動作する実装にするのではなく、
「コンポーネント構成をC++とRustのコード構造で表現する」ことを目的にしたサンプルです。
AUTOSAR Adaptive ARA::com との連携や Proxy / Skeleton の役割を インタフェース定義レベルで示しています。
1️⃣ C++ 側(APD)
// ara_com_interface.hpp
#pragma once
#include <string>
#include <functional>
namespace ara {
namespace com {
// 共通インタフェース
class IService {
public:
virtual void Send(const std::string& msg) = 0;
virtual void OnReceive(std::function<void(const std::string&)> cb) = 0;
virtual ~IService() = default;
};
// Proxy:クライアント側
class RadarProxy : public IService {
public:
void Send(const std::string& msg) override;
void OnReceive(std::function<void(const std::string&)> cb) override;
};
// Skeleton:サーバ側
class RadarSkeleton : public IService {
public:
void Send(const std::string& msg) override;
void OnReceive(std::function<void(const std::string&)> cb) override;
};
class CameraSkeleton : public IService { /* …同様… */ };
class UltrasonicProxy : public IService { /* …同様… */ };
} // namespace com
} // namespace ara
// === APDアプリからの利用例 ===
#include "ara_com_interface.hpp"
int main() {
ara::com::RadarProxy radar_client;
radar_client.Send("radar data");
}
RadarProxy / RadarSkeleton が図の Radar app proxy/skeletonに対応。
CameraSkeleton や UltrasonicProxy も同様のパターン。
2️⃣ Rust 側
// ara_com_trait.rs
pub trait IService {
fn send(&self, msg: &str);
fn on_receive<F>(&mut self, callback: F)
where
F: Fn(String) + 'static;
}
// ラッパー:C++との接続用
pub struct AraComRustWrapper {
// C++側のara::comへのブリッジ (FFIなど)
}
impl AraComRustWrapper {
pub fn new() -> Self { Self{} }
pub fn connect_cpp(&self) { /* FFIやIPCで接続 */ }
}
// adaption layer
pub struct AraComAdaptionLayer {
wrapper: AraComRustWrapper,
}
impl AraComAdaptionLayer {
pub fn new(wrapper: AraComRustWrapper) -> Self { Self { wrapper } }
}
// Proxy / Skeleton 実装
pub struct LidarProxy;
impl IService for LidarProxy {
fn send(&self, msg: &str) { println!("Send from LidarProxy: {}", msg); }
fn on_receive<F>(&mut self, _callback: F)
where F: Fn(String) + 'static {}
}
pub struct LidarSkeleton;
impl IService for LidarSkeleton { /* 同様 */ }
pub struct UltrasonicSkeleton;
impl IService for UltrasonicSkeleton { /* 同様 */ }
pub struct CameraProxy;
impl IService for CameraProxy { /* 同様 */ }
// === Rustアプリ利用例 ===
fn main() {
let wrapper = AraComRustWrapper::new();
let adapt = AraComAdaptionLayer::new(wrapper);
let lidar = LidarProxy;
lidar.send("lidar data");
}
AraComRustWrapper がara::com Rust wrapper、
AraComAdaptionLayer がara::com adaption layerに対応。
LidarProxy / LidarSkeleton / UltrasonicSkeleton / CameraProxy は図中のRustアプリ各モジュール。
構成ポイント
Proxy:クライアント側(送信・要求)
Skeleton:サーバ側(受信・処理)
Rust wrapper / Adaption layer:C++ ARA::com と Rust の間のFFIまたはIPC接続を抽象化。
これらを組み合わせることで、図の
「Pure C++」「C++→Rust」「Rust→C++」「Pure Rust」
いずれの通信パターンにも拡張可能な骨組みになります。
ChatGPT の回答は必ずしも正しいとは限りません。重要な情報は確認するようにしてください。
参照
ChatGPT利用の技4つ with ChatGPT
https://qiita.com/kaizen_nagoya/items/4a178bd6a09a4a471a7f
ChatGPTによるQiita記事の改良と補足
https://qiita.com/kaizen_nagoya/items/20604d6dd0702ab95c2f
ChatGPTによるQiita記事の改良と補足(2)
https://qiita.com/kaizen_nagoya/items/996275307ffc8c1243f8
本から始める 面倒なことはChatGPTにやらせよう by からあげ
https://qiita.com/kaizen_nagoya/items/f5ce2a18db54b5610e4b
MCP入門 〜面倒なことはAIエージェントにやらせよう〜 by からあげ を聞きながら
https://qiita.com/kaizen_nagoya/items/54b648c838fae8d57e38
【松尾研LLMコミュニティ】面倒なことはLLMにやらせよう "Beginning LLM"2024年10月17日 AI(9)
https://qiita.com/kaizen_nagoya/items/efdc23fbe67cdae2126e
設計:ChatGPTで特異解か一般解を求める AI(1)
https://qiita.com/kaizen_nagoya/items/4dec580e16a7c84b0ec4
みんなの使い方から学ぶ
https://qiita.com/kaizen_nagoya/items/8e7de492d896df94a36e
AI・機械学習 昨日、今日、明日
https://qiita.com/kaizen_nagoya/items/adb184c8fc7a65ac9756
DNA LLM and genome for survey 2200 papers by name.
https://qiita.com/kaizen_nagoya/items/ce8a28d6072f340a9d59
ChatGPTから学ぶ 3倍褒めて3分の1貶す
https://qiita.com/kaizen_nagoya/items/91e70fd8caa25076718b
AI時代の相棒は、キミに決めた! 推しのAIエージェントをシェアしよう!企画参加まとめへの序章
https://qiita.com/kaizen_nagoya/items/e3fd7557bac97d1b88f2
記事投稿数、いいね数の目標設定して ChatGPTに聞いてみた。
https://qiita.com/kaizen_nagoya/items/019e2ad9c3e45e45854e
AI時代の相棒は、キミに決めた! ChatGPT推し ver.0
https://qiita.com/kaizen_nagoya/items/8068a884fb2e64cd3c4f
無料ChatGPTの処理限界
https://qiita.com/kaizen_nagoya/items/84683aee26d9f4a28af0
by ChatGPT, with ChatGPT and people opinions.
https://qiita.com/kaizen_nagoya/items/57f00f9b48b25bc231e6
ChatGPTの使い方の利点と課題 by ChatGPT
https://qiita.com/kaizen_nagoya/items/0f469e473a6ed0407daa
DataRobot 風 AI agent Robotをあなたに
https://qiita.com/kaizen_nagoya/items/1ca8ca1dedefaf739d16
ChatGPTの賢い使い方
https://qiita.com/kaizen_nagoya/items/3a7e4583553543eeeeb3
ChatGPTの弱みをあなたに
https://qiita.com/kaizen_nagoya/items/3c97c63a22939e203905
ChatGPTで裸の王様
https://qiita.com/kaizen_nagoya/items/8377be38d3a763e93811
設計 仕様 制約 AI利用開発の鍵 by ChatGPT
https://qiita.com/kaizen_nagoya/items/1b9cb2f9d26308d84791
PowerPoint 筋書き(outline), 見直し(review), 見栄え加工 by ChatGPT
https://qiita.com/kaizen_nagoya/items/37bb97fc250fca37295b
逃げ回るChatGPTを追い詰めるには
https://qiita.com/kaizen_nagoya/items/cd60426e626ba05e0377
三人寄れば文珠の知恵は直交する能力前提 by ChatGPT
https://qiita.com/kaizen_nagoya/items/512e5611615e2426bb42
プログラマ3年で社長事業(未成年編) 博士論文支援追加
https://qiita.com/kaizen_nagoya/items/326452b5bf29c144c307
自殺防止手引き原稿 補足 by ChatGPT
https://qiita.com/kaizen_nagoya/items/7e459fa7edf7205c2667
しつけ(discipline) の測定視点 by ChatGPT
https://qiita.com/kaizen_nagoya/items/6b5ce03c545f7bbd8723
技術者は英語を学ぶ必要はない。英単語の羅列でいい=プログラム。
https://qiita.com/kaizen_nagoya/items/4fc3963a21e0339fd1c9
猫中心設計から鳥中心設計へ part2
https://qiita.com/kaizen_nagoya/items/4d7a5a33c85e0b01dc5d
プログラマ必須科目 ChatGPTにも確認
https://qiita.com/kaizen_nagoya/items/7b30d9d119792130facd
なんで音楽とプログラムの関係がうまく書けないか。
https://qiita.com/kaizen_nagoya/items/489a68d360df4b26f87d
AI利用業務手引き
https://qiita.com/kaizen_nagoya/items/f201b292f37dba16e9ef
C言語(C++)が必要な人と必要ない人
https://qiita.com/kaizen_nagoya/items/2afe9e846b55b24cb6f1
C言語(C++)が必要な人、必要ない人 ChatGPT
https://qiita.com/kaizen_nagoya/items/a074cb8cd292d8d94bd4
C言語を習得する3つの方法
https://qiita.com/kaizen_nagoya/items/84cab0888c193bba429b
C言語を習得する3つの方法 ChatGPT
https://qiita.com/kaizen_nagoya/items/4a3518a18fa49f46787f