rubyによるROSのクライアント rosrubyを試しに作ってみました。
https://github.com/OTL/rosruby
簡単なドキュメントはこっちを参照ください。
基本的に書いてある通りにやれば動くと思います。
https://github.com/OTL/rosruby/wiki/rosruby
まだ完全な動作を保証するレベルではないのですが、
デザインも含めてフィードバックいただきたく公開することにしました。
本当にプロトタイプそのままです。
ちょっとrubyっぽいのはSubscriberのcallbackをsubscribeの後にブロックで書けるところですかね。
Callbackの型が決まっているとノードクラスにCallback専用関数を用意しなくちゃいけなくなりますが、この形式だと本来のデザイン通りのクラス設計ができるかと思います。
また、roscpp, rospyは1ノード1プロセスですが、rosrubyは複数のノードを1プロセスで使えるようにしてみました。rosjavaもそうなっているし、できるならできたほうがいいかと。
中身の設計は前述のようにプロトタイプそのまんまなんで、ユーザが使う各クラスが結構実装丸出しなので、インタフェース用のクラスと実装を分けたいと思っています。
また、中身でrospackを使っていたりとまだまだやりたいことがいっぱいです。
ですが、とりあえずこれでロボットを動かそうかと思っています。
(まだ自分でもサンプルとテストしか使っていないので。やっぱロボット動かしてなんぼですよね。)
-
-
- require 'ros'
- require 'std_msgs/String'
-
- node = ROS::Node.new('/rosruby/sample_subscriber')
- node.subscribe('/chatter', Std_msgs::String) do |msg|
- puts "message come! = \'#{msg.data}\'"
- end
-
- while node.ok?
- node.spin_once
- sleep(1)
- end
#!/usr/bin/env ruby
require 'ros'
require 'std_msgs/String'
node = ROS::Node.new('/rosruby/sample_subscriber')
node.subscribe('/chatter', Std_msgs::String) do |msg|
puts "message come! = \'#{msg.data}\'"
end
while node.ok?
node.spin_once
sleep(1)
end