LoginSignup
1
4

More than 5 years have passed since last update.

Virtualbox内のROSからGoPiGoを動かす

Last updated at Posted at 2018-09-24

前置き

大学の研究室でGoPiGoをrosで動かしてみようということになりました。
PCを一台用意し、その上にrosの環境を整えてやってみるという話だったのですが、
その前に自分のPC上から動かしてみようということで試してみました。
やっと動いたので、自分が実際にやった部分の流れをメモっていきたいと思います。

前提

PC側の設定

  • ホストOS : Windows10
  • 仮想マシン : Virtualbox
  • ゲストOS : ubuntu 16.04

GoPiGo側の設定

  • GoPiGo : GoPiGo3
  • RaspberryPi :Raspberry Pi 3 model B
  • OS : ubuntu mate 16.04

ゲストOSにはubuntu16.04がはいっており、GoPiGoにはubuntu mate16.04 が入っていることを前提とします。

環境構築は以下のページを参考にしました。

PC側の設定
【初心者でもわかる】VirtualBoxインストール方法を詳しく!
VirtualBoxにUbuntu 16.04をインストールする前にやること

GoPiGo側の設定
第48回「ラズベリーパイにUbuntu MATEをインストール!」
ROSでgopigo3を走らせる

作業の流れ

  1. Virtualboxのネットワークアダプタを「ブリッジ接続」にする。
    ※Windowsファイヤーウォールについても
  2. ゲストOSに「ROS」を入れる
  3. GoPiGoに「ROS」を入れる
  4. プログラムを書く
  5. プログラムを実行

1. Virtualboxのネットワークアダプタを「ブリッジ接続」にする。

GoPiGoを遠隔操作するためには、Virtualbox内の環境をGoPiGoと同じネットワークに接続する必要があります。
ブリッジ接続にすると、ホストマシンと同じネットワークに接続できるようになるため、その設定にします。

※以下のサイトを参考にしました。
【いまさら聞けない!エンジニアの基本シリーズ】 第2回 VirtualBox基本動作編

※無線で通信を行うため、無線通信のモジュールをブリッジに設定します。

☆Windowsのファイやウォールが邪魔をする。

環境によっては、Windows内のファイやウォールが理由でつながらない可能性があります。

自分の場合は、Symantecが起動していたため、GoPiGoとの相互通信ができませんでした。
そのため、GoPiGoと通信する時のみ、Symantecを無効にします。

※GoPiGoの通信が終わったら、Symantecを有効に戻してください。
※常に通信できるようにしたい場合は別途ファイやウォールの設定をいじくってみてください。

2. ゲストOSに「ROS」を入れる。

Virtualbox内のUbuntuに ROS Kinetic を入れる。

※以下のページを参考にしてインストールしました。
ROS Kinetic の Ubuntu へのインストール

ゲストOS内で実行

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
sudo apt-get update
sudo apt-get install ros-kinetic-desktop-full
sudo rosdep init
rosdep update
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
sudo apt-get install python-rosinstall

3. GoPiGoに「ROS」を入れる。

GoPiGo内のUbuntuに ROS Kinetic をいれる。
流れはVirtualboxの際とほとんど同じです。

※以下のページを参考にしてインストールしました。

ROS Kinetic の Ubuntu へのインストール
ROSでgopigo3を走らせる

GoPiGoで実行

2. ゲストOSに「ROS」を入れる や、上記の ROSでgopigo3を走らせる を参照してください。
※なお、GoPiGo内で実行してください。

4. プログラムを作成する。

GoPiGoと、ゲストOS内に、それぞれ必要なプログラムを作成していきます。

全体の構造としては以下のようになっています。
ゲストOS内でros masterとpublisherを動作させ、GoPiGo内でsubscriberを動作させます。
GoPiGo内のプログラムは、ゲストOS内のros masterを利用して通信するようにする。

基本的にゲストOS(Publisher)から指示を送り、GoPiGo(Subscriber)がそのデータを受け取り動作するという構成になっています。

ゲストOS側のプログラム

ゲストOS側では、基本的に移動の指示をGoPiGoに送ります。
※ファイル名はdirector.pyとする。

# director.py

#!/usr/bin/env python

import rospy
from std_msgs.msg import Float64

def straight_move_in(dict):

  pub = rospy.Publisher('gopigo', Float64, queue_size = 10)
  rospy.init_node('director', anonymous=True)
  pub.publish(dict)

if __name__ == "__main__":
  #10cmだけGoPiGoを前に進める
  straight_move_in(10)

GoPiGo側のプログラム

GoPiGo側では、送られてきた値の分だけ前進するようになっています。
※ファイル名はmove_gopigo.pyとする。

# move_gopigo.py

#!/usr/bin/env python
import rospy
import easygopigo3 as easy
from std_msgs.msg import Float64

gpg = easy.EasyGoPiGo3()

#Subscriberのcallback関数
#この中でgpgの様々な処理をさせる

def gopigo_callback(dist):
  #指定したcmだけ前に進む。
  gpg.drive_cm(dist.data, blocking=False)

def move_gopigo():
  rospy.init_node('gopigo_body', anonymous=True)
  rospy.Subscriber('gopigo', Float64, gopigo_callback)
  rospy.spin()

if __name__ == '__main__':
  move_gopigo()

5. プログラムを実行

ゲストOSGoPiGo側でそれぞれ作成したプログラムを実行していく。

ゲストOS側で ROS Master を起動

はじめに、ゲストOS側でROS Masterを実行するため、roscoreを実行

roscore

GoPiGo側のプログラムの実行

GoPiGo側ではまず、ROS masterのIPアドレスを設定する必要があります。

export ROS_MASTER_URI=http://<ゲストOSのIPアドレス>:11311

また、複数の媒体でする場合は、機体それぞれのIPアドレスを改めて設定してあげる必要がある。

export ROS_IP=<GoPiGoのIPアドレス>

その後、ゲストOSからの指示を受ける move_gopigo.py を実行。

python move_gopigo.py

ゲストOS側のプログラムを実行

ゲストOSも同様に自らのIPアドレスを指定

export ROS_IP=<ゲストOSのIPアドレス>

最後に、GoPiGoに指示を出す director.py を実行する。

python director.py

これでGoPiGo3が動作しました。

1
4
0

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
1
4