7
5

More than 5 years have passed since last update.

rosgoを使ってgoでros nodeを作る

Last updated at Posted at 2016-02-06

rosgoのドキュメントが特に見当たらないので使い方をまとめる。catkinで結構やれるっぽい。catkinビルドシステムに慣れていないのでとてもめんどくさい。

golangとロボット制御とか分散ノード作るのって凄い親和性高いと思うのでrosにつなげるのは良い。ros使わずにgobotでやりたいけど。

2016/02/19に構成が結構変わったので一部修正

環境設定

ubuntu 14.04 LTS環境を前提とする。macでもvagrantなんかでやってください。goは1.5.3で動作確認。goのインストールはgvm何かを使ってやってください。

goのインストール

一応書く

$ bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
$ gvm install go1.4
$ gvm use go1.4
$ gvm install go1.5.3
$ gvm use go1.5.3

どうせcatkinでGOPATH書き換えるので、pkgsetとかは使わなくて良い。

rosのインストール

ros周りインストール

$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu trusty main" > /etc/apt/sources.list.d/ros-latest.list'
$ wget http://packages.ros.org/ros.key -O - | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get install ros-indigo-desktop-full
$ sudo apt-get install python-rosinstall

ros初期化

$ sudo rosdep init
$ rosdep update
$ echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc
$ source ~/.bashrc

rosgoの環境構築

catkin workspaceの作成

rosgo周りのパッケージや、自作のrosgoパッケージを保存する場所を初期化する. ここでは~/rosgo_wsとする

$ cd ~/rosgo_ws 
$ mkdir src
$ cd src
$ catkin_init_workspace

パッケージのダウンロード

$ cd ~/rosgo_ws/src
$ git clone git@github.com:akio/rosgo.git  # rosgoのメタパッケージ
$ git clone git@github.com:akio/gengo.git  # msgからstructを生成するライブラリ
$ git clone git@github.com:akio/rosgo_messages.git  # buildツール
$ git clone git@github.com:akio/rosgo_tests.git  # rosgoのサンプル

ビルドしてみる

$ cd ~/rosgo_ws/
$ catkin_make

catkin_makeで、goのソースなどが~/rosgo_ws/devel/lib/go/src以下に配置される。rosgo_testの中に定義されているmessageのstructも、gengoを元に、~/rosgo_ws/devel/lib/go/src/rosgo_testsに生成されている。

また、実行ファイルが、~/rosgo_ws/devel/lib/go/pkg/以下に作成されている。

rosgo_testの実行

作成したワークスペースに関する環境変数の読み込みを行い、rosrunでnodeを起動する

$ source ~/rosgo_ws/devel/setup.bash
  • roscore実行
$ roscore
  • node実行
rosrun rosgo_tests test_listener

nodeが起動する。あとは、このrosgo_testsの構成を真似て、rosのnodeをgolangで書いていけば良さそう。

独自のライブラリの配置等

~/rosgo_ws/devel/lib/go/をGOPATHにする必要が有るので、go get先をこちらにするようにgo pathを書き換える処理を入れる。多分こんな感じでgo getすれば良い。多分。要検証

GOPATH=~/rosgo_ws/devel/lib/go/ go get hoge

適当なパッケージを作って(この場合はrosgo_cmakeとする)、その中にこんな感じのcmake scriptを入れておくとCmakeListの中で依存パッケージを記述しておけばcatkinのdevel以下にパッケージを落とせる。

rosgo_cmake/cmake/rosgo_cmake-extras.cmake.em
function(rosgo_get package)
        set(old_gopath "$ENV{GOPATH}")
        set(ENV{GOPATH} "${CATKIN_DEVEL_PREFIX}/lib/go/")
        execute_process(
           COMMAND go get "${package}"
            )
        set(ENV{GOPATH} "${old_gopath}")
endfunction()

使うときはCMakeLists.txtの中でこんな感じに記載するとGOPATHを気にしなくて良くなる

rosgo_get("golang.org/x/net/context")

rosgoでパッケージを作る

後で追記

7
5
2

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
7
5