Отслеживание объектов вокруг

gastelo
Offline
Зарегистрирован: 12.06.2014

Нужно находить растояние до объектов вокруг платки, допустим в радиусе 5-10метров.

посоветуйте как это делать?

Пока представляю только вариант с крутящимся туда сюда по кругу датчиком расстояния.

 

boban_
Offline
Зарегистрирован: 09.10.2013

ИК-диод - посылка - прием ответа (если есть) - изменение положения.

gastelo
Offline
Зарегистрирован: 12.06.2014

А что лучше? И дальше по расстоянию.

И быстрее отклик?

Araris
Araris аватар
Offline
Зарегистрирован: 09.11.2012

Поищите по слову lidar - это дорогое решение, либо по ultrasonic sensor - это подешевле будет.

boban_
Offline
Зарегистрирован: 09.10.2013

Зависит от величины объекта (угловая величина), отсюда и расстояние на котором будет нормально обнаруживаться.

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

Задача не поставленна абсолютно. Наличие предметов при начале сканирования учитывать? А если там уже предмет который надо засекать? Если палатка туристическая, то соответственно увеличение стоимости/сложности возрастает в геометрической прогресси при данном ряде Дарвина:

Тиранозавр - мамонт - верблюд - медведь - страус - волк - писец - заяц - мышь - змея - тарантул - муравей

Предметы живые? Они двигаются? Они прячутся? Они быстрые?

Продолжать можно до морковинного заговеня.

boban_
Offline
Зарегистрирован: 09.10.2013

Да, при первом сканировании запоминание откликов.

 

Но лучше, если живые - PIR датчики - 10 метров берут запросто.

gastelo
Offline
Зарегистрирован: 12.06.2014

Люди двигающиеся в помещении вокруг объекта.

Если люди стоят друг за другом по прямой от объекта, то поулчается учитываем только ближайшего. Хотя можно и всех, но это видимо дорого\сложно)

boban_
Offline
Зарегистрирован: 09.10.2013

gastelo пишет:

Люди двигающиеся в помещении вокруг объекта.

Если люди стоят друг за другом по прямой от объекта, то поулчается учитываем только ближайшего. Хотя можно и всех, но это видимо дорого\сложно)

 

Еще бы знать как?!

gastelo
Offline
Зарегистрирован: 12.06.2014

Вы про то как всех? Или как люди двигаются? )

Всех если помещение. банально сунуть по углам датчики растояния ультразвуковые с какимнибудь углом вращения, головы всем найдет почти.

 

Вобщем я так понимаю ультрзвуковой сенсор растояния крутить туда сюда? Но мне тут не нравится что в конструктиве ящика для всего нужно продумывать отвертсие по кругу.

Инфракрасный датчик оргстекло пробивает?

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

gastelo пишет:

Инфракрасный датчик оргстекло пробивает?

смотря как сильно кинуть и какой толщины оргстекло.

Чет я запутался. Палатка - это где туристы или которые сникерсами торгуют?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Палатка это которая плащ-палатка. И в ней партизаны.

std
Offline
Зарегистрирован: 05.01.2012

Я чото ваще не понял, речь то о комнате? ну всмысле твёрдой комнате из бетона и т. п. Или тут мягкая комната?? :)

короче. в твёрдой комнате на потолке можно укрепить ультразвуковые датчики, которые смотрят вниз. Через полметра допустим. по принципу матрицы. Допустим комната 3*4 м. тогда у нас получится "камера" с разрешающей способностью 6*8 пикселов. Которая будет давать heightmap - карту высоты. По карте можно определять движение.

В нетвёрдой комнате не знаю как сделать.

Можно мультиплексировать у датчиков TRIG через 595 и ECHO через 165, быстродействие будет в десятки-сотни герц. По мне - вполне достаточно.

art100
Offline
Зарегистрирован: 09.03.2014

Ой как тут интересно. Обьекты набежали. Их тут отслеживают. А я "Мухой" сходу в отслеживателя? Вот и проблемы нет.

 

ROSHENKA
Offline
Зарегистрирован: 25.03.2015

лазерные рулетки не подойдут?

саko79
Offline
Зарегистрирован: 11.05.2015

а не проще  барьерные ик датчики поставить? при пересечении луча включаеться тревога , ну или еще что нибудь..)

 

Arhat109
Offline
Зарегистрирован: 26.05.2015

gastelo пишет:

Нужно находить растояние до объектов вокруг платки, допустим в радиусе 5-10метров.

