はじめに
みなさん,Pythonは好きですか?
僕は好きじゃないです(嫌いとは言っていない)。
そこで,Pythonに代わる言語としてJuliaを使ってROS2のPub/Subをやってみようと思います。
追記
ROS1ではhttps://github.com/jdlangs/RobotOS.jl というライブラリが使えそうです.
また,そのうちROS2サポートもされるらしいです.
Juliaのインストール
ここからダウンロードしてインストールしてください。
https://julialang.org/downloads/
ROS2のインストール
ここが詳しいです。
https://qiita.com/k-koh/items/838c70004119c329c617
JuliaにPyCallを追加
JuliaのREPLを起動します。
$julia
_
_ _ _(_)_ | Documentation: https://docs.julialang.org
(_) | (_) (_) |
_ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help.
| | | | | | |/ _` | |
| | |_| | | | (_| | | Version 1.4.1 (2020-04-14)
_/ |\__'_|_|_|\__'_| | Official https://julialang.org/ release
|__/ |
起動したら,]
キーを押します。
すると,以下のような文字列が表示されると思います。
(@v1.4) pkg>
ここで以下を入力します。
add PyCall
これでエラーが出なければパッケージの追加は完了です。
コード(Pub)
pub.jl
using PyCall
rclpy = pyimport("rclpy")
Node = pyimport("rclpy.node")
String = pyimport("std_msgs.msg")
rclpy.init()
node = Node.Node("talker")
pub = node.create_publisher(String.String, "chatter", 10)
msg = String.String()
msg.data = "Hello"
pubmsg() = pub.publish(msg)
timer = node.create_timer(0.5, pubmsg)
rclpy.spin(node)
node.destroy_timer(timer)
node.destroy_node()
rclpy.shutdown()
コード(Sub)
sub.jl
using PyCall
rclpy = pyimport("rclpy")
Node = pyimport("rclpy.node")
String = pyimport("std_msgs.msg")
rclpy.init()
node = Node.Node("listener")
submsg(msg) = println(msg.data)
sub = node.create_subscription(String.String, "chatter", submsg, 10)
rclpy.spin(node)
node.destroy_node()
rclpy.shutdown()
動作
$julia pub.jl&
$julia sub.jl
Hello
Hello
Hello
...
まとめ
JuliaでROS2のPub/Subを動かすことができました。
これでJuliaとロボットを連携させることができるとわかりました。
とはいっても,PyCallでPythonのrclpyを呼び出して使っているだけなのでrcljl(?)が欲しいです。