【前編】ChatGPTでロボットのコード生成はできるのか？

# はじめに
基盤モデル×RoboticsのAdventCalendarの３日目です！
カレンダーものぞいてみてくださいー！
https://qiita.com/advent-calendar/2022/robot-ai
一日目に基盤モデルのお話を書いてますので、ぜひ！

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">【🎉基盤モデル×Robotics 1日目 投稿🎉】<br><br>タイトル：基盤モデルとは<br><br>東京大学 松尾研究室が主催する「基盤モデル×Robotics」に関するAdvent Calendarの１日目を投稿しました！<br><br>リンクのカレンダー(12/1)から記事を是非読んでください🎄<a href="https://twitter.com/hashtag/%E6%8B%A1%E6%95%A3%E5%B8%8C%E6%9C%9BRT?src=hash&amp;ref_src=twsrc%5Etfw">#拡散希望RT</a> <a href="https://twitter.com/hashtag/adventcalendar2022?src=hash&amp;ref_src=twsrc%5Etfw">#adventcalendar2022</a> <a href="https://t.co/mcTe4RAEMD">https://t.co/mcTe4RAEMD</a></p>&mdash; るっと🐨 Ph.D. 🤖 (@MeRTcooking) <a href="https://twitter.com/MeRTcooking/status/1598134555156041728?ref_src=twsrc%5Etfw">December 1, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">【🎉基盤モデル×Robotics 3日目 投稿🎉】<br><br>タイトル：ChatGPTでロボットのコード生成はできるのか？ <br><br>本日投稿者いなかったのでピンチヒッターです！<br>ゆるめの記事ですが話題にのっかりました！<br>明日の投稿者もいない...（誰か...👀）<br><br>今後共よろしくお願いします！<a href="https://t.co/0PojBI1jUf">https://t.co/0PojBI1jUf</a></p>&mdash; るっと🐨 Ph.D. 🤖 (@MeRTcooking) <a href="https://twitter.com/MeRTcooking/status/1598815010737659904?ref_src=twsrc%5Etfw">December 2, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
いいね&拡散RTうれしいです！

では、本題へ！

### ChatGPTとは
OpenAIが開発するGPT-3(※)という大規模言語モデルをベースとしたチャットアプリです。
実際のにどんな事ができるか見てみましょう！

https://chat.openai.com/chat

## ChatGPTに聞いてみよう！
### ChatGPTにChatGPTについて聞く
![Screenshot from 2022-12-03 07-18-34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/351913/a80dfd17-1f97-e551-9c19-397ebcd6f374.png)

### ChatGPTにChatGPTのデメリットについて聞く
![Screenshot from 2022-12-03 07-21-07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/351913/0f559408-b960-9ddb-0a62-e135a1b048f6.png)

なんとなくChatGPTのイメージはついたでしょうか？
数秒以内に返答がきます...これはとてつもなく凄いですね！

### ChatGPTでロボットコード生成できる？

なんかロボットコードも生成できそうなのでは？と思い、恐る恐る聞いてみました。。。

### 2リンクロボットアームの順運動学をpythonで実装
![Screenshot from 2022-12-03 07-24-48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/351913/87df4c90-2219-1aa9-6b12-967435b3b312.png)

やはり、無理なのでしょうか・・・

### 2リンクロボットアームの順運動学のpythonコード

![Screenshot from 2022-12-03 07-26-46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/351913/e1d2dd36-ac4e-5b59-401d-2513c575f2c8.png)


``` python
import numpy as np

# DHパラメータ
DH = [
    [0, 0, 0, 0],
    [0, 0, 0, 0]
]

# 座標変換行列を求める
T = np.identity(4)
for i in range(len(DH)):
    d, theta, a, alpha = DH[i]
    T = T @ np.array([
        [np.cos(theta), -np.sin(theta), 0, a],
        [np.sin(theta) * np.cos(alpha), np.cos(theta) * np.cos(alpha), -np.sin(alpha), -d * np.sin(alpha)],
        [np.sin(theta) * np.sin(alpha), np.cos(theta) * np.sin(alpha), np.cos(alpha), d * np.cos(alpha)],
        [0, 0, 0, 1]
    ])

# 先端位置を求める
position = T[:3, 3]
print(position)

```
上記のコードでは、DHパラメータを設定した後、各リンクの座標変換行列を求めるために前計算を行います。その後、ロボットアームの先端位置を求めるために、各リンクの座標変換行列を順運動学的に計算し、その結果を出力しています。

↑のような記述が生成されました！
まさか、本当に生成されるとは。。。
なんだか、、、これは色々と応用先がありそうですね！

