PS3コントローラでjetbotを動かす

main.py

from jetbot import Robot
import rospy
from sensor_msgs.msg import Joy
from geometry_msgs.msg import Twist
import time
robot = Robot()

def stop():
    robot.stop()

def step_forward():
    robot.forward(0.4)
    time.sleep(0.5)
    robot.stop()

def step_backward():
    robot.backward(0.4)
    time.sleep(0.5)
    robot.stop()

def step_left():
    robot.left(0.3)
    time.sleep(0.2)
    robot.stop()

def step_right():
    robot.right(0.3)
    time.sleep(0.2)
    robot.stop()


class JoyTwist(object):
    def __init__(self):
        self._joy_sub = rospy.Subscriber('joy', Joy, self.joy_callback, queue_size=1)
        self._twist_pub = rospy.Publisher('cmd_vel', Twist, queue_size=1)

    def joy_callback(self, joy_msg):
        if joy_msg.buttons[0] == 1:
            print('backward')
            step_forward()
        if joy_msg.buttons[1] == 1:
            step_right()
            print('right')
        if joy_msg.buttons[2] == 1:
            print('forward')
            step_backward()
        if joy_msg.buttons[3] == 1:
            print('left')
            step_left()

if __name__ == '__main__':
    rospy.init_node('joy_twist', disable_signals=True)
    joy_twist = JoyTwist()
    print('joy_twist init')
    rospy.spin()

PS3コントローラがつながっているホストPCで以下を実行

$ roscore
別ターミナル
$ rosrun joy joy_node

Jetson Nanoでmain.pyを起動する。

Object detectionと組み合わせたらマジで面白かった
f:id:seinzumtode:20220107162854p:plain