Wednesday 30 January 2013

Pemrograman Robotino

Robotino adalah sistem mobile robot dari Festo Didactic. Robotino menyediakan semua sensor, aktuator dan antarmuka perangkat lunak. Robot ini adalah robot open source, dimana semua kode sumber dari semua perangkat lunak yang bekerja pada Robotino tersedia secara bebas dari svn.openrobotino.org melalui SVN.
Robotino dapat diprogram dalam berbagai bahasa diantaranya C, C + +, Java, .Net, Matlab dan LabVIEW. Application programming interface (API) untuk Robotino memungkinkan untuk akses penuh ke sensor Robotino dan aktuator. Komunikasi antara program kontrol dan Robotino melalui TCP dan UDP, baik program yang berjalan didalam CPU Robotino atau pada sistem yang menggunakan remote.

 
Struktur referensi class pada actuator Robotino

RobotinoSIM.

Program Simulator 3D Robotino.
RobotinoSIM adalah sebuah perangkat lunak berbasis Windows untuk pemrograman Robotino secara simulasi 3D. Model simulasi Robotino tidak dapat diperluas, yang tersedia hanya model geometris dengan tiga roda omnidirectional,  sebuah kamera, sembilan sensor jarak dan sensor benturan.


Perangkat Robotino pada RobotinSIM.
Semua perangkat yang dapat diakses pada Robotino dapat diaktifkan pada program RobotinoSIM ini dan dilengkapi dengan coverage area dari sensor tersebut. Apabila yang digunakan model standar gunakan camera dan distance sensor saja.
 
Coverage area dari camera dan distance sensor .
Simulator 3D Robotino ini dapat digunakan pada program RobotinoView atau bahasa tingkat tinggi seperti C++, C#  or Java. Apabila ingin menghubungkan RobotinoView atau bahasa tingkat tinggi dengan RobotinoSIM dalam satu computer, IP address yang digunakan adalah "127.0.0.1:8080".

Catatan :
Non-aktifkan firewall temporary jika mengalami masalah dengan koneksi RobotinoSIM

3.2.2     RobotinoView.
Software RobotinoView .
RobotinoView merupakan software untuk pemrograman secara grafik pada Robotino, program ini menggabungkan konsep operasi pemrograman secara modern menggunakan intuitif. Model pemrograman RobotinoView menggunakan konsep diagram alir seperti layaknya pembuatan flowchart program. Semua fungsi yang digunakan pada pemrograman Robotino secara lengkap telah disediakan, meskipun demikian apabila ingin menerapkan konsep kecerdasan buatan pada Robotino tidak semua fungsi tersedia pada program RobotinoView ini.
 
Pemrograman Windows PC.
Pemrograman C++

Melakukan pemrograman dengan menggunakan bahasa C++ untuk Robotino ada beberapa jalan untuk melakukan compile program. Selain dengan menggunakan w32 console pada Visual Studio atau CMAKE, dapat juga dilakukan pada CPU Robotino sendiri. Compile program secara internal ini dimungkinkan karena pada CPU Robotino telah tertanam OS Linux.
Berikut ini algoritma program pengendalian Robotino dengan menggunakan bahasa pemrograman C++, dimana dalam program tersebut Robotino diperintahkan untuk bergerak melingkar.
1.    Membuat header file program.
a.    Mengaktifkan header file untuk fungsi-fungsi yang terdapat pada ROBOTINO.
include "rec/robotino/com/all.h"
Isi dari header file all.h adalah
00001 /Copyright(C)2004-2008, Robotics Equipment Corporation GmbH
00002
00003 #include "rec/robotino/com/ComId.h"
00004 #include "rec/robotino/com/Com.h"
00005 #include "rec/robotino/com/Camera.h"
00006 #include "rec/robotino/com/AnalogInput.h"
00007 #include "rec/robotino/com/DigitalInput.h"
00008 #include "rec/robotino/com/DigitalOutput.h"
00009 #include "rec/robotino/com/DistanceSensor.h"
00010 #include "rec/robotino/com/Bumper.h"
00011 #include "rec/robotino/com/Motor.h"
00012 #include "rec/robotino/com/NorthStar.h"
00013 #include "rec/robotino/com/OmniDrive.h"
00014 #include "rec/robotino/com/PowerManagement.h"
00015 #include "rec/robotino/com/Relay.h"
00016 #include "rec/robotino/com/Info.h"
00017 #include "rec/robotino/com/Gripper.h"
00018 #include "rec/robotino/com/Odometry.h"
00019 #include "rec/robotino/com/PowerOutput.h"
00020 #include "rec/robotino/com/EncoderInput.h"
00021 #include "rec/robotino/com/RobotinoException.h"
00022

Header ini akan mengaktifkan semua fungsi yang terdapat pada ROBOTINO.

b.    Mengaktifkan header file untuk fungsi timer.
include "rec/core_lt/Timer.h"

c.    Mengaktifkan header file untuk fungsi aritmatik, pada perhitungan cos dan sin.
include

d.    Mengaktifkan header file untuk fungsi std::cout (consule output) dan std::cerr (consule error), dimana fungsi ini untuk menampilkan string ke computer.
include

