(u_u)

ROS kinetic:Roomba + Wiimote

ルンバをWiiリモコンで操作する。

ソフトウェアの準備

ROS Kinetic自体のインストール方法は省略します。

  1. wiimoteのインストール
    $ sudo apt install ros-kinetic-wiimote
  2. "create_autonomy"のインストール
ハードウェアの準備
  1. USB <=> シリアル変換ケーブルのRXをルンバのTX、TXをRXに接続する。
サンプルコード
#! /usr/bin/env python
import rospy
from geometry_msgs.msg import Twist
from sensor_msgs.msg import Joy

class Wiimote():
    button = {"up": 8,
              "down": 9,
              "left": 6,
              "right": 7,
              "1": 0,
              "2": 1,
              "A": 2,
              "B": 3,
              "plus": 4,
              "minus": 5,
              "home": 10
              }

def callback_button(data):
    wiimote = Wiimote()
    twist = Twist()

    if data.buttons[wiimote.button["up"]]:
        twist.linear.x = 0.3
        print("up")

    elif data.buttons[wiimote.button["down"]]:
        twist.linear.x = -0.3
        print("down")

    elif data.buttons[wiimote.button["left"]]:
        twist.angular.z = 2
        print("left")

    elif data.buttons[wiimote.button["right"]]:
        twist.angular.z = -2
        print("right")

    else:
        twist.linear.x = 0
        twist.angular.z = 0

    pub.publish(twist)

def callback_handle(data):
    wiimote = Wiimote()
    twist = Twist()

    if data.buttons[wiimote.button["1"]]:
        twist.linear.x = 0.2
        twist.angular.z = data.axes[1] / 10 * 2

    pub.publish(twist)

# Intializes everything
def start():
    rospy.init_node('wiimote_to_roomba')
    mode = rospy.get_param("mode")

    if (mode == "button"):
        rospy.Subscriber("joy", Joy, callback_button)
    elif (mode == "handle"):
        rospy.Subscriber("joy", Joy, callback_handle)

    global pub
    pub = rospy.Publisher('cmd_vel', Twist)
    rospy.spin()

if __name__ == '__main__':
    start()
launchファイルの作成

pythcarm上でlaunchフォルダを作成する。
catkin_ws/roomba_wiiremote/src/launch/roomba.launchを作成する。

<launch>
    <arg name="mode"/>
    <node pkg="ca_driver" name="roomba_driver" type="ca_driver"></node>
    <node pkg="begginer_turtorials" name="talker" type="talker.py"></node>
    <param name="mode" value="$(arg mode)"/>
</launch>