自動運転AIチャレンジ2024専用AIアシスタントを作ってみよう！　～ 番外編：Cursor編 ～

# はじめに

番外編です！

これまで [NotebookLM](https://qiita.com/soyaoki/items/e9752ba307fa25ebd851) / [Dify](https://qiita.com/soyaoki/items/407b83a36cf0a59d3e1f) / [Google Cloud](https://qiita.com/soyaoki/items/37fd68f08ea17b6e8015) で AIアシスタントを作ってみました。

ただ開発時は、最終的にはソースコードを書くことになります。
そのためエディタ上で全て完結するほうが良いよね〜ということで、
話題のAIエディタ **Cursor** を使ってみました。

https://www.cursor.com/

Cursor自体の説明は、以下の記事などが詳しいため割愛しますが、

https://qiita.com/kota33/items/20a884cbd969cf1ce087

https://zenn.dev/umi_mori/books/ai-code-editor-cursor/viewer/what_is_cursor

https://zenn.dev/umi_mori/books/ai-code-editor-cursor/viewer/what_can_cursor_do

１．AIによるコード修正や生成をする `Command K` 

https://zenn.dev/umi_mori/books/ai-code-editor-cursor/viewer/how_to_use_command_k

２．コードベース全体に関する質問をAIに投げかけることができる `Codebase Answers` 

https://zenn.dev/umi_mori/books/ai-code-editor-cursor/viewer/how_to_use_codebase_answers

３．サードパーティライブラリのドキュメントをAIに読み込ませる `Docs` 

https://zenn.dev/umi_mori/books/ai-code-editor-cursor/viewer/how_to_use_docs

などの機能を有する次世代AIエディタです。
GitHub Copilot & ChatGPT on Visual Studio Code のようなイメージです。

# 準備
インストールは公式HPで配布されているAppImageをダウンロードするだけです。
使用時はSign upが必要ですので、各自適切に実施ください。

https://qiita.com/watyanabe164/items/8c6506823af7129382e6

# 活用例 (Codebase Answers)

少しトリッキーな活用例ですが、**Autowareの既存モジュール理解** に使ってみました。

### 1. 状況
　Autowareの既存Planningモジュール (behavior_path_planner) を使用した際に、
　一部の障害物が回避できない (DebugInfo：InsufficientLateralMargin) 問題に直面。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628135/bec49158-3719-70b0-3edd-2e2e5f1ad3c8.png)

### 2. 手順
　事前準備 (= UniverseリポジトリのDB作成) として以下を済ませます。
　　1) Autoware Universeのリポジトリをクローン
　　2) 上記フォルダをCursorで開き、Codebase indexingを実施
  
　その後、エディタ上のチャットボットに、
　**どんな時にこの現象が発生するか？**、**どのパラメータを変更したらよいか？** を
　Codebase Answersを使って質問してみます。

### 3. 結果
　以下の返答を得ました、確かにその辺りが怪しいかも…！

```
InsufficientLateralMarginで障害物回避ができない場合は、以下のような状況が考えられます。

1. 横方向の距離が不足している: 車両と障害物の間の横方向の距離が、設定されたハードマージンやソフトマージンよりも小さい場合、回避が必要と判断されます。
2. 障害物の種類: 駐車中の車両や他の障害物が近くにある場合、特にハードマージンが大きく設定されていると、回避ができないことがあります。
3. 車両の幅: 車両の幅が障害物との距離に影響を与え、十分なマージンが確保できない場合。
4. 環境条件: 道路の幅や周囲の状況（例えば、狭い道や障害物が多い場所）によっても、回避が難しくなることがあります。

これらの条件を考慮し、設定を見直すか、環境を改善する必要があります。
```

```
InsufficientLateralMarginの問題に関連して、不適切なパラメータの例は以下の通りです。

1. ハードマージン:
hard_marginやhard_margin_for_parked_vehicleが小さすぎると、障害物との安全距離が確保できず、回避ができなくなる可能性があります。
2. ソフトマージン:
soft_marginが不適切に設定されていると、実際の回避距離が不足し、障害物に近づきすぎることがあります。
3. 車両の幅:
車両の幅が正しく設定されていない場合、障害物との距離計算が誤り、回避が必要と判断されないことがあります。
4. 検出エリアのパラメータ:
min_forward_distanceやmax_forward_distanceが不適切だと、障害物を適切に検出できず、回避が行えないことがあります。
5. 動的シフト長:
max_right_shift_lengthやmax_left_shift_lengthが小さすぎると、必要な回避動作ができなくなる可能性があります。

これらのパラメータを見直し、適切な値に設定することが重要です。
```


（参考）実際のCursor画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628135/7fb0379b-3d7e-2c7a-3fa9-a61f3cf86d67.png)

回答時には以下のように様々なファイルを参照しているようでした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628135/b6ba7fb8-e07f-7463-3506-cab90147b92a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628135/fe95c95c-c341-67e3-8084-488d555404bd.png)


（参考）残クォーター画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628135/400eabce-effd-08d5-cf37-d428cd786c3d.png)

※ 本記事執筆時点では、**Pro two-week trial**が設定されており、上記内容は無料で実施可能でした。

https://www.cursor.com/pricing

https://zenn.dev/umi_mori/books/ai-code-editor-cursor/viewer/price 

:::note warn
機密度の高いプロジェクトでの使用は、最新のプライバシーポリシーを確認して各自ご判断ください。
:::

https://www.cursor.com/privacy

https://qiita.com/posi_posi/items/1509257fbfccff3293fd

`Gemini Code Assist`も気になりますね…

https://cloud.google.com/products/gemini/code-assist?hl=ja
 
# おわりに

AIエディタ Cursor のおかげで、改良のきっかけをもらえました。
今回は省略しましたが、`Command K`でのコード生成など他機能もとても便利です。
(ただし適切に利用しないと、設計意図不明のメンテ困難コードが積み上がって後悔する場合もあるので、程々に…)

以上、コーディングやデバッグといった実際の開発時に活躍してくれそうな
AIアシスタント (エディタ) のご紹介でした。

[自動運転AIチャレンジ2024](https://www.jsae.or.jp/jaaic/2024ver/) の予選も残り1週間です！
AIアシスタントが生み出す駆動力を、うまく舵取って、最後まで走り抜けるぞ！

つづく？

この記事は、AI文章校正ツール「ちゅらいと」で校正されています。