Difference between revisions of "API2"

From RobotinoWiki
(Package links)
(Windows)
 
(50 intermediate revisions by 4 users not shown)
Line 1: Line 1:
 
==Introduction==
 
==Introduction==
{|cellspacing="20" cellpadding="10"
+
{|class="wikitable" cellpadding="20" vertical-align="top"
|- style="vertical-align:top"
+
|-
 
|[[Image:Robotino_api2_icon_64.png]]
 
|[[Image:Robotino_api2_icon_64.png]]
|The new API2 is going to replace the current programming interface to Robotino(r).
+
|A C/C++ library to access Robotino's sensors and actors from your own program.
! style="text-align:left; width:20em; background-color:#dddddd"|
+
|}
=== Package links ===
+
 
[[downloads#API2_beta|API2 binary packages]]
+
==Download and install==
 +
Check [[Robotino_OS|Robotino OS]] to find the link to the API2 library.
 +
 
 +
===Windows===
 +
On Windows (Visual Studio) you need to install the binary package that fits your compiler. Currently we support two compilers. Please open a command prompt and use ''set'' to see your Visual Studio or Visual Studio Tools version.
 +
 
 +
API2 for
 +
* [http://packages.openrobotino.org/windows/robotino-api2/msvc-12 Visual Studio 2013]
 +
* [http://packages.openrobotino.org/windows/robotino-api2/msvc-140 Visual Studio 2015]
 +
* [http://packages.openrobotino.org/windows/robotino-api2/msvc-141 Visual Studio 2017]
 +
* [http://packages.openrobotino.org/windows/robotino-api2/msvc-142 Visual Studio 2019]
 +
 
 +
==Build examples==
 +
The API2 package comes with examples showing how to use the C/C++ interface.
 +
 
 +
===Linux===
 +
<pre>
 +
mkdir examples
 +
cd examples
 +
cp -R /opt/robotino/examples/cpp/circle/ circle
 +
cd circle
 +
mkdir build
 +
cd build
 +
cmake ..
 +
make
 +
</pre>
 +
 
 +
===Windows===
 +
* Download and install [https://cmake.org/ cmake].
 +
* Copy c:\program files\rec gmb\api2\examples to a user writable directory.
 +
* Run cmake-gui
 +
* Choose source and destiantion directory
 +
* Configure and Generate
 +
* Open the generated Visual Studio Solution
 +
 
 +
==Quick links==
 +
* [https://doc.openrobotino.org/download/RobotinoAPI2/rec_robotino_api2/ Documentation]
 +
 
 +
==C++ example==
 +
<pre>
 +
#include <iostream>
 +
#include "rec/robotino/api2/all.h"
 +
 
 +
rec::robotino::api2::Com com;
 +
rec::robotino::api2::Bumper bumper;
  
[[downloads#CF_card_images|API2 ready to use CF card image]]
+
int main( int argc, char **argv )
|}
+
{
 +
  std::string hostname = "172.26.1.1";
 +
  if( argc > 1 )
 +
  {
 +
    hostname = argv[1];
 +
  }
 +
 
 +
  com.setAddress( hostname.c_str() );
 +
  com.connectToServer( true );
 +
 
 +
  while(com.isConnected() && false == bumper.value())
 +
  {
 +
    std::cout << "Bumper is " << (bumper.value()?"":"not") << " pressed" << std::endl;
 +
    com.processEvents();
 +
    rec::robotino::api2::msleep( 100 );
 +
  }
 +
 
 +
  com.disconnectFromServer();
 +
 
 +
  rec::robotino::api2::shutdown();
 +
 
 +
  return 0;
 +
}
 +
</pre>
 +
 
 +
==C example==
 +
<pre>
 +
#include <stdio.h>
 +
#include <stdlib.h>
 +
#include <string.h>
 +
 
 +
#ifdef WIN32
 +
#include <windows.h>
 +
#else
 +
#include <unistd.h> //usleep
 +
#endif
 +
 
 +
#include "rec/robotino/api2/c/Com.h"
 +
 
 +
void msleep( unsigned int ms )
 +
{
 +
#ifdef WIN32
 +
  SleepEx( ms, FALSE );
 +
#else
 +
  usleep( ms * 1000 );
 +
#endif
 +
}
 +
 
 +
ComId com;
 +
BumperId bumper;
 +
 
 +
int main( int argc, char **argv )
 +
{
 +
  com = Com_construct();
 +
 
 +
  if( argc > 1 )
 +
  {
 +
    Com_setAddress( com, argv[1] );
 +
  }
 +
  else
 +
  {
 +
    Com_setAddress( com, "172.26.1.1" );
 +
  }
 +
 
 +
  if( FALSE == Com_connect( com ) )
 +
  {
 +
    printf( "Error on connect" );
 +
    exit(1);
 +
  }
 +
  else
 +
  {
 +
    char addressBuffer[256];
 +
    Com_address( com, addressBuffer, 256 );
 +
    printf( "Connected to %s\n", addressBuffer );
 +
  }
  
The new API2 is currently under development. The main new features are
+
  while( Com_isConnected( com ) && FALSE == Bumper_value( bumper ) )
* Support for up to 4 cameras.
+
  {
* Support for up to 4 laser rangefinders.
+
    printf("Value of bumper is %d\n",Bumper_value( bumper ) )
* Support for camera controls like brightness, contrast, auto white balance ... The supported controls depend on the camera used.
+
    msleep( 50 );
* Integrated web server for controlling Robotino by a web browser or your smartphone.
+
  }
* Easy build process due to minimal dependencies to external libraries.
 
* Uses TCP port 12080 for communication only. This minimizes problems with firewalls.
 
  
The new API2 is based on a RPC like infrastructure. The [http://servicerobotics.eu/weitere-projekte/rec-rpc-library/ REC-RPC] library is a interprocess communication middleware similar to ROS. It is based on Qt and does not have any other dependencies.
+
  Bumper_destroy( bumper );
 +
  Com_destroy( com );
  
* [[API2_quickstart|Quickstart guide to use API2]]
+
  return 0;
* [[API2_install_daemons|How to install API2 daemons on Robotino]]
+
}
* [[API2_source_build|Building API2 from sources]]
+
</pre>
* [[Cpp|C++ programming with API2]]
 
* [[Java|Java programming with API2]]
 
* [[dotnet|.Net programming with API2]]
 

Latest revision as of 08:24, 10 May 2019

Introduction

Robotino api2 icon 64.png A C/C++ library to access Robotino's sensors and actors from your own program.

Download and install

Check Robotino OS to find the link to the API2 library.

Windows

On Windows (Visual Studio) you need to install the binary package that fits your compiler. Currently we support two compilers. Please open a command prompt and use set to see your Visual Studio or Visual Studio Tools version.

API2 for

Build examples

The API2 package comes with examples showing how to use the C/C++ interface.

Linux

mkdir examples
cd examples
cp -R /opt/robotino/examples/cpp/circle/ circle
cd circle
mkdir build
cd build
cmake ..
make

Windows

  • Download and install cmake.
  • Copy c:\program files\rec gmb\api2\examples to a user writable directory.
  • Run cmake-gui
  • Choose source and destiantion directory
  • Configure and Generate
  • Open the generated Visual Studio Solution

Quick links

C++ example

#include <iostream>
#include "rec/robotino/api2/all.h"

rec::robotino::api2::Com com;
rec::robotino::api2::Bumper bumper;

int main( int argc, char **argv )
{
  std::string hostname = "172.26.1.1";
  if( argc > 1 )
  {
    hostname = argv[1];
  }

  com.setAddress( hostname.c_str() );
  com.connectToServer( true );
  
  while(com.isConnected() && false == bumper.value())
  {
    std::cout << "Bumper is " << (bumper.value()?"":"not") << " pressed" << std::endl;
    com.processEvents();
    rec::robotino::api2::msleep( 100 );
  }

  com.disconnectFromServer();

  rec::robotino::api2::shutdown();

  return 0;
}

C example

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#ifdef WIN32
#include <windows.h>
#else
#include <unistd.h> //usleep
#endif

#include "rec/robotino/api2/c/Com.h"

void msleep( unsigned int ms )
{
#ifdef WIN32
  SleepEx( ms, FALSE );
#else
  usleep( ms * 1000 );
#endif
}

ComId com;
BumperId bumper;

int main( int argc, char **argv )
{
  com = Com_construct();

  if( argc > 1 )
  {
    Com_setAddress( com, argv[1] );
  }
  else
  {
    Com_setAddress( com, "172.26.1.1" );
  }

  if( FALSE == Com_connect( com ) )
  {
    printf( "Error on connect" );
    exit(1);
  }
  else
  {
    char addressBuffer[256];
    Com_address( com, addressBuffer, 256 );
    printf( "Connected to %s\n", addressBuffer );
  }

  while( Com_isConnected( com ) && FALSE == Bumper_value( bumper ) )
  {
    printf("Value of bumper is %d\n",Bumper_value( bumper ) )
    msleep( 50 );
  }

  Bumper_destroy( bumper );
  Com_destroy( com );

  return 0;
}