10
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

基盤モデル×RoboticsAdvent Calendar 2022

Day 3

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

Last updated at Posted at 2022-12-02

はじめに

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

いいね&拡散RTうれしいです!

では、本題へ!

ChatGPTとは

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

ChatGPTに聞いてみよう!

ChatGPTにChatGPTについて聞く

Screenshot from 2022-12-03 07-18-34.png

ChatGPTにChatGPTのデメリットについて聞く

Screenshot from 2022-12-03 07-21-07.png

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

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

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

2リンクロボットアームの順運動学をpythonで実装

Screenshot from 2022-12-03 07-24-48.png

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

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

Screenshot from 2022-12-03 07-26-46.png

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

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で動くコードが...

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

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

コードの書き換えも.....

ROS1を使用して、hiというメッセージをpub、subするノードをpythonで書いてみて

以下が生成されました。

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

#!/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()

#!/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

Screenshot from 2022-12-03 23-26-29.png

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

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

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

RRT(ランダム探索手法)

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

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

Code as Policies:
Language Model Programs for Embodied Control

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

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

おまけ(ChatGPT)

  • ロボットに適した言語は?
    Screenshot from 2022-12-03 07-40-14.png

  • 九九
    Screenshot from 2022-12-03 07-30-36.png

  • DWA(Dynamic Window Approach)
    Screenshot from 2022-12-03 07-31-45.png

  • Roboticsとは
    Screenshot from 2022-12-03 07-36-59.png

  • 知能とは
    Screenshot from 2022-12-03 07-37-59.png

おわりに

お読み頂きありがとうございました!
引き続き、ご投稿「基盤モデル×Robotics」のAdvent Calendarへのご投稿もお待ちしております!!!(明日(12/4)の人がまだいません。。。)

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

拡散RTを何卒です。。。

参考文献

10
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?