16m、薄型、ROS対応レーザスキャナ YDLIDAR G4

YDLIDAR_G4
YDLIDAR_G4

SLAM LIDARのYDLIDAR G4の主な特長は以下のとおり

・寸法 72mm(直径) x 41mm(厚さ)
・検出方法 360度回転式・三角法
・検出距離 max 16m
・サンプリング周波数 max 9kHz
・回転周波数 max 12Hz
・環境光 2kLux
・ROS対応
・詳細&商品リンク ロボット翔-電子部品ストア

モノづくり試作、研究開発に提案する、ロボット翔-電子部品ストア、センサ、Arduino互換ボード、拡張シールド、Bluetooth/Zigbee/WiFi/RFIDモジュール、ロボット制御ボード、ドローンが品揃えています。どうぞご利用下さい

Laravel 5.1(5) MongoDB多重Eloquent Relationship実践

準備:テスト用コレクション情報

まず、テスト用のコレクション(例)を用意します。

概要

・Collection種別は、上位から病院コレクション(hospitals)→診療科別コレクション(categories)→病気コレクション(diseases)
・Relatonship種別は、1:Mタイプ、親collectionの場合hasMany、子コレクションの場合belongsToに指定する
・Relatonship紐づけは、_id、category_id、disease_idに指定する、他デフォルト利用の場合もある

コレクションの構造と内容

$hospitals = App\Hospital::all()
=> Illuminate\Database\Eloquent\Collection {#977
     all: [
       App\Hospital{#999
         _id: MongoDB\BSON\ObjectId {#976
           +"oid": "5a7d0901f1a5e421d37a12e2",
         },
         name: "hospi",
         created_at: "2018-01-16 02:01:03",
         updated_at: MongoDB\BSON\UTCDateTime {#975
           +"milliseconds": "1518231495000",
         },
       },
    ],
   }
$categories = App\Category::all()
=> Illuminate\Database\Eloquent\Collection {#977
     all: [
       App\Category {#999
         _id: MongoDB\BSON\ObjectId {#976
           +"oid": "5a7d0901f1a5e421d37daac2",
         },
         hospital_id: "5a7d0901f1a5e421d37a12e2",
         name: "Nerve",
         created_at: "2018-01-16 02:01:03",
         updated_at: MongoDB\BSON\UTCDateTime {#975
           +"milliseconds": "1518231495000",
         },
       },
    ],
   }
$diseases = App\Disease::all()
=> Illuminate\Database\Eloquent\Collection {#977
     all: [
       App\Disease{#999
         _id: MongoDB\BSON\ObjectId {#976
           +"oid": "5a7d0901f1a5e421d37d090d0",
         },
         category_id: "5a7d0901f1a5e421d37daac2",
         name: "Cerebral Bleeding",
         created_at: "2018-01-16 02:01:03",
         updated_at: MongoDB\BSON\UTCDateTime {#975
           +"milliseconds": "1518231495000",
         },
       },
    ],
   }

Model構築

以下ソースにコメント割愛とします。

Hospital Model

class Hospital extends Eloquent
{
    protected $collection = 'hospitals';
    protected $connection = 'mongodb';
    protected $fillable = ['name' , 'description'];
    public function categories() 
    {
        return $this->hasMany('App\Category', 'hospital_id', '_id');
    }
}

Category Model

class Category extends Eloquent
{
    protected $collection = 'categories';
    protected $connection = 'mongodb';
    protected $fillable = ['hospital_id' , 'name' , 'description'];
    public function hospital() 
    {
        return $this->belongsTo('App\Hospital','hospital_id', '_id');
    }
    public function diseases() 
    {
        return $this->hasMany('App\Disease','category_id', '_id');
    }
}

Disease Model

class Diease extends Eloquent
{
    protected $collection = 'diseases';
    protected $connection = 'mongodb';
    protected $fillable = ['categoy_id' , 'name' , 'description'];
    public function category() 
    {
        return $this->belongsTo('App\Category','category_id', '_id');
    }
}

Collection作成

hospitals Collection

