Code Monkey home page Code Monkey logo

onigiri_war's Introduction

onigiri_war

OneNightROBOCON競技「onigiri war」プロジェクト

ロボットで戦車対戦をするようなゲームです。 大砲で撃つ代わりに、カメラでターゲットのARマーカーを読み取ります。

目次

  • インストール
  • 審判サーバー
  • ファイル構成
  • その他
  • 動作環境

インストール

onigiri_warには実機シミュレータがあります。 シミュレータで動かす場合には 4. PC上でシミュレーションする場合も実行してください。

1. ros (kinetic) のインストール

2018年からkineticで開発しています

rosのインストールが終わっている人は2.このリポジトリをクローン まで飛ばしてください。

参考 ROS公式サイトhttp://wiki.ros.org/ja/kinetic/Installation/Ubuntu 上記サイトと同じ手順です。 ros インストール

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

ワークスペース作成

参考http://wiki.ros.org/ja/catkin/Tutorials/create_a_workspace

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
cd ~/catkin_ws/
catkin_make
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

2. このリポジトリをクローン

turtlr_war リポジトリをクローンします。 先程作ったワークスペースのsrc/の下においてください。

cd ~/catkin_ws/src
git clone https://github.com/OneNightROBOCON/onigiri_war

3. 依存ライブラリのインストール

  • pip : pythonのパッケージ管理ツール
  • requests : HTTP lib
  • flask : HTTP server 審判サーバーで使用
# pip のインストール 
sudo apt-get install python-pip
# requests flask のインストール
sudo pip install requests flask
  • aruco (ARマーカー読み取りライブラリ)

opencv必要なのでrosをinstallしてからインストールしてください。

以下のURLからaruco-2.0.19.zipをダウンロード ※バージョンは都度変更する可能性あり (2018/5/14現在 aruco-3.0.9のバージョンではmake時にエラーが発生するためaruco-2.0.19を推奨)

https://sourceforge.net/projects/aruco/files/2.0.19/

cd Downloads/aruco-2.0.19
mkdir build
cd build
cmake ..
make
sudo make install 

4. PC上でシミュレーションする場合

  • ロボットモデルのインストール LetsBotコミュニティのOneNightROBOCONグループで共有されている rulo_sim_package.tar.gz を支持に従いsrc以下に展開

ロボットモデルをコピー

cp -a ~/catkin_ws/src/ros_simulator/models ~/.gazebo/

このリポジトリのフィールド用のGAZEBOモデルにPATHを通す

export GAZEBO_MODEL_PATH=$HOME/catkin_ws/src/onigiri_war/onigiri_war/models/

シェルごとに毎回実行するのは面倒なので上記は~/.bashrcに書いておくと便利です。

5. make

cd ~/catkin_ws
catkin_make

arucoのmakeがうまく行かない場合、下記を試してみてください

catkin_make --pkg ros_aruco -DARUCO_PATH=/usr/local  

インストールは以上です。

サンプルの実行

シミュレータ

シミュレータ、ロボット(turtle_bot),審判サーバー、観戦画面のすべてを一発で起動する。大会で使用するスクリプト。

bash scripts/sim_with_judge.sh

フィールドとロボットが立ち上がったら 別のターミナルで下記ロボット動作スクリプトを実行

bash scripts/start.sh

screenshot at 2018-01-09 23 52 12

↑このようなフィールドが現れロボットが2台出現します。 審判画面も表示されます。

審判サーバーを立ち上げずにシミュレータとロボットのみ立ち上げる場合

roslaunch onigiri_war onigiri_setup_sim.launch

フィールドとロボットが立ち上がったら 別のターミナルで下記ロボット動作スクリプトを実行

bash scripts/start.sh

審判サーバー以外は上記と同じです。

実機

センサなどが立ち上がりロボットを動かす準備

roslaunch onigiri_war onigiri_setup.launch

別のターミナルで

roslaunch onigiri_war action.launch

PCにUSBカメラをつないでマーカー読み取りのみ実験する場合

roslaunch onigiri_war run_with_usbcam.launch

PCにRealSenceをつないでマーカー読み取りのみ実験する場合

roslaunch onigiri_war run_with_realsense.launch

審判サーバー