### 移動ロボットの経路計画のpythonコード
他にも色々とお試し
![Screenshot from 2022-12-03 07-43-34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/351913/34241122-1176-f6c1-be4f-695507cbe246.png)


```python
import numpy as np

# 移動ロボットの初期位置
x = 0
y = 0
theta = 0

# 移動ロボットの経路を格納する配列
path = []

# 目的地の座標
goal = [10, 10]

# 移動ロボットが移動する距離
distance = 1

while True:
    # 移動ロボットの現在位置を記録する
    path.append([x, y])

    # 移動ロボットを目的地の方向へ向ける
    target_theta = np.arctan2(goal[1] - y, goal[0] - x)
    theta += np.clip(target_theta - theta, -np.pi / 4, np.pi / 4)

    # 移動ロボットを移動させる
    x += distance * np.cos(theta)
    y += distance * np.sin(theta)

    # 移動ロボットが目的地に到達したか判定する
    if np.abs(goal[0] - x) < distance and np.abs(goal[1] - y) < distance:
        # 移動ロボットの経路を表示する
        print(path)
        break
```

なんだか、おおよその掴みはできてそうですね！
もっと知識（言語指示）を与えてあげると、コードの質もあがりそうですね！
すごい代物がでてきて、驚いています。。。

# 追加
これまでの記事では具体的な指示を与えていなかったのですが、
なんと詳細に文章を入れると以下のようになりました！！！！！！！（引用許可は頂いております）

### 具体的にPubSubのmsg型指定するとそのままROSで動くコードが...
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">具体的にPubSubのmsg型指定するとそのままROSで動くコード書いてくれる <a href="https://t.co/2mAKc2cUDx">https://t.co/2mAKc2cUDx</a> <a href="https://t.co/EJ2o6Bybgv">pic.twitter.com/EJ2o6Bybgv</a></p>&mdash; porizou (@porizou1) <a href="https://twitter.com/porizou1/status/1599038387532746752?ref_src=twsrc%5Etfw">December 3, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

ここまでできてしまうのか.....

### C++のROSのプログラムPythonに書き直してくれる

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">C++のROSのプログラムPythonに書き直してくれる<a href="https://twitter.com/hashtag/ChatGPT?src=hash&amp;ref_src=twsrc%5Etfw">#ChatGPT</a> <a href="https://t.co/6iUvARAY2k">pic.twitter.com/6iUvARAY2k</a></p>&mdash; porizou (@porizou1) <a href="https://twitter.com/porizou1/status/1598617376362463232?ref_src=twsrc%5Etfw">December 2, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

コードの書き換えも.....
### ROS1を使用して、hiというメッセージをpub、subするノードをpythonで書いてみて

以下が生成されました。

>ROS1を使用して、hiというメッセージをpub、subするノードをPythonで書くことができます。次のようなコードを書くことで、ROS1を使用してhiというメッセージをpub、subするノードを書くことができます。

```python 
#!/usr/bin/env python
import rospy
from std_msgs.msg import String

def callback(data):
    rospy.loginfo(rospy.get_caller_id() + "I heard %s", data.data)

def listener():
    rospy.init_node('listener', anonymous=True)
    rospy.Subscriber("hi", String, callback)
    rospy.spin()

if __name__ == '__main__':
    listener()

```

```python
#!/usr/bin/env python
import rospy
from std_msgs.msg import String

def talker():
    pub = rospy.Publisher('hi', String, queue_size=10)
    rospy.init_node('talker', anonymous=True)
    rate = rospy.Rate(10) # 10hz
    while not rospy.is_shutdown():
        hello_str = "hi %s" % rospy.get_time()
        rospy.loginfo(hello_str)
        pub.publish(hello_str)
        rate.sleep()

if __name__ == '__main__':
    try:
        talker()
    except rospy.ROSInterruptException:
        pass
```

上のコードは、ROS1を使用したhiというメッセージをpub、subするノードを書くことができます。ROS1とROS2では、ノードやトピック、メッセージなどの一部の概念が異なるため、詳細はドキュメントを確認する必要があります。

![Screenshot from 2022-12-03 23-26-24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/351913/543023c1-9652-5c6e-7ef7-5b03c3da8357.png)

![Screenshot from 2022-12-03 23-26-29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/351913/5042f9ff-a909-7b6d-6403-e7e516df6bf5.png)

すごい。。。。
なぜ分割したファイルと理解できた。。。

