てきとうなさいと べぇたばん

カムロボでROSとUnityとRaspberry Piでラジコンつくった

TOP > てきとうにこらむ > ゲーム作りとプログラミング日記 > カムロボでROSとUnityとRaspberry Piでラジコンつくった

カムロボにラジコン機能をつけた。

カムロボでROSとUnityとRaspberry Piでラジコンつくった

ROS(Robot Operationg System)でRaspberry PiにあるハードウェアやOSのコマンドを制御するソフトウェアプラットフォームがある。 OSとあるが、どっちかというとミドルウェアとかフレームワークの一種らしい(Wikipediaより)。

これを利用して、ラジコンを作ることにした。やっぱラジコンだろ。

OS部分

Ubuntu 20.04を使ってる。Raspberry Piは3A+。

回路部分

自作のHT7750Aを2つくっつけたRaspberry PiのHATを作った。カメラはEntaniyaのVR220カメラ。

進化した部分

  • カメラを搭載することによって、カメラでの撮影をしながら操作をすることができるようになった。Arduinoでラジコンを作ったときはそんなことができなかったのですばらしい。
  • OSでの制御なのでPythonなどが使える。Pythonが使えるとOpenCVとか使えそう。
  • Unityを使えるので、Assetが使える。また、ROS-sharpが使うので通信が共通化してる

面倒くさい部分

  • Unityわかんない
  • OSのシャットダウン
  • WiFiどうしよう(今は自宅のWi-Fiに繋いでる)

シャットダウンはこうやってる

Unity上

Unity上でボタンを設置する。Topicをshutdown/shutdownとしとく。

ROS上では

~/catkin_ws/src/

$ catkin_create_pkg shutdown rospy std_msgs
$ cd shutdown/src
$ vi shutdown.py

shutdown.py にてsubscriberを書く、データを読み取ったらシャットダウン。

#!/usr/bin/env python3
import rospy
from std_msgs.msg import String
import os


def shutdown_command(msg):
    rospy.loginfo("shutdown " + msg.data)
    os.system('sudo shutdown -h now')


rospy.init_node('shutdown_subscriber', anonymous=False)

try:
    rospy.Subscriber('shutdown/shutdown', String, shutdown_command)
except:
    import traceback
    traceback.print_exc()

rospy.spin()

catkin build を行ってビルドする

$ catkin clean # これいれないとThe build space at '/home/ubuntu/catkin_ws/build' was previously built by 'catkin_make'. Please remove the build space or pick a different build space.というエラーがでた
$ catkin build

systemdに登録しとく

$ cat /etc/systemd/system/rosshutdown.service
[Unit]
Description=ROSCORE launcher
After=roswebsocket.service
Requires=roswebsocket.service

[Service]
User=ubuntu
ExecStart=/usr/bin/screen -S rosmotor -ADm bash -l -c 'rosrun shutdown shutdown.py'
Type=simple
Restart=no
RestartSec=1s

[Install]
WantedBy=multi-user.target
$ sudo systemd enable rosshutdown.service
$ sudo systemd start rosshutdown.service

感想

すごく楽しい。もっと知識があればもっといろいろなことに使えそうだと思う。もっと知識つけたい。