審判サーバーはonigiri_war_judge/以下にあります そちらのREADMEを参照ください

ファイル構成

各ディレクトリの役割と、特に参加者に重要なファイルについての説明

下記のようなディレクトリ構成になっています。  

onigiti_war
├── onigiri_war
│   ├── CMakeLists.txt
│   ├── launch  launchファイルの置き場
│   │   ├── sim_robot_run.launch  シミュレータ上で2台のロボットを動かすlaunchファイル
│   │   └─ onigiri_setup_sim.launch  Gazeboシミュレータ上でフィールドの生成ロボットを起動、初期化するlaunchファイル
│   │
│   ├── models   GAZEBOシミュレーター用のモデルファイル
│   ├── package.xml
│   ├── scripts    pythonで書かれたROSノード
│   └── world     シミュレータGAZEBO用の環境ファイル
│       ├── field_v0.world  昔のヤツ
│       ├── gen.sh          onigiri_field.world.emから onigiri_field.worldを作成するスクリプト
│       ├── onigiri_field.world  最新のworldファイル
│       └── onigiri_field.world.em  worldファイルのマクロ表記版、こっちを編集する
|
├── onigiri_war_judge   審判サーバー
│   ├── judgeServer.py  審判サーバー本体
│   ├── log   ログがここにたまる
│   ├── marker_set  マーカーの配置設定ファイル置き場
│   ├── picture  観戦画面用画像素材
│   ├── README.md  
│   ├── test_scripts   初期化などのスクリプト
│   └── visualizeWindow.py  観戦画面表示プログラム
|
├── README.md   これ
├── ros_aruco  ARマーカーの読み取りパッケージ
├── rulebook.md  ルールブック(過去版 2017/03の第3回大会のもの)
└── scripts      一発起動スクリプト
    ├─── sim_with_judge.sh   シミュレーターとロボットと審判サーバーの立ち上げ初期化をすべて行う    
    └──  start.sh             赤サイド、青サイドのロボットを動作させるノードを立ち上げるスクリプト

↑ディレクトリと特に重要なファイルのみ説明しています。

その他

カメラの露光時間の設定

実機で動作する場合のカメラの露光時間の設定に関する情報です。 QRコード認識の時に画像ぶれにより認識精度が落ちないように設定が必要

Webカメラの場合

ターミナルを開いて以下を実行

v4l2-ctl -c exposure_auto=1
v4l2-ctl -c exposure_absolute=20

exposure_auto=1で露光の調整をマニュアルに変更し、exposure_absolute=20で露光時間を設定

RealSenseの場合

~/realsense/realsense_camera/launch/includes/nodelet_rgbd_launch.xmlを開き、以下の該当箇所を探す。

<node pkg="nodelet" type="nodelet" name="driver"
        args="load realsense_camera/$(arg camera_type)Nodelet $(arg manager)">

この直下に以下の内容を記載。

<param name="color_enable_auto_exposure" value="0"/>
<param name="color_exposure" value="39"/>

注意点

環境の明るさにより画像が暗くなりすぎるので、環境により適宜調整が必要

推奨動作環境

  • Ubuntu 16.04
  • Ros kinetic 2018年からkineticで開発しています。

onigiri_war's People

Contributors

dashimaki360 avatar yupos0221 avatar tapi-y avatar okatsuka avatar yuki-takaoka-yohana avatar kobarius avatar

Stargazers

K.Nishizawa avatar  avatar Yuki Imai avatar raucha avatar

Watchers

James Cloos avatar takeoverjp avatar  avatar Yuki Imai avatar  avatar  avatar  avatar  avatar

onigiri_war's Issues

ros_simulatorのcatkin_makeでエラー その2

ros_simulatorのcatkin_makeでエラーです。その2

driver_baseのエラーを回避した後、
エラーがgazebo_ros_elevatorが無いという内容に変化

gazeboのプラグインが足りないというエラーだと思うのですが解決策が分かりません。
何か知っていたら教えてください。

gazebo自体がインストールされているのは確認済みです。(Versionは7.0)