посоветуйте как это делать?

Пока представляю только вариант с крутящимся туда сюда по кругу датчиком расстояния.

Датчик УЗВ. HS-04 - для этой цели явно "плохое решение" без его доработок. У него широкий луч, около 15грд по паспорту, а в реале около 20. Кроме этого он хорошо ловит левые отражения сигналов боковыми лепестками своей диаграммы направленности. Увы. Ну и дальность. В принципе справляется с расстоянием в 5.5метров, но это уже так... "условно".

Тоже уже ставил его на серву и посканировал "пространство в комнате" ... итог: "всё плохо". Можно делать по 5-10 измерений по направлению, отсеивать резко отличющиеся результаты и усреднять остаток. Будет несколько лучше, но не существенно. Но, тогда время обзора возрастает критично (0.08 .. 0.16 сек на направление). "объекты" (мой кот к примеру) успевают уползать... :)

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013
trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011
Чума_в_Чуме
Offline
Зарегистрирован: 10.02.2018

Доброго времени суток всем. По данной теме есть вопрос.

Задача поставленна так же как и у автора темы. Нашел решение на али

https://ru.aliexpress.com/item/053-eai-ydlidar-x4/32850437159.html?spm=a...

или

https://ru.aliexpress.com/item/RPLIDAR-360-Degree-Laser-Scanning-Range-F...

Нашел описание обработки, к сожелению на (En).

http://www.robopeak.com/blog/?p=611

Мог бы кто то объснить принцип обработки сигналов? Либо ссылку дать на русский вариант?

ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016

Чума_в_Чуме пишет:

Доброго времени суток всем. По данной теме есть вопрос.

Задача поставленна так же как и у автора темы. Нашел решение на али

https://ru.aliexpress.com/item/053-eai-ydlidar-x4/32850437159.html?spm=a...

или

https://ru.aliexpress.com/item/RPLIDAR-360-Degree-Laser-Scanning-Range-F...

Нашел описание обработки, к сожелению на (En).

http://www.robopeak.com/blog/?p=611

Мог бы кто то объснить принцип обработки сигналов? Либо ссылку дать на русский вариант?

Так там же особо описания нет, в примерах есть немного

/*
 * RoboPeak RPLIDAR Arduino Example
 * This example shows how to control an RGB led based on the scan data of the RPLIDAR
 * 
 * The RGB led will change its hue based on the direction of the closet object RPLIDAR has been detected.
 * Also, the light intensity changes according to the object distance.
 *
 * USAGE:
 * ---------------------------------
 * 1. Download this sketch code to your Arduino board
 * 2. Connect the RPLIDAR's serial port (RX/TX/GND) to your Arduino board (Pin 0 and Pin1)
 * 3. Connect the RPLIDAR's motor ctrl pin to the Arduino board pin 3 
 * 4. Connect an RGB LED to your Arduino board, with the Red led to pin 9, Blue led to pin 10, Green led to pin 11
 * 5. Connect the required power supplies.
 * 6. RPLIDAR will start rotating when the skecth code has successfully detected it.
 * 7. Remove objects within the 0.5 meters' radius circule range of the RPLIDAR
 * 8. Place some object inside the 0.5 meters' range, check what will happen to the RGB led :)
 */
 
/* 
 * Copyright (c) 2014, RoboPeak 
 * All rights reserved.
 * RoboPeak.com
 *
 * Redistribution and use in source and binary forms, with or without modification, 
 * are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice, 
 *    this list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form must reproduce the above copyright notice, 
 *    this list of conditions and the following disclaimer in the documentation 
 *    and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 
 * SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 
 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 */

// This sketch code is based on the RPLIDAR driver library provided by RoboPeak
#include <RPLidar.h>

// You need to create an driver instance 
RPLidar lidar;

// Change the pin mapping based on your needs.
/////////////////////////////////////////////////////////////////////////////
#define LED_ENABLE  12 // The GPIO pin for the RGB led's common lead. 
                       // assumes a common positive type LED is used
#define LED_R       9  // The PWM pin for drive the Red LED
#define LED_G       11 // The PWM pin for drive the Green LED
#define LED_B       10 // The PWM pin for drive the Blue LED

#define RPLIDAR_MOTOR 3 // The PWM pin for control the speed of RPLIDAR's motor.
                        // This pin should connected with the RPLIDAR's MOTOCTRL signal 
//////////////////////////////////////////////////////////////////////////////
                        
                        
 
#define NEO_RGBSPACE_MAX (byte)(200L*255/360)
int _r, _g, _b;

//Set current RGB with the hue: HSV(hue, x, x)
void hue_to_rgb( _u8 hue)
{
/*`
    Hue(in Degree):  0 (RED) ----> 60 (Yello) ----> 120 (Green) --...... ----> 360
    Hue'(fit to _u8):0       ----> 60/360*255 ----> 120/260*255 --...... ----> 255
*/
    
    //convert HSV(hue,1,1) color space to RGB space
    if (hue < 120L*255/360)   //R->G
    {
        _g = hue;
        _r = NEO_RGBSPACE_MAX - hue;
        _b = 0;
    }else if (hue < 240L*255/360)  //G->B
    {
        hue -= 120L*255/360;
        _b = hue;
        _g = NEO_RGBSPACE_MAX - hue;
        _r = 0;
    }else //B->R
    {
        hue -= 240L*255/360;
        _r = hue;
        _b = NEO_RGBSPACE_MAX - _r;
        _g = 0;
    }
}

void displayColor(float angle, float distance)
{
    //1. map 0-350 deg to 0-255
    byte hue = angle*255/360;
    hue_to_rgb(hue);
    
    //2. control the light 
    
    int lightFactor = (distance>500.0)?0:(255-distance*255/500);
    _r *=lightFactor;
    _g *=lightFactor;
    _b *=lightFactor;
    
    _r /= 255;
    _g /= 255;
    _b /= 255;    
    
    analogWrite(LED_R, 255-_r);
    analogWrite(LED_G, 255-_g);
    analogWrite(LED_B, 255-_b);   
}

void setup() {
  // bind the RPLIDAR driver to the arduino hardware serial
  lidar.begin(Serial);
  
  // set pin modes
  pinMode(RPLIDAR_MOTOR, OUTPUT);
  
  pinMode(LED_ENABLE, OUTPUT);
  pinMode(LED_R, OUTPUT);
  pinMode(LED_G, OUTPUT);
  pinMode(LED_B, OUTPUT);
  
  digitalWrite(LED_ENABLE, HIGH);
  
  analogWrite(LED_R,255);
  analogWrite(LED_G,255);
  analogWrite(LED_B,255);
}

float minDistance = 100000;
float angleAtMinDist = 0;

void loop() {
  if (IS_OK(lidar.waitPoint())) {
    //perform data processing here... 
    float distance = lidar.getCurrentPoint().distance;
    float angle = lidar.getCurrentPoint().angle;
    
    if (lidar.getCurrentPoint().startBit) {
      // a new scan, display the previous data...
       displayColor(angleAtMinDist, minDistance);
       minDistance = 100000;
       angleAtMinDist = 0;
    } else {
       if ( distance > 0 &&  distance < minDistance) {
          minDistance = distance;
          angleAtMinDist = angle;
       }
    }
  } else {
    analogWrite(RPLIDAR_MOTOR, 0); //stop the rplidar motor
    
    // try to detect RPLIDAR... 
    rplidar_response_device_info_t info;
    if (IS_OK(lidar.getDeviceInfo(info, 100))) {
       //detected...
       lidar.startScan();
       analogWrite(RPLIDAR_MOTOR, 255);
       delay(1000);
    }
  }
}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

У лидара есть моторчик и лазер. Моторчик мотает по кругу лазер и приемник. Лазер палит в объект, объект отражает луч, приемник его ловит. По времени прохождения света вычисляется дистанция. Т.е. с лидара можно получить угол, на который в данный момент повернут лазер с приемником и дистанцию. Это помогает нарисовать карту окружающих препятствий.

Чума_в_Чуме
Offline
Зарегистрирован: 10.02.2018

Ну это как раз понятно. Как Arduino это все обработать?

sadman41
Offline
Зарегистрирован: 19.10.2016

Ардуино, например, может складывать дистанцию с величиной угла. Или перемножать. Ей вообще пофигу, что делать. Думать, что ей полагается делать - это ваша задача.

negavoid
Offline
Зарегистрирован: 09.07.2016

Вот такое https://www.youtube.com/watch?v=OOT3UIXZztE пора прикручивать, на raspberry, а ардуина пускай крутит двигатели )))

Чума_в_Чуме
Offline
Зарегистрирован: 10.02.2018

Мне конкретно бы понять что на выходе? Градус поворота и расстояние на этом градусе?