- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 3 von 3

Thema: Positionsberechnung eines Objektes im Raum

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    07.11.2004
    Beiträge
    332

    Positionsberechnung eines Objektes im Raum

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo Zusammen,

    ich verzweifle derzeit an meiner Objekterkennung innerhalb meiner Weltkarte. Bei der Berechnung eines gefundenen Objektes von einem Sensor, wird dieser in eine Karte eingetragen und zur Navigation verwendet.

    Die
    Ich habe eine Klasse, welche mir die X,Y Position eines Objektes im Raum zurückgeben soll.

    hier die Sensor Data Class
    Code:
    void    SensorData::BerechnePose(void)
    {
    double        fltAngleOftheSensor;                                                                                        // Angle of the sensor in the world car
    double        fltAngle;                                                                                                                // an
    
        if( intSensor == 0 )
            {
            if( intAngle < 90.0 )                                                                                                    // Angle between 0 ... 90 Grad
                {                                                                                                                                        // Convert angle to Quadrant I
                fltAngleOftheSensor =90.0 - intAngle;                                                            // is it the front sensor
                }
            else
                {                                                                                                                                        // Convert angle to Quadrant 4
                fltAngleOftheSensor =450.0 - intAngle;                                                        // is it the front sensor 
                }                                                                                                                                        // Angle is between 90.0 - 180.0
            }
        else
            {                                                                                                                                            // Angle is from 0.. 180 Grad
            fltAngleOftheSensor = 270.0 - intAngle;                                                            // it is the rear sensor
            }
    
         // world_T_rob is the pose of the roboter in the world card
         //                   Rotation                           Position 
        pose        world_T_roboter( std::polar( 1.0, fltActualAngleRoboter * GRAD2RAD), std::complex< double >( ActRoboterPos.High_x(), ActRoboterPos.High_y()));
    
       // rob_T_sensor is the Pose of the Sensor in relativ to the roboter system
       //  Bem.: Winkel also Ausrichtung des Sensors bezogen auf den Roboter == 0.0 
        pose        roboter_T_sensor( std::polar( 1.0,fltAngleOftheSensor * GRAD2RAD), std::complex< double >( fltSensorDistanceX[intSensor],0.0 ) );
    
        pose        world_T_sensor = world_T_roboter * roboter_T_sensor;                                                                                     // Pose of the sensor in the world card
    
        std::complex< double > world_p_obj = world_T_sensor * std::complex< double >( fltDistance, 0.0  );
    
        ActObjectPos.SetXHighPos ((int) world_p_obj.real());                                                                                                        //  Position of the object in the world card
        ActObjectPos.SetYHighPos((int) world_p_obj.imag());
    }
    Die Sensoren (zwei US / IR Sensoren) auf einem Servo montiert (siehe Zeichnung), können auf eine Winkel gesetzt werden und der Roboter misst dann den Abstand des Objekts.

    Nur Erscheinen mir die Werte der Position nicht korrekt. Wenn ich die Position eines Objekt nach vorne berechne, stimmt die Position. Nach hinten der gleiche Abstand stimmt wieder nicht.

    Diese Daten werden dann in eine Karte eingetragen und zur Navigation verwendet. Da ich diese Werte auf dem PC sichtbar mache, kann ich den Blödsinn sehen, den er macht. Nur finde ich den Grund nicht.

    Kann hier jemand einen helfenden Blick drüber werfen. Anbei der komplette Quellcode eines kleinen Testprogram unter kDevelop (gcc).

    Gruss R.
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken Positionsgrafik3.jpg  
    Angehängte Dateien Angehängte Dateien
    Kaum macht man es richtig, schon funktioniert's ...

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    09.04.2008
    Beiträge
    384
    Ich siehe ueberhaupt kein Goniometrische Function in ihre Berechnungen. In ein XY Cartesische System soll isch es so machen (center Robby = 0,0):
    PosXobjext : Abstand Sensor*cos(Rel.Winkel Sensor auf Robby+Abs Winkel Robby)+ (Abstand Sensor-Center Robby)*cos(Abs.Winkel Robby)
    PosYobject : Abstand Sensor*sin(Rel.Winkel Sensor auf Robby+Abs Winkel Robby)+ (Abstand Sensor-Center Robby)*sin(Abs.Winkel Robby)
    Das ist gans einfach die 2 Vectoren in X/Y gesplittet und aufaddiert.

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    07.11.2004
    Beiträge
    332
    Hi,

    nun ja, hier wird die ganze Sache anderes angegangen.

    pose world_T_roboter( std : polar( 1.0, fltActualAngleRoboter * GRAD2RAD), std::complex< double >( ActRoboterPos.High_x(), ActRoboterPos.High_y()));
    Hier wird der Winkel über

    std: polar( 1.0, fltActualAngleRoboter * GRAD2RAD)
    angegeben.

    Die Position ist wird hier über complexe Zahlen dargestellt.

    Das ganze dauert mir aber auch in der Berechnung zu lange. Ich wollte das ganze jetzt über eine Transformationsmatrix
    versuchen. Ist auch neu für mich, wird aber üblicherweise so gemacht.

    Das ganze versteckt sich dann in der Class "RoboterPose", welche ich nur im Code beigefügt habe.

    Die Routine da oben hat mir mal ein "Mathegenie" geschrieben. Nur kann ich diese nur teilweise nachvollziehen.

    Ich würde auch sagen, das es zwei Vektoren sind, welche ich berücksichtigen muss.

    1) Mittelpunkt zur Mess-Stelle
    2) Messtelle zum Objekt.


    Gruss
    R.
    Kaum macht man es richtig, schon funktioniert's ...

Ähnliche Themen

  1. Positionsbestimmung im Raum
    Von Thegon im Forum Sensoren / Sensorik
    Antworten: 19
    Letzter Beitrag: 20.05.2019, 23:07
  2. Bewegung eines Objektes per Elektromotor
    Von orichalkos im Forum Elektronik
    Antworten: 14
    Letzter Beitrag: 03.05.2008, 10:02
  3. Antworten: 9
    Letzter Beitrag: 19.03.2008, 23:17
  4. Raum- und Hindernisserkenung
    Von Devil im Forum Elektronik
    Antworten: 3
    Letzter Beitrag: 17.01.2006, 17:12
  5. Positionsberechnung mittels Odometrie
    Von pauli im Forum Robby CCRP5
    Antworten: 12
    Letzter Beitrag: 18.12.2004, 01:51

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests