はじめに
基盤モデル×RoboticsのAdventCalendarの3日目です!
カレンダーものぞいてみてくださいー!
https://qiita.com/advent-calendar/2022/robot-ai
一日目に基盤モデルのお話を書いてますので、ぜひ!
【🎉基盤モデル×Robotics 1日目 投稿🎉】
— るっと🐨 Ph.D. 🤖 (@MeRTcooking) December 1, 2022
タイトル:基盤モデルとは
東京大学 松尾研究室が主催する「基盤モデル×Robotics」に関するAdvent Calendarの1日目を投稿しました!
リンクのカレンダー(12/1)から記事を是非読んでください🎄#拡散希望RT #adventcalendar2022 https://t.co/mcTe4RAEMD
いいね&拡散RTうれしいです!【🎉基盤モデル×Robotics 3日目 投稿🎉】
— るっと🐨 Ph.D. 🤖 (@MeRTcooking) December 2, 2022
タイトル:ChatGPTでロボットのコード生成はできるのか?
本日投稿者いなかったのでピンチヒッターです!
ゆるめの記事ですが話題にのっかりました!
明日の投稿者もいない...(誰か...👀)
今後共よろしくお願いします!https://t.co/0PojBI1jUf
では、本題へ!
ChatGPTとは
OpenAIが開発するGPT-3(※)という大規模言語モデルをベースとしたチャットアプリです。
実際のにどんな事ができるか見てみましょう!
ChatGPTに聞いてみよう!
ChatGPTにChatGPTについて聞く
ChatGPTにChatGPTのデメリットについて聞く
なんとなくChatGPTのイメージはついたでしょうか?
数秒以内に返答がきます...これはとてつもなく凄いですね!
ChatGPTでロボットコード生成できる?
なんかロボットコードも生成できそうなのでは?と思い、恐る恐る聞いてみました。。。
2リンクロボットアームの順運動学をpythonで実装
やはり、無理なのでしょうか・・・
2リンクロボットアームの順運動学の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コード
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で動くコードが...
具体的にPubSubのmsg型指定するとそのままROSで動くコード書いてくれる https://t.co/2mAKc2cUDx pic.twitter.com/EJ2o6Bybgv
— porizou (@porizou1) December 3, 2022
ここまでできてしまうのか.....
C++のROSのプログラムPythonに書き直してくれる
C++のROSのプログラムPythonに書き直してくれる#ChatGPT pic.twitter.com/6iUvARAY2k
— porizou (@porizou1) December 2, 2022
コードの書き換えも.....
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では、ノードやトピック、メッセージなどの一部の概念が異なるため、詳細はドキュメントを確認する必要があります。
すごい。。。。
なぜ分割したファイルと理解できた。。。
1次遅れ系に対する2次元のMPC制御器をC++で
ふぁーーーーーーーーwwwwwwwwwww
— 田中良道 (@RyodoTanaka) December 2, 2022
田中「1次遅れ系に対する2次元のMPC制御器をC++で書いて.」
AI「OK」
約20秒後...
AI「でけた」
田中「ふぁーーーーーwwwwwwwwwww」
完璧ではないが,やべぇwwwwwwwwwwwwwwwww#OpenAI pic.twitter.com/LNUaUhXtN4
どこまでいくのか。。。。
RRT(ランダム探索手法)
いやいやいやwwwwwwww
— 田中良道 (@RyodoTanaka) December 2, 2022
RRT書けるんかいwwwwwwwwwwwww
まじかよwwwwwwwwwwwwwwww
しかも数秒でwwwww
新しい仕事考えないかんな😇#OpenAI pic.twitter.com/sp2xo62dPh
現時点でこの威力。。。想像以上です。。。
今後が楽しみですね!!!
ちなみにChatGPTとは違いますが
Code as Policies:
Language Model Programs for Embodied Control
上記のCode as Policiesというのは、Googleが提案しているものですが、こちらもコード生成をしております。
良ければ覗いてみてください!
ブログもおもしろいです!
https://research.google/teams/robotics/
おまけ(ChatGPT)
PythonとC++の違いを聞いてみた pic.twitter.com/p57CCSgaLV
— るっと🐨 Ph.D. 🤖 (@MeRTcooking) December 1, 2022
ChatGPTにDWA実装させてみた笑 pic.twitter.com/GQ3R98OKLR
— るっと🐨 Ph.D. 🤖 (@MeRTcooking) December 1, 2022
おわりに
お読み頂きありがとうございました!
引き続き、ご投稿「基盤モデル×Robotics」のAdvent Calendarへのご投稿もお待ちしております!!!(明日(12/4)の人がまだいません。。。)
本日は軽めの記事ですみませんが、今後共何卒よろしくお願いします!
拡散RTを何卒です。。。
【🎉基盤モデル×Robotics 3日目 投稿🎉】
— るっと🐨 Ph.D. 🤖 (@MeRTcooking) December 2, 2022
タイトル:ChatGPTでロボットのコード生成はできるのか?
本日投稿者いなかったのでピンチヒッターです!
ゆるめの記事ですが話題にのっかりました!
明日の投稿者もいない...(誰か...👀)
今後共よろしくお願いします!https://t.co/0PojBI1jUf
参考文献