2.    Declaration.
Semua class untuk API (Application Programming Interface) ini terdapat pada namespace rec::robotino::com. guna memudahkan penggunaan namespace ini sebagai default-nya. Kemudian dilanjutkan dengan menulis Com pada rec::robotino::com::Com. Hal ini akan mendefinisikan semua objek yang digunakan pada lingkup global, sehingga membuat pengerjaannya jadi lebih mudah.
using namespace rec::robotino::com;
class MyCom : public Com
{
  public:
    MyCom()
    {
    }
    void errorEvent( const RobotinoException& e )
    {
      std::cerr << "Error: " << e.what() << std::endl;
    }
    void connectedEvent()
    {
      std::cout << "Connected." << std::endl;
    }
    void connectionClosedEvent()
    {
      std::cout << "Connection closed." << std::endl;
    }
};


MyCom yang dimiliki rec:: robotino:: com:: Com adalah sebagai class dasar. MyCom akan menggantikan tiga fungsi virtual untuk menangani aktivitas yang berbeda.

MyCom com;
Sebelum digunakan, program ini harus dilengkapi dengan referensi obyek,  referensi tersebut berguna untuk inisialisasi dari sensor maupun aktuator. Seperti terlihat pada potongan program dibawah, omnidrive sebagai penggerak dari 3 buah motor diinisialisasikan dengan OmniDrive omniDrive dan Bumper bumper sebagai sensor mekanisnya .
OmniDrive omniDrive;
Bumper bumper;

3.    Inisialisasi.
Dalam fungsi ini objek Com diinisialisasikan, sebagai bentuk pengalamatan dari motor-motor yang digunakan, dengan cara mengatur setComId. Dengan menggunakan model ini dimungkinkan untuk memiliki beberapa objek Com pada saat yang sama untuk menghubungkan ke Robotino lainnya.
4.    Driving ROBOTINO.
Mengendalikan pergerakan ROBOTINO dapat dilakukan dengan cara mengirimkan secara continue nilai setpoint motor pada ROBOTINO. OmniDrive::setVelocity digunakan untuk memberikan referensi gerak ROBOTINO. Com::waitForUpdate digunakan untuk sinkronisasi urutan data yang dikomunikasikan antara actuator dan sensor.
void rotate( const float* in, float* out, float deg )
{
    const float pi = 3.14159265358979f;

    float rad = 2 * pi / 360.0f * deg;

    out[0] = cos( rad ) * in[0] - sin( rad ) * in[1];
    out[1] = sin( rad ) * in[0] + cos( rad ) * in[1];
}

void drive()
{
    rec::core_lt::Timer timer;
    timer.start();

    const float startVector[2] = {1000.0f, 0.0f};
    float dir[2];
    float a = 0.0f;

    bool value = true;

    rec::iocontrol::remotestate::SensorState sensorState;

    while( com.isConnected() && false == sensorState.bumper )
    {
          //rotate 360degrees in 10s
          rotate( startVector, dir, a );
          a = 360.0f * timer.msecsElapsed() / 5000;

          float m1,m2,m3;
          omniDrive.project( &m1, &m2, &m3, dir[0], dir[1], 0 );

          rec::iocontrol::remotestate::SetState setState;
          setState.speedSetPoint[0] = m1;
          setState.speedSetPoint[1] = m2;
          setState.speedSetPoint[2] = m3;
          std::cout <<"m1="<" m2="<" m3="
<

          com.setSetState( setState );
          //omniDrive.setVelocity( dir[0], dir[1], 0 );

          com.waitForUpdate();

          sensorState = com.sensorState();
    }
}


5.    Closing Communication.
void destroy()
{
  com.disconnect();
}

6.    Program Utama.
Pada program utama ini terdiri dari init untuk inisialisasi IP, drive untuk mengirimkan data ke Robotino sebagai referensi gerak dan destroy digunakan pada saat program di-non aktifkan (no.5).
int main()
{
  try
  {
    init();
    drive();
    destroy();
  }
  catch( const std::exception& e )
  {
    std::cerr << "Error: " << e.what() << std::endl;
  }

  std::cout << "Press any key to exit..." << std::endl;
  rec::core_lt::waitForKey();
     }


Hasil simulasi Robotino pada saat eksekusi program


Data 3 buah motor omni-wheels
Pemrograman C#.
Pemrograman dengan menggunakan bahasa C# atau Csharp untuk Robotino, program yang digunakan adalah Visual Studio 2008 atau 2010. Sebelum menjalankan program Visual studio dengan bahasa C# untuk Robotino yang perlu dilakukan adalah melakukan instalasi program  OpenRobotinoAPI. OpenRobotinoAPI ini sebenarnya bukan hanya mendukung untuk C# saja tetapi bisa juga untuk bahasa C, C++, .NET C++ VB dan Java. Compiler yang support terhadap OpenRobotinoAPI ini adalah :

a)    Visual Studio 2003 with SP1
b)    Visual Studio 2005 with SP1
c)    Visual Studio 2008
d)    Visual C++ 2008 Express Edition
e)    Visual C# 2008 Express Edition
f)    other Visual Express Editions by the .Net interface
g)    gcc 4.1

No comments:

Post a Comment