class CreateHospitalsCollection extends Migration
{
    public function up()
    {
        Schema::create('hospitals', function (Blueprint $collection) {
            $collection->string('name');
            $collection->string('description');
            $collection->timestamps();

         });
    }
    public function down()
    {
        Schema::drop('hospitals');
    }

categories Collection

class CreateCategoriesCollection extends Migration
{
    public function up()
    {
        Schema::create('categories', function (Blueprint $collection) {
            $collection->string('hospital_id');
            $collection->string('name');
            $collection->string('description');
            $collection->timestamps();
            $collection->foreign('hospital_id')
                       ->references('_id')
                       ->on('hospitals')
                       ->onDelete('cascade');
         });
    }
    public function down()
    {
        Schema::drop('categories');
    }

diseases Collection

class CreateDiseasesCollection extends Migration
{
    public function up()
    {
        Schema::create('diseases', function (Blueprint $collection) {
            $collection->string('category_id');
            $collection->string('name');
            $collection->string('description');
            $collection->timestamps();
            $collection->foreign('category_id')
                       ->references('_id')
                       ->on('categories')
                       ->onDelete('cascade');
         });
    }
    public function down()
    {
        Schema::drop('diseases');
    }

・DBに反映する。

composer dump-autoload
php artisan migrate:refresh --seed

Relationship検証

上位→下位の順にて参照また下位→上位の順にて参照

$ php artisan tinker

hospital→categories

>>>$hospitals = App\Hospital::all()
>>>$hospitals= hospitals->first()
>>>$category= $hospital->categories->first()

category->hospital

>>>$categories = App\Category::all()
>>>$category = $categories->first()
>>>$hospital = $category->hospital

category->disease

>>>$categories = App\Category::all()
>>>$category = $categories->first()
>>>$diseases = $category->diseases

disease->category

>>>$diseases = App\Disease::all()
>>>$disease = $diseases->first()
>>>$category = $disease->category

hospital→diseases

>>>$hospitals = App\Hospital::all()
>>>$hospital  = hospitals->first()
>>>$diseases = $hospital->categories->first()->diseases

disease->hospital

>>>$diseases = App\Disease::all()
>>>$disease = $diseases->first()
>>>$hospital= $disease->category->hospital

$hospital、$category、$diseaseがうまく表示されたら、紐付けができたことが検証済み。
Null、Errorが表示された場合、どこかで入力ミスあるか確認する。

上位から紐づけまた下位から紐づけして保存

>>>$hospital->categorys()->save($category)
>>>$category->diseases()->save($disease)

>>>$category->hospital()->associate($hospital)
>>>$disease->category()->associate($category)

以上。

モノづくり試作、研究開発に提案する、ロボット翔-電子部品ストア、センサ、Arduino互換ボード、拡張シールド、Bluetooth/Zigbee/WiFi/RFIDモジュール、ロボット制御ボード、ドローンが品揃えています。どうぞご利用下さい

Laravel 5.1(4) Text Field 動的増減&入力補完

Text Field 入力補完:Autocomplete

Javascript使用、別途route、Controller側にDB検索して、結果をjsonにて返すソースを追加必要ある(省略)。

<script type="text/javascript">
 
