カムロボで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
感想
すごく楽しい。もっと知識があればもっといろいろなことに使えそうだと思う。もっと知識つけたい。