#################################################################################
CMake Error at /opt/ros/kinetic/share/catkin/cmake/test/gtest.cmake:323 (_install):
install TARGETS given target "gazebo_ros_elevator" which does not exist in
this directory.
Call Stack (most recent call first):
ros_simulator/CMakeLists.txt:254 (install)

-- Configuring incomplete, errors occurred!
See also "/home/ubuntu/catkin_ws/build/CMakeFiles/CMakeOutput.log".
See also "/home/ubuntu/catkin_ws/build/CMakeFiles/CMakeError.log".
Invoking "cmake" failed
#################################################################################

要望

・Wikiに書かれているQ&Aが前回(第3回)の内容ですので、一旦消しておくのが良いと思います。
contribute権限いただければ対応します。

・ gitignoreに.urdfを追加しておいた方が良いかと思います。

実機リハーサル

本番環境(コースはなくてもOK)での実機動作検証
なるべく早くして課題を抽出したい

フィールド地形を決める

拠点の場所やスタート地点、障害物などの配置を決める。

とりあえず叩きでいい。

それに合わせてGAZEBOの環境も作る

制約

  • ワンダーラボに収まるサイズ。
  • 無茶苦茶金がかからない

Groupタグ内でnavigationが起動できない。

Group配下からの起動がうまくできない。

Groupタグ内のノードに関しては、トピック, ノード名はnamespaceが自動的に付与されるが
フレーム名にはnamespaceが付与されないことが原因と考えられる。

2次元マーカー読み込みサンプル開発

2次元マーカーの写った画像を入力すると
写っているマーカー全てのビット値を返す関数を実装。

参加者はそれをそのまま使っても改造してもいい。
性能は低めでもいい。

競技用コードのリリース

そもそもルールさえ決まっていれば、
あくまでこのリポジトリはひな形、サンプルなのでリリースは必要ない??

むしろ審判サーバーのリリースが必要???

なんかよくわからんくなってきた
寝る明日考える

2台起動時にmoblile_base関係のグループ分けできていない。

roslaunch onigiri_war turtlebot_setup_sim.launch @開発ブランチ
で下記のようなエラーメッセージ

[ERROR] [1526203874.420844777, 0.261000000]: Tried to advertise a service that is already advertised in this node [/mobile_base/event/on]
[ERROR] [1526203874.420899303, 0.261000000]: Tried to advertise a service that is already advertised in this node [/mobile_base/event/off]

ロボットのspawn時にグループ分けができていないので名前が被っていそうなエラー
onigiri_setup_sim.launch 内の対応で済ませられればいいのだが

使用予定ライブラリの申請フォーム

大会環境にあらかじめインストールしておくので
使用する予定のライブラリがありましたらここに書き込みください。
インストール時のコマンドなども書いていただけるとありがたいです。

リポジトリの整理。ROS パッケージ化

リポジトリの構成を整理して、ROSのパッケージスタイルに変更。
judge serverはrosで動いていないので別リポジトリに分けて管理。
ロボットを動かすlaunchファイルの作成→'run_all.launch'

競技観戦画面 各マーカーの状態を表示

競技観戦画面に各マーカーの状態を表示する

フィールドとロボットの簡単なイラスト上に、マーカーの状態をアイコンで表示するイメージ

  • まだどちらにも打たれていない
  • 赤チームに打たれた
  • 青チームに打たれた

3つの状態を表示できるようにする

リスペクト申請フォーム

他チームのコードをリスペクトした場合には

  • ソースコード上のコメント
  • このissue

の2箇所に必ずどのチームをリスペクトしたか記載してください。

ソースコード上のコメントの例

# RESPECT @dashimaki360

2台のロボットをランダム走行

2台のロボットをspawnして
別々の走行司令ノードで走行させる。

カメラ系はとりあえず後回し、
とにかく2台を動かす

対応中不具合

対応中の不具合
対応でき次第なるべく早く修正版をリリース予定です。
チェックしてある項目は対応済み項目

  • ロボットに貼ってあるマーカーのサイズが実際より大きい

  • 予選の敵ロボットSIO ONIGIRIが未公開

  • フィールドの障害物の高さが低く機体が傾くとレーザーセンサをはずれてしまう。

  • フィールドのマーカーの高さがカメラより低く,マーカーに近づきすぎると読み取れない。

  • カメラの取り付けが少し上向きで、マーカーに近づきすぎると読み取れない。

  • ロボットモデルのセンサ取り付けフレームとのtfがでていない。

  • フィールドの図面が公開されていない。

  • ルールブックが前回の内容のままになっている。

  • wikiの内容が前回大会のQAになっている。

ros_simulatorのcatkin_makeでエラー その1

ros_simulatorのcatkin_makeでエラー出ます。

はじめにdriver_baseのパッケージがないと言われたので、
次のコマンドでros_driverを入れました
git clone https://github.com/ros-drivers/driver_common.git

これでdriver_baseのエラーは回避できましたが、
解決策としてこれは正しいでしょうか?

以下エラー内容

##############################################################################
-- +++ processing catkin package: 'rulo_simulation'
-- ==> add_subdirectory(ros_simulator)
-- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy
CMake Warning at /opt/ros/kinetic/share/catkin/cmake/catkinConfig.cmake:76 (find_package):
Could not find a package configuration file provided by "driver_base" with
any of the following names:

driver_baseConfig.cmake
driver_base-config.cmake

Add the installation prefix of "driver_base" to CMAKE_PREFIX_PATH or set
"driver_base_DIR" to a directory containing one of the above files. If
"driver_base" provides a separate development package or SDK, be sure it
has been installed.
Call Stack (most recent call first):
ros_simulator/CMakeLists.txt:4 (find_package)

-- Could not find the required component 'driver_base'. The following CMake error indicates that you either need to install the package with the same name or change your environment so that it can be found.
CMake Error at /opt/ros/kinetic/share/catkin/cmake/catkinConfig.cmake:83 (find_package):
Could not find a package configuration file provided by "driver_base" with
any of the following names:

driver_baseConfig.cmake
driver_base-config.cmake

Add the installation prefix of "driver_base" to CMAKE_PREFIX_PATH or set
"driver_base_DIR" to a directory containing one of the above files. If
"driver_base" provides a separate development package or SDK, be sure it
has been installed.
Call Stack (most recent call first):
ros_simulator/CMakeLists.txt:4 (find_package)
##############################################################################

ロボット側審判サーバー通信ノード開発

審判サーバーとの通信を行うROSノードの作成

主な機能

  • 試合開始シーケンスの実行
  • 読み取ったマーカーのビット値を提出
  • 試合の状態を問い合わせてトピックとしてpub

ロボットモデルにマーカーを貼り付ける

ロボットモデルの左右と後ろにマーカー(緑色)を貼り付ける。
ARマーカーの画像はロボット起動時に引数で変更できるようにしたい。
(マーカー画像の解像度などは固定)

QRコードの読み取りについて

QRコードの読み取り率が低い
・RealsenseR200とUSBカメラでの認識率にあまり差がない
・移動中では認識できないため、フィールド上の特点しか取れないと思われる

ルールブック作成

決まっていること、決まっていないことを洗い出すためにも
ルールブックのベータバージョンを作成したい

マークダウンかPDF形式かなあ
gitで管理するならマークダウンが扱いやすいが

[sendIdToJudge.py]ID送信じに成功失敗を確認して失敗時は送信済みリストに追加しない。

審判サーバーstateが

  • end
  • stop
  • running
    のうちrunning以外の場合加点されないので
    確認してIDを送信済みリストに追加しないようにする。

具体的には
Responseのerrorを確認して
"error": "no error"
以外の場合は追加しない

ちなみにまだ、サーバー側もID受信時にstateチェック機能未実装なので
そっちを先に実装する必要あり

審判サーバーのプロト開発

必要機能

  • 試合開始シーケンス
  • 2次元マーカーのビット値の提出判定機能
  • マーカープレイヤーの登録
  • スコアの管理
  • スコアの問い合わせに答える

マーカーの形状サイズ色決める

読み取り対象となるQRマーカーのサイズ形状色などを決める

案1
マーカーであることを認識しやすくするために
マーカー全体を赤や黄色などの特徴的な色にする。
フィールドは全体を白やグレーにする
単色の丸いマーカーの真ん中にqrコードが貼ってあるイメージ

サイズは読み取り機をつくってみて。
適度な距離まで近づかないと認識できないサイズにしたい。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.