    $(function() {
         $( "#allergy" ).autocomplete({
          source: "{{ route('autoAllergy') }}",
          minLength: 1,
          select: function(event, ui) {
            $('#allergy').val(ui.item.value);
          }
         });
    });
></script>

Text Field 動的増減&入力補完:Dynamic Add/Remove

jQuery使用、動的増減&入力補完、入力補完のソースが動的増減ソースに埋め込む。別途blade側にjquery-ui.css、jQuery-2.1.4.min.js(他のバージョンでもよいか)、jquery-ui.js、またinputタグのclassなど追加必要ある(省略)。

<script type="text/javascript">
var $i = 0;
$(".addmore").on("click", function () {
if($i > 20) alert('注意:最大20行まで追加できます');
else  {
    $(".addform").append("<div class='input-group control-group' style='margin-top:20px;width: 100%;'><input class='form-control' id='item"+$i+"'  placeholder='削除は右側の-キーをクリックして下さい' name='value[]' type='text'><div class='input-group-btn'><button class='btn btn-default deleteform' type='button'><i class='fa fa-minus'></i></button></div></div>");            
    $( "#item"+$i).autocomplete({source: "{{ route('autoAllergy') }}", minLength: 1, select: function(event, ui) { $("#item"+$i).val(ui.item.value);} });
}
$i++;
});
$("body").on("click", ".deleteform", function () {
$(this).parent().parent().remove();
});
</script>

但し、views.allergys.createの際、AllergysController側storeで、validateの際、未入力か入力エラーのtext項目があった場合、create画面に戻って、動的増やしたtext fieldが表示されなくなる現象が確認した。別途、create1を作成するか、Inputにより分岐して、増やしたtext fieldを再描写するのか、手を施す必要がある。

モノづくり試作、研究開発に提案する、ロボット翔-電子部品ストア、センサ、Arduino互換ボード、拡張シールド、Bluetooth/Zigbee/WiFi/RFIDモジュール、ロボット制御ボード、ドローンが品揃えています。どうぞご利用下さい

centos メールスプールを整理する

1、下記を実行して以下のコマンドで、誰がメールを貯めているのかを確認します。

$ ls -la /var/spool/mail/
 total 16
 drwxrwxr-x. 3 root mail 4096 Aug 3 2012 .
 drwxr-xr-x. 11 root root 4096 Jul 12 2012 ..
 drwx------ 5 vmail vmail 4096 May 19 2015 virtual
 -rw-rw---- 1 user mail 2076 Aug 3 2012 user
 -rw-rw---- 1 user1 mail 0 Jul 24 2012 user1

2、下記を実行してuserファイルを、空にするのがよい。

$sudo cat /dev/null > /var/spool/mail/user

3、再度、メールが空にしたのか確認します。

$ ls -la /var/spool/mail/
 total 16
 drwxrwxr-x. 3 root mail 4096 Aug 3 2012 .
 drwxr-xr-x. 11 root root 4096 Jul 12 2012 ..
 drwx------ 5 vmail vmail 4096 May 19 2015 virtual
 -rw-rw---- 1 user mail 0 Aug 3 2012 user
 -rw-rw---- 1 user1 mail 0 Jul 24 2012 user1

モノづくり試作、研究開発に提案する、ロボット翔-電子部品ストア、センサ、Arduino互換ボード、拡張シールド、Bluetooth/Zigbee/WiFi/RFIDモジュール、ロボット制御ボード、ドローンが品揃えています。どうぞご利用下さい

点検向け自律移動ロボットRED(薄型・小型)

想定用途

地下パイプ、住宅床下、橋梁桁下など社会インフラの狭い空間(狭所)での点検ロボットとして

主な仕様

機械

・寸法 37.3x35x18.3cm(突起物含む)
・4WD四駆、メカナム車輪x4
・速度 約20 cm/秒(直線)・0.8 rad/秒(回転)
・斜面角度 約20 度
・ロボット中心回転半径 0 m
・環境温度 0 ~ 35℃ 非防水

電気

・使用時間 6時間(使用環境により、本体のみ、端末除き)
・充電時間 8時間(ACアダプタ)
・2.4GHz Wifi (出力100mw)
・slam lidar(探知距離8m)

機能

・android端末(OS5.0以上)遠隔制御
・動画中継・4K静止画撮影(動画 640x480pix、静止画 3280x2464pix)
・静止・マニュアル運転中、地図作成・表示・管理
・目的地指定・表示
・経路自動作成・表示
・経路自動作成・目的地へ自動運転
・障害物自主回避(360度2D平面slam lidar使用)
・android端末からマニュアル運転制御・自動運転に介入可能
・ROS対応

※ 場合により上記仕様調整の可能性あり

カスタマイズ対応
・2WD三輪・四輪、オムニホイル、100m長距離レーザセンサ、筐体カスタマイズ

点検向け自律移動ロボットRED
点検向け自律移動ロボットRED

販売につきましては→ 社会インフラ点検向け自律移動ロボットRED(薄型・小型)

モノづくり試作、研究開発に提案する、ロボット翔-電子部品ストア、センサ、Arduino互換ボード、拡張シールド、Bluetooth/Zigbee/WiFi/RFIDモジュール、ロボット制御ボード、ドローンが品揃えています。どうぞご利用下さい