### 1次遅れ系に対する2次元のMPC制御器をC++で

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">ふぁーーーーーーーーwwwwwwwwwww<br>田中「1次遅れ系に対する2次元のMPC制御器をC++で書いて．」<br>AI「OK」<br>約20秒後...<br>AI「でけた」<br>田中「ふぁーーーーーwwwwwwwwwww」<br>完璧ではないが，やべぇwwwwwwwwwwwwwwwww<a href="https://twitter.com/hashtag/OpenAI?src=hash&amp;ref_src=twsrc%5Etfw">#OpenAI</a> <a href="https://t.co/LNUaUhXtN4">pic.twitter.com/LNUaUhXtN4</a></p>&mdash; 田中良道 (@RyodoTanaka) <a href="https://twitter.com/RyodoTanaka/status/1598635390310952960?ref_src=twsrc%5Etfw">December 2, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

どこまでいくのか。。。。

### RRT(ランダム探索手法)

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">いやいやいやwwwwwwww<br>RRT書けるんかいwwwwwwwwwwwww<br>まじかよwwwwwwwwwwwwwwww<br>しかも数秒でwwwww<br>新しい仕事考えないかんな😇<a href="https://twitter.com/hashtag/OpenAI?src=hash&amp;ref_src=twsrc%5Etfw">#OpenAI</a> <a href="https://t.co/sp2xo62dPh">pic.twitter.com/sp2xo62dPh</a></p>&mdash; 田中良道 (@RyodoTanaka) <a href="https://twitter.com/RyodoTanaka/status/1598637736084525058?ref_src=twsrc%5Etfw">December 2, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


現時点でこの威力。。。想像以上です。。。
今後が楽しみですね！！！

### ちなみにChatGPTとは違いますが

Code as Policies:
Language Model Programs for Embodied Control

https://code-as-policies.github.io/

上記のCode as Policiesというのは、Googleが提案しているものですが、こちらもコード生成をしております。
良ければ覗いてみてください！

ブログもおもしろいです！
https://research.google/teams/robotics/


### おまけ（ChatGPT）

- ロボットに適した言語は？
![Screenshot from 2022-12-03 07-40-14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/351913/705307e5-5bf9-6c40-a866-faf1f8d5b7a9.png)

- 九九
![Screenshot from 2022-12-03 07-30-36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/351913/a9eb751d-4c7c-59e0-2264-9d86f74f3677.png)

- DWA(Dynamic Window Approach)
![Screenshot from 2022-12-03 07-31-45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/351913/c681c9b5-9fbc-8b82-be74-7e0c06d38132.png)

- Roboticsとは
![Screenshot from 2022-12-03 07-36-59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/351913/d669c7f5-7208-58c0-c007-80f1cb71b511.png)

- 知能とは
![Screenshot from 2022-12-03 07-37-59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/351913/7e0a4738-3dd1-c034-4805-e7fa13d58d16.png)

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">PythonとC++の違いを聞いてみた <a href="https://t.co/p57CCSgaLV">pic.twitter.com/p57CCSgaLV</a></p>&mdash; るっと🐨 Ph.D. 🤖 (@MeRTcooking) <a href="https://twitter.com/MeRTcooking/status/1598357199767900160?ref_src=twsrc%5Etfw">December 1, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">ChatGPTにDWA実装させてみた笑 <a href="https://t.co/GQ3R98OKLR">pic.twitter.com/GQ3R98OKLR</a></p>&mdash; るっと🐨 Ph.D. 🤖 (@MeRTcooking) <a href="https://twitter.com/MeRTcooking/status/1598352130745978883?ref_src=twsrc%5Etfw">December 1, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

### おわりに
お読み頂きありがとうございました！
引き続き、ご投稿[「基盤モデル×Robotics」のAdvent Calendarへのご投稿](https://qiita.com/advent-calendar/2022/robot-ai)もお待ちしております！！！(明日(12/4)の人がまだいません。。。)

本日は軽めの記事ですみませんが、今後共何卒よろしくお願いします！


拡散RTを何卒です。。。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">【🎉基盤モデル×Robotics 3日目 投稿🎉】<br><br>タイトル：ChatGPTでロボットのコード生成はできるのか？ <br><br>本日投稿者いなかったのでピンチヒッターです！<br>ゆるめの記事ですが話題にのっかりました！<br>明日の投稿者もいない...（誰か...👀）<br><br>今後共よろしくお願いします！<a href="https://t.co/0PojBI1jUf">https://t.co/0PojBI1jUf</a></p>&mdash; るっと🐨 Ph.D. 🤖 (@MeRTcooking) <a href="https://twitter.com/MeRTcooking/status/1598815010737659904?ref_src=twsrc%5Etfw">December 2, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# 参考文献
https://qiita.com/sakasegawa/items/82069c97a1ee011c2d1e

https://chat.openai.com/chat