RubyとROS 2

普段仕事でROSを触るときはPythonかC++を利用することになるが、Ruby好きとしては、やはりRubyでもノードを書いたりしたくなる。

ということで、すこし調べてみた。

ROS 2以前

調べるとROS 2ではなくて、ROSに関する取り組みはあるようだった。

GitHub - OTL/rosruby: ruby ROS client.
ruby ROS client. Contribute to OTL/rosruby development by creating an account on GitHub.

九州工業大学の田中先生の研究室の学生さんの記事。対象はNoetic。

【Ruby】RubyでROSを動かしてみた - Qiita
九州工業大学 田中和明研究室の大学院生です。Rubyと産業用ロボットに関する研究に携わっています。背景ROSでロボットを動かす場合、一般的にはPythonやC++を使用したプログラムが基本です。…

ROS 2対応のrclrb

やはり今ならROS 2使いたいので、調べてみると1つだけ見つかった。

2024年5月の記事。

rclrb: bindings for using ROS2 with Ruby
Hi everyone, I am happy to announce here bindings to use ROS2 RCL with the Ruby programming language. The bindings have been stable for a few months now and are ready for more wide spread usage. Feel free to report any issue on the gitlab tracker. The bindings can be installed as a gem or as a colcon package. Instructions can be found in the readme of the repository: Documentation is sparse, but the API is generally similar to Python/C++ one. The main difference is that the only available ex…

リポジトリ

rosrb / rclrb · GitLab
GitLab.com

FFIでrclをラップしてRubyから使えるようにしてある実装で、コードもシンプルで素敵です。

動かしてみる

サンプルコードを動かしてみる。Pythonで書いたような雰囲気でROSのノードが書けている。

Publisher

require 'rclrb'

require 'std_msgs/msg'

class MinimalPublisher < Rclrb::Node
  def initialize()
    super("publisher_node")
    string_msg = StdMsgs::Msg::String.new
    string_msg.data = "Hello World!"
    pub = self.create_publisher(StdMsgs::Msg::String, "topic", 1)
    @timer = self.create_timer(1.0) do |time|
      pub.pub(string_msg)
    end
  end
end

def main(args)
  Rclrb.init(arguments: args)

  Rclrb.spin(MinimalPublisher.new)
end

if $0 == __FILE__
  main(ARGV)
end

Subscriber

require 'rclrb'

require 'std_msgs/msg'

$stdout.sync = true

class MinimalSubscriber < Rclrb::Node
  def initialize
    super("subscriber")
    self.create_subscription(StdMsgs::Msg::String, "topic", 1) { |msg| puts msg.data }
  end
end

def main(args)
  puts "start subscriber node"
  Rclrb.init(arguments: args)
  Rclrb.spin(MinimalSubscriber.new)
end

if $0 == __FILE__
  main(ARGV)
end

ROSのインストールとか大変なので、Dockerで簡単に試してみる環境を準備しました。

GitHub - kishima/try-rclrb
Contribute to kishima/try-rclrb development by creating an account on GitHub.

実行結果

$ docker compose up
[+] Running 1/1
 ✔ Container try-rclrb-ros-nodes-1  Created                                                                                     0.2s
Attaching to ros-nodes-1
ros-nodes-1  | run publisher node
ros-nodes-1  | ros2 node list
ros-nodes-1  | /publisher_node
ros-nodes-1  | ros2 topic list
ros-nodes-1  | /parameter_events
ros-nodes-1  | /rosout
ros-nodes-1  | run subscriber node
ros-nodes-1  | start subscriber node
ros-nodes-1  | Hello World!
ros-nodes-1  | Hello World!
ros-nodes-1  | Hello World!

細かいところ対応してなさそうだが、シンプルな使い方なら普通に使えそうと感じた。必要があれば、自力でrcl叩いて拡張することもできそう。

こちらも踏まえて、mruby絡めたり、いろいろ可能を探っていきたいと思って色々試しているところです。

Read more

PicoRubyを理解する1

PicoRubyA Ruby interpreter implementation for one-chip microcontrollers - PicoRubyGitHub ちゃんと中身を理解できてなかったので、コードや資料を読んで理解したい。 特にパーサーやVMの周りをどうやって小さくできているのか。 まずは基礎知識から。 公式情報 PicoRuby DocumentationAPI documentationPicoRuby Documentation 羽角さんの資料 2025 MicroRuby: True Microcontroller RubyRubyKaigi 2025, #rubykaigiRubyKaigiRubyKaigi 2025 で発表したMicroRubyとはなんだったのかMicroRuby: True Microcontroller Ruby というタイトルの発表をしました。hasumikin MicroRubyとは? Ruby会議には参加できてないので、詳細はブログの記事からの理解ですが、以下のような、図のような感じなのかと

By kishima
JetCobotとJetson Orin NXを迎えた

JetCobotとJetson Orin NXを迎えた

JetCobot 最近本業でロボットアームを扱う機会があり、いろいろ新しく知識も得たので、その経験を生かしてRubyと組み合わせていろいろ試してみたいと思って、個人でも買えるロボットアームを探してみた。 ElephantRoboticsのmyCobot280が手ごろで扱いやすそうなので、こちらを購入してみることにした。単体で買うとグリッパーや台座などついてなかったり、SwitchScience経由で買ったりするとちょっと高くなったりするのだけど、YahboomのJetCobotだと、一式揃って、加えてJetsonも付いて安かったので、そちらをAmazonで注文した。 香港からの発送で、1週間ほどでUPSで届いた(配達はヤマトだった)。 組み立ては難しくなく、JetsonNanoをケースに収めて、本体とUSB接続して、電源を入れると自動で起動する。(付属の無線は使わないでおく) myCobot本体はUSBシリアルで認識されており、それをPythonで制御している。 チュートリアルに従えば、紹介動画にあるような画像認識と制御のデモも簡単に試せそう。 Jetson Orin

By kishima

M5シリーズのESP-IDF開発環境をWSL2&Dockerで作る

この記事は、M5Stack Advent Calendar 2024 に参加してます。 久しぶりのM5、ESP32 いろいろと作ってみたいものはありつつも、なかなか手がつかない日々でしたが、試したいことができたので久しぶりにM5シリーズのデバイスを買ってみました。 買ってみたのは、ESP32 PSRAM Timer Cameraです。こちらを使って、HTTPSでクラウドのサービスにつないでみるのが目的です。 で、今後また色々ビルドしたり、ESP32の機能を使うためにESP-IDF上で開発をしたいと思い準備しました。 ESP-IDFの環境はバージョンによってしばしば互換性が失われるので、昔のコードが最新Verでビルドできないのはしょっちゅうあるかと思います。そのときESP-IDFバージョンを上げ下げするのも大変です。 なので、試行錯誤するにはDockerで環境を作れると何かと便利です。その内容を共有したいと思います。環境はWSL2です。 準備 基本的には、公式の手順を読めばわかる内容ではありますが、すこし躓いた点もあったのでそのあたり説明したいと思います。 ビルド

By kishima