From fb96d48cbdb795ce15679aeb657108e16dc639e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillem=20Aleny=C3=A0=20Ribas?= <galenya@iri.upc.edu> Date: Mon, 18 Apr 2011 15:12:30 +0000 Subject: [PATCH] trunk/tags/branches creation --- CMakeLists.txt | 84 ++ Findsegway_rmp_200.cmake | 20 + ReadMe.txt | 31 + doc/doxygen.conf | 251 +++++ doc/doxygen_project_name.conf | 1 + doc/images/threads_diagram.pdf | Bin 0 -> 155500 bytes doc/main.dox | 172 ++++ src/CMakeLists.txt | 31 + src/examples/CMakeLists.txt | 9 + src/examples/motionModelData.cpp | 217 +++++ src/examples/test_segwayRMP200.cpp | 147 +++ src/segway_rmp200.cpp | 953 +++++++++++++++++++ src/segway_rmp200.h | 1421 ++++++++++++++++++++++++++++ src/segway_rmp200_exceptions.cpp | 12 + src/segway_rmp200_exceptions.h | 58 ++ 15 files changed, 3407 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 Findsegway_rmp_200.cmake create mode 100644 ReadMe.txt create mode 100644 doc/doxygen.conf create mode 100644 doc/doxygen_project_name.conf create mode 100755 doc/images/threads_diagram.pdf create mode 100644 doc/main.dox create mode 100755 src/CMakeLists.txt create mode 100644 src/examples/CMakeLists.txt create mode 100644 src/examples/motionModelData.cpp create mode 100755 src/examples/test_segwayRMP200.cpp create mode 100755 src/segway_rmp200.cpp create mode 100755 src/segway_rmp200.h create mode 100644 src/segway_rmp200_exceptions.cpp create mode 100644 src/segway_rmp200_exceptions.h diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..212386f --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,84 @@ +# Pre-requisites about cmake itself +CMAKE_MINIMUM_REQUIRED(VERSION 2.4) + +if(COMMAND cmake_policy) + cmake_policy(SET CMP0005 NEW) + cmake_policy(SET CMP0003 NEW) +endif(COMMAND cmake_policy) + +# The project name and the type of project +PROJECT(comm) + +SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/bin) +SET(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/lib) +SET(CMAKE_INSTALL_PREFIX /usr/local) + +IF (NOT CMAKE_BUILD_TYPE) + SET(CMAKE_BUILD_TYPE "DEBUG") +ENDIF (NOT CMAKE_BUILD_TYPE) + +SET(CMAKE_C_FLAGS_DEBUG "-g -Wall") +SET(CMAKE_C_FLAGS_RELEASE "-O3") + +ADD_SUBDIRECTORY(src) + +FIND_PACKAGE(Doxygen) + +FIND_PATH(IRI_DOC_DIR doxygen.conf ${CMAKE_SOURCE_DIR}/doc/iri_doc/) +IF (IRI_DOC_DIR) + ADD_CUSTOM_TARGET (doc ${DOXYGEN_EXECUTABLE} ${CMAKE_SOURCE_DIR}/doc/iri_doc/doxygen.conf) +ELSE (IRI_DOC_DIR) + ADD_CUSTOM_TARGET (doc ${DOXYGEN_EXECUTABLE} ${CMAKE_SOURCE_DIR}/doc/doxygen.conf) +ENDIF (IRI_DOC_DIR) + +ADD_CUSTOM_TARGET (distclean @echo cleaning cmake files) + +IF (UNIX) + ADD_CUSTOM_COMMAND( + COMMENT "distribution clean" + COMMAND make ARGS clean + COMMAND rm ARGS -rf ${CMAKE_SOURCE_DIR}/build/* + + TARGET distclean + ) +ELSE(UNIX) + ADD_CUSTOM_COMMAND( + COMMENT "distclean only implemented in unix" + TARGET distclean + ) +ENDIF(UNIX) + +ADD_CUSTOM_TARGET (uninstall @echo uninstall package) + +IF (UNIX) + ADD_CUSTOM_COMMAND( + COMMENT "uninstall package" + COMMAND xargs ARGS rm < install_manifest.txt + + TARGET uninstall + ) +ELSE(UNIX) + ADD_CUSTOM_COMMAND( + COMMENT "uninstall only implemented in unix" + TARGET uninstall + ) +ENDIF(UNIX) + + +IF (UNIX) + SET(CPACK_PACKAGE_FILE_NAME "iri-${PROJECT_NAME}-dev-${CPACK_PACKAGE_VERSION}${DISTRIB}${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}") + SET(CPACK_PACKAGE_NAME "iri-${PROJECT_NAME}-dev") + SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Part of IRI-laboratory libraries. More information at http://wikiri.upc.es/index.php/Robotics_Lab") + SET(CPACK_PACKAGING_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}) + SET(CPACK_GENERATOR "DEB") + SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "labrobotica@iri.upc.edu") + SET(CPACK_SET_DESTDIR "ON") # Necessary because of the absolute install paths + + INCLUDE(CPack) +ELSE(UNIX) + ADD_CUSTOM_COMMAND( + COMMENT "packaging only implemented in unix" + TARGET uninstall + ) +ENDIF(UNIX) + diff --git a/Findsegway_rmp_200.cmake b/Findsegway_rmp_200.cmake new file mode 100644 index 0000000..8c47911 --- /dev/null +++ b/Findsegway_rmp_200.cmake @@ -0,0 +1,20 @@ +FIND_PATH(segway_rmp_200_INCLUDE_DIR segway_rmp200.h segway_rmp200_exceptions.h /usr/include/iridrivers /usr/local/include/iridrivers) + +FIND_LIBRARY(segway_rmp_200_LIBRARY + NAMES segway_rmp_200 + PATHS /usr/lib /usr/local/lib /usr/local/lib/iridrivers) + +IF (segway_rmp_200_INCLUDE_DIR AND segway_rmp_200_LIBRARY) + SET(segway_rmp_200_FOUND TRUE) +ENDIF (segway_rmp_200_INCLUDE_DIR AND segway_rmp_200_LIBRARY) + +IF (segway_rmp_200_FOUND) + IF (NOT segway_rmp_200_FIND_QUIETLY) + MESSAGE(STATUS "Found Segway RMP200 driver: ${segway_rmp_200_LIBRARY}") + ENDIF (NOT segway_rmp_200_FIND_QUIETLY) +ELSE (segway_rmp_200_FOUND) + IF (segway_rmp_200_FIND_REQUIRED) + MESSAGE(FATAL_ERROR "Could not find segway RMP200 driver") + ENDIF (segway_rmp_200_FIND_REQUIRED) +ENDIF (segway_rmp_200_FOUND) + diff --git a/ReadMe.txt b/ReadMe.txt new file mode 100644 index 0000000..6f90a5c --- /dev/null +++ b/ReadMe.txt @@ -0,0 +1,31 @@ +Copyright (C) 2009-2010 Institut de Robòtica i Informà tica Industrial, CSIC-UPC. +Author shernand (shernand@iri.upc.edu) +All rights reserved. + +This file is part of segway RMP 200 driver library +segway RMP 200 driver library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program. If not, see <http://www.gnu.org/licenses/> + + + + + + + + + + + + + + diff --git a/doc/doxygen.conf b/doc/doxygen.conf new file mode 100644 index 0000000..347af2e --- /dev/null +++ b/doc/doxygen.conf @@ -0,0 +1,251 @@ +# Doxyfile 1.5.5 + +@INCLUDE_PATH = ../doc/ +@INCLUDE = doxygen_project_name.conf + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +DOXYFILE_ENCODING = UTF-8 +PROJECT_NUMBER = +OUTPUT_DIRECTORY = ../doc +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = NO +ABBREVIATE_BRIEF = +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = YES +STRIP_FROM_PATH = +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = NO +QT_AUTOBRIEF = NO +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = NO +INHERIT_DOCS = YES +SEPARATE_MEMBER_PAGES = NO +TAB_SIZE = 8 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = YES +OPTIMIZE_OUTPUT_JAVA = NO +OPTIMIZE_FOR_FORTRAN = NO +OPTIMIZE_OUTPUT_VHDL = NO +BUILTIN_STL_SUPPORT = NO +CPP_CLI_SUPPORT = NO +SIP_SUPPORT = NO +DISTRIBUTE_GROUP_DOC = NO +SUBGROUPING = YES +TYPEDEF_HIDES_STRUCT = NO +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = NO +EXTRACT_PRIVATE = NO +EXTRACT_STATIC = NO +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = NO +EXTRACT_ANON_NSPACES = NO +HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_CLASSES = NO +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = YES +HIDE_SCOPE_NAMES = NO +SHOW_INCLUDE_FILES = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = NO +SORT_BRIEF_DOCS = NO +SORT_GROUP_NAMES = NO +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +SHOW_DIRECTORIES = YES +FILE_VERSION_FILTER = +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = YES +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = ../src \ + ../doc/main.dox +INPUT_ENCODING = UTF-8 +FILE_PATTERNS = *.c \ + *.h \ + *.cpp +RECURSIVE = YES +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = *.tab.c \ + *.tab.h \ + lex* \ + *glr.h \ + *llr.h \ + *glr.c \ + *llr.c \ + *general.h +EXCLUDE_SYMBOLS = +EXAMPLE_PATH = ../src/examples +EXAMPLE_PATTERNS = +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = ../doc/images +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = YES +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = YES +REFERENCES_RELATION = YES +REFERENCES_LINK_SOURCE = YES +USE_HTAGS = NO +VERBATIM_HEADERS = YES +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = YES +COLS_IN_ALPHA_INDEX = 5 +IGNORE_PREFIX = +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_ALIGN_MEMBERS = YES +GENERATE_HTMLHELP = NO +GENERATE_DOCSET = NO +DOCSET_FEEDNAME = "Doxygen generated docs" +DOCSET_BUNDLE_ID = org.doxygen.Project +HTML_DYNAMIC_SECTIONS = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +BINARY_TOC = NO +TOC_EXPAND = NO +DISABLE_INDEX = NO +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = NO +TREEVIEW_WIDTH = 250 +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = NO +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4 +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = YES +USE_PDFLATEX = NO +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = NO +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = NO +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = _USE_MPI=1 +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- +TAGFILES = +GENERATE_TAGFILE = +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = YES +MSCGEN_PATH = +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = YES +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = NO +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = NO +INCLUDED_BY_GRAPH = NO +CALL_GRAPH = YES +CALLER_GRAPH = YES +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = NO +DOT_IMAGE_FORMAT = png +DOT_PATH = +DOTFILE_DIRS = +DOT_GRAPH_MAX_NODES = 50 +MAX_DOT_GRAPH_DEPTH = 2 +DOT_TRANSPARENT = YES +DOT_MULTI_TARGETS = NO +GENERATE_LEGEND = YES +DOT_CLEANUP = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = NO diff --git a/doc/doxygen_project_name.conf b/doc/doxygen_project_name.conf new file mode 100644 index 0000000..37b18d4 --- /dev/null +++ b/doc/doxygen_project_name.conf @@ -0,0 +1 @@ +PROJECT_NAME = "segway RMP 200 driver" diff --git a/doc/images/threads_diagram.pdf b/doc/images/threads_diagram.pdf new file mode 100755 index 0000000000000000000000000000000000000000..0a67e87eb4f2573fab3f533bcfe8f16bdbf2b5df GIT binary patch literal 155500 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 Vevp5?z%2lufnbV?`eqc^{{hjDtzZBE literal 0 HcmV?d00001 diff --git a/doc/main.dox b/doc/main.dox new file mode 100644 index 0000000..4e59c24 --- /dev/null +++ b/doc/main.dox @@ -0,0 +1,172 @@ +/*! \mainpage segway RMP200 driver + + \section Introduction + + This driver is in charge to operate motion of a SegwayRMP200 and as well as monitoring + + The main class is SegwayRMP200, + + - The class has an FTDI driver object to ensure USB communication with the segway + - It also launches two threads for reading data and sending commands to the segway + - Uses a mutex variable, to ensure that only one thread is accessing ftdi object at a time. + . + + Segway parameters such as position and velocities paramaters are internal variables of the class, + and updated every 10 ms approx, by the read thread. + + The read thread waits for a reception event coming from FTDI device. Once received it reads data stored into + receiving buffer of FTDI device. A reference of reception event of FTDI device is retrieved at constructor so + as to wait upon it. + + + Comanding the segway on the ohter hand is done at 50 Hz approx by the command thread, i.e one new command each + 20 ms.Actually, segway must receive a command at least every 0.4 seconds (2.5 Hz) in order to keep it moving. + Otherwise it will automatically set motors to zero. + + + \section Installation + + \subsection Pre-Requisites + + This driver requires of the following libraries and packages + - <A href="http://www.cmake.org">cmake</A>, a cross-platform build system. + - <A href="http://www.doxygen.org">doxygen</a> and + <A href="http://www.graphviz.org">graphviz</a> to generate the documentation. + - <a href="http://www.libusb.org">libusb</a> for libftd2xx. + - <a href="http://www.ftdichip.com">libftd2xx</a> for FTDI chip + - <a href="http://wikiri.upc.es/index.php/Utilities_library">libiriutils</a> for threads and events from IRI repository. + - <a href="http://wikiri.upc.es/index.php/Communications_library">communications library</a> for the FTDI driver. + . + + Under linux all of these utilities are available in ready-to-use packages. + + \subsection Compilation + + + \par Install iriutils + + For information on how to download, compile and install this library, please + visit the following web page: http://wikiri.upc.es/index.php/Utilities_library + + (FTDI,...) + + \par Install this library + To build (placed in ./bin) the library just type in FTDI directory: + + \code + cmake . + make + \endcode + + To create the documentation (placed in ./doc) type: + \code + make doc + \endcode + + To install the library into system folders + \code + sudo make install + \endcode + + Just download this package, uncompress it, and execute cmake in build folder, + this step will generate the makefile and put all cmake files this folder. + + \code + cd build + cmake .. + \endcode + + To obtain the executables execute in build folder: + + \code + make + \endcode + + To install the library SegwayRMP200 into system folders, in build folder: + \code + sudo make install + \endcode + + To generate the documentation, in build folder: + \code + make doc + \endcode + + <em>Cmake</em> only needs to be executed once (make will automatically call + <em>cmake</em> if you modify one of the <em>CMakeList.txt</em> files). + + The files in the <em>build</em> directory are genetated by <em>cmake</em> + and <em>make</em> and can be safely removed. + After doing so you will need to call cmake manually again. + + \subsection Contents + + This project is composed by the following source files + - SegwayRMP200Driver.cpp (Segway driver) + - SegwayRMP200Driver.h + - SegwayRMP200_main.cpp (example program) + . + + \subsection Configuration + + The default build mode is DEBUG. That is, objects and executables + include debug information. + + The RELEASE build mode optimizes for speed. To build in this mode + execute + - cmake .. -DCMAKE_BUILD_TYPE=RELEASE + . + The release mode will be kept until next time cmake is executed. + + \section License + + This package is licensed under a + <a href="http://creativecommons.org/licenses/by/3.0/"> + Creative Commons Attribution 3.0 Unported License</a>. + + \section Disclaimer + + <i>This package is distributed in the hope that it will be useful, but without any warranty. + it is provided "as is" without warranty of any kind, either expressed or implied, including, + but not limited to, the implied warranties of merchantability and fitness for a particular + purpose. The entire risk as to the quality and performance of the program is with you. + should the program prove defective, the GMR group does not assume the cost of any necessary + servicing, repair or correction. + + In no event unless required by applicable law the author will be liable to you for damages, + including any general, special, incidental or consequential damages arising out of the use or + inability to use the program (including but not limited to loss of data or data being rendered + inaccurate or losses sustained by you or third parties or a failure of the program to operate + with any other programs), even if the author has been advised of the possibility of such damages.</i> + + \author Ismael Haddad + \version 0.1 + \date september 2009 + +*/ + + + +/*! \todo - afegir variables internes : velocity command (as received) i turn command (as received). Correspond al packet de dades 0x407, veure pag. 10 del Segway RMP Interface guide + - mutex per vT i vR ?. fer un mutex.enter() i mutex.exit() a la funcio setComands() + - mirar quins son els rangs de valors corrents per velocitat translacio i rotació i implementar algun mecanisme per no sobrepasar els rangs. + - Amb Processador UI ences (boto verd) i motors apagats, es pot llegir missatges. Son els heartbeats, missatges sense informacio que envia el UI processor als CPU dels motors + - Per llegir informacio util del segway, els motors han d'estar encesos + - Si s'utilitza amb un segway 200 (amb balanceig), anar amb compte amb la configuració. + De fet, es pot configurar el mode de traccio en el que s'ha de posar el segway (tractor, balance) aixi com bloquejar el balanceig (sendConfig() o config()) + - sembla que la carga de les batteries dels UI variin lleugerament (augmenten?) quan s'utilitzen els motors. Potser hi ha algun mecanisme de carrega de les bateries amb alternador (verificar) + . +*/ + + + + + + + + + + + + + diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100755 index 0000000..60b7e99 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,31 @@ +# edit the following line to add all the source code files of the library +SET(sources segway_rmp200.cpp segway_rmp200_exceptions.cpp) +# edit the following line to add all the header files of the library +SET(headers segway_rmp200.h segway_rmp200_exceptions.h) + +# edit the following line to find the necessary packages +FIND_PACKAGE(iriutils REQUIRED) +FIND_PACKAGE(comm REQUIRED) + +# edit the following line to add the necessary include directories +INCLUDE_DIRECTORIES(.) +INCLUDE_DIRECTORIES(${iriutils_INCLUDE_DIR}) +INCLUDE_DIRECTORIES(${comm_INCLUDE_DIR}) + +ADD_LIBRARY(segway_rmp_200 SHARED ${sources}) + +#edit the following line to add the necessary system libraries (if any) +TARGET_LINK_LIBRARIES(segway_rmp_200 ${iriutils_LIBRARY}) +TARGET_LINK_LIBRARIES(segway_rmp_200 ${comm_LIBRARY}) + +INSTALL(TARGETS segway_rmp_200 + RUNTIME DESTINATION bin + LIBRARY DESTINATION lib/iridrivers + ARCHIVE DESTINATION lib/iridrivers +) + +INSTALL(FILES ${headers} DESTINATION include/iridrivers) + +INSTALL(FILES ../Findsegway_rmp_200.cmake DESTINATION ${CMAKE_ROOT}/Modules/) + +ADD_SUBDIRECTORY(examples) diff --git a/src/examples/CMakeLists.txt b/src/examples/CMakeLists.txt new file mode 100644 index 0000000..6d03dda --- /dev/null +++ b/src/examples/CMakeLists.txt @@ -0,0 +1,9 @@ +# edit the following line to add the source code for the example and the name of the executable +ADD_EXECUTABLE(test_segway_rmp_200 test_segwayRMP200.cpp) +ADD_EXECUTABLE(motionModelData motionModelData.cpp) + +# edit the following line to add the necessary libraries +TARGET_LINK_LIBRARIES(test_segway_rmp_200 segway_rmp_200 ${comm_LIBRARY}) +TARGET_LINK_LIBRARIES(motionModelData segway_rmp_200 ${comm_LIBRARY}) + + diff --git a/src/examples/motionModelData.cpp b/src/examples/motionModelData.cpp new file mode 100644 index 0000000..4df786e --- /dev/null +++ b/src/examples/motionModelData.cpp @@ -0,0 +1,217 @@ +#include "segway_rmp200.h" +#include "ftdiexceptions.h" +#include "ftdiserver.h" +#include "ftdimodule.h" +#include <iostream> +#include <fstream> +#include <time.h> +#include <sys/time.h> +#include <math.h> + + +/** \example motionModelData.cpp + * + * This example executes a series of commands to record platform data of interest to build a kinematic/dynammic model of the platform + * + * Before running this example it is important to follow the next steps: + * + * - check that E-Stop lanyard is plugged. (the red cordon). Motors won't + * start unless it is plugged + * - connect segway to USB slot of Pc host + * - start Segway UI processor (green button) + * - start Motors (yellow button) + * + * This example first creates an FTDI server to detect any possible segway + * platform connected to the computer. It uses the add_custom_PID() function + * to add the PID and VID combination used by Segway. It then opens the + * first device found, if any, using the serial number. At this point it is + * important that no other FTDI device is connected to the computer because + * the program does not check which kind of device it is. + * + * Once the FTDI device is opened and configured, a new CSegwayRMP200 object + * is created an associated to the FTDI device. Then the robotic platform is + * configured and commanded to move forward. + * + * While moving, every 1 second, the whole information of the platform is + * 50displayed on screen. Since the odometry of the robot uses inertial sensors, + * if the platform is not actually moving, the displayed information will + * have no real meaning. + * + * It is important to note that it is not possible to execute any function + * of the public API of the CSegwayRMP200 class until a valid FTDI object + * has been associated to the segway object. + * + * If the motor are not enabled (yellow button turned off), the segway only + * sends heartbeat commands, but it is not possible to send motion commands + * or receive feedback data. In this case, the program will not fail, but + * nothing will happen. + */ + +using namespace std; + +string segway_name="segway"; +unsigned int iterationPeriod = 50; //msec + +int main(int argc, char *argv[]) +{ + //operational variables + CSegwayRMP200 *segway; + CFTDIServer *ftdi_server=CFTDIServer::instance(); + string serial_number; + unsigned int ii=0; + unsigned int jj=0; + unsigned int kk=0; + int opt; + ofstream dataFile; //data file + float vt, vr; //[m/s], [rad/s] + string fileName = "/home/andreu/Desktop/dataFile.txt"; + timeval tvTimeStamp; + double timeStamp; + streamsize nn; + + //user variables + float duration; //duration of all the experiment + float vTstepDuration; //duration of a step + float vRstepDuration; //duration of a step + float vT0; //initial translational velocity + float vR0; //initial rotational velocity + float vTstepIncrement; //velocity increment at each step + float vRstepIncrement; //velocity increment at each step + + //user derived variables + unsigned int totalIterations; + unsigned int jjMax; + unsigned int kkMax; + + while ((opt = getopt(argc, argv, "f:h?"))!= -1) + { + switch (opt) + { + case 'f': // file name + fileName = optarg; + break; + case '?': // help + case 'h': + default: + cout << " USAGE" << endl + << " " << argv[0] << " [options]" << endl + << " OPTIONS" << endl + << " -f FILE_NAME (default: " << fileName << ")" << endl; + return 1; + } + } + + //user dialog + cout << endl << "Duration [s]: "; cin >> duration; + cout << endl << "vTstepDuration [s]: "; cin >> vTstepDuration; + cout << endl << "vRstepDuration [s]: "; cin >> vRstepDuration; + cout << endl << "vT0 [m/s]: "; cin >> vT0; + cout << endl << "vR0 [rad/s]: "; cin >> vR0; + cout << endl << "vTstepIncrement [m/s]: "; cin >> vTstepIncrement; + cout << endl << "vRstepIncrement [rad/s]: "; cin >> vRstepIncrement; + cout << endl; + + //set user derived variables + totalIterations = (unsigned int)(duration/(iterationPeriod/1000.0)); + jjMax = (unsigned int)(vTstepDuration/(iterationPeriod/1000.0)); + kkMax = (unsigned int)(vRstepDuration/(iterationPeriod/1000.0)); + + //prints experiment config + cout << "*******************************************************************" << endl; + cout << "Duration: " << duration << endl; + cout << "vTstepDuration: " << vTstepDuration << endl; + cout << "vRstepDuration: " << vRstepDuration << endl; + cout << "vTstepIncrement: " << vTstepIncrement << endl; + cout << "vRstepIncrement: " << vRstepIncrement << endl; + cout << "vT0: " << vT0 << endl; + cout << "vR0: " << vR0 << endl; + cout << "totalIterations: " << totalIterations << endl; + cout << "jjMax: " << jjMax << endl; + cout << "kkMax: " << kkMax << endl; + cout << "*******************************************************************" << endl; + cout << "Do you want to continue ? (y/n)" << endl; + char resp; + cin >> resp; + if (resp == 'n') + { + cout << "Execution aborted" << endl; + return 1; + } + + //open data file and prints a header + dataFile.open(fileName.c_str(), ofstream::out); + dataFile << "tS[s] vTcmnd[m/s] vRcmnd[rad/s] vT[m/s] vR[rad/s] pitch[rad] roll[rad] pitchRate[rad/s] rollRate[rad/s] " + << "leftTorque[Nm] rightTorque[Nm] uiBattery[V] motorBattery[V]" << endl; + + + //execution + try{ + segway=new CSegwayRMP200(segway_name); + segway->connect(); + usleep(10000); + segway->unlock_balance(); + segway->reset_right_wheel_integrator(); + segway->reset_left_wheel_integrator(); + segway->reset_yaw_integrator(); + segway->reset_forward_integrator(); + segway->set_velocity_scale_factor(1.0); + segway->set_acceleration_scale_factor(1.0); + segway->set_turnrate_scale_factor(1.0); + //segway->set_operation_mode(balance); + + vt = vT0; + vr = vR0; + for (ii=0; ii<totalIterations; ii++) + { + jj++; kk++; + if ( jj == jjMax ) + { + jj=0; + vt = vt + vTstepIncrement; + } + if ( kk == kkMax ) + { + kk=0; + vr = vr + vRstepIncrement; + } + + //send commands to platform + segway->move( vt , vr/(2*M_PI) ); //rotational speed required in revolutions per second + + //timeStamp + gettimeofday(&tvTimeStamp, NULL); + timeStamp = (double)(tvTimeStamp.tv_sec + tvTimeStamp.tv_usec/1e6); + + //logging data + //cout << (*segway) << endl; + nn=dataFile.precision(15); + dataFile << timeStamp << " "; + dataFile.precision(6); + dataFile << vt << "\t" << vr << "\t" + << (segway->get_left_wheel_velocity()+segway->get_right_wheel_velocity())/2.0 << "\t" << segway->get_yaw_rate()*M_PI/180.0 << "\t" + << segway->get_pitch_angle()*M_PI/180.0 << "\t" << segway->get_roll_angle()*M_PI/180.0 << "\t" + << segway->get_pitch_rate()*M_PI/180.0 << "\t" << segway->get_roll_rate()*M_PI/180.0 << "\t" + << segway->get_left_motor_torque() << "\t" << segway->get_right_motor_torque() << "\t" + << segway->get_ui_battery_voltage() << "\t" << segway->get_powerbase_battery_voltage() << endl; + + //sleep up to next iteration + usleep(iterationPeriod*1000);//sending commands @20Hz approx + } + + dataFile.close(); + +/* segway->reset_right_wheel_integrator(); + segway->reset_left_wheel_integrator(); + segway->reset_yaw_integrator(); + segway->reset_forward_integrator(); + sleep(5); + cout << (*segway) << endl;*/ + + segway->stop(); + segway->close(); + delete segway; + + }catch(CException &e){ + std::cout << e.what() << std::endl; + } +} diff --git a/src/examples/test_segwayRMP200.cpp b/src/examples/test_segwayRMP200.cpp new file mode 100755 index 0000000..7acc1bb --- /dev/null +++ b/src/examples/test_segwayRMP200.cpp @@ -0,0 +1,147 @@ +#include "segway_rmp200.h" +#include "ftdiexceptions.h" +#include "eventserver.h" +#include "ftdiserver.h" +#include "ftdimodule.h" +#include <iostream> + +/** \example test_segwayRMP200.cpp + * + * This example shows the basic operation of a Segway RMP200 platform. + * + * Before running this example it is important to follow the next steps: + * + * - check that E-Stop lanyard is plugged. (the red cordon). Motors won't + * start unless it is plugged + * - connect segway to USB slot of Pc host + * - start Segway UI processor (green button) + * - start Motors (yellow button) + * + * This example first creates an FTDI server to detect any possible segway + * platform connected to the computer. It uses the add_custom_PID() function + * to add the PID and VID combination used by Segway. It then opens the + * first device found, if any, using the serial number. At this point it is + * important that no other FTDI device is connected to the computer because + * the program does not check which kind of device it is. + * + * Once the FTDI device is opened and configured, a new CSegwayRMP200 object + * is created an associated to the FTDI device. Then the robotic platform is + * configured and commanded to move forward. + * + * While moving, every 1 second, the whole information of the platform is + * displayed on screen. Since the odometry of the robot uses inertial sensors, + * if the platform is not actually moving, the displayed information will + * have no real meaning. + * + * It is important to note that it is not possible to execute any function + * of the public API of the CSegwayRMP200 class until a valid FTDI object + * has been associated to the segway object. + * + * If the motor are not enabled (yellow button turned off), the segway only + * sends heartbeat commands, but it is not possible to send motion commands + * or receive feedback data. In this case, the program will not fail, but + * nothing will happen. + */ + +std::string segway_name="segway"; + +int main(int argc, char *argv[]) +{ + CSegwayRMP200 *segway = NULL; + std::list<std::string> events; + CFTDIServer *ftdi_server=CFTDIServer::instance(); + CEventServer *event_server=CEventServer::instance(); + std::string serial_number,cable_disconnected,power_off; + bool connected=false; + int i=0,event_id=0; + + try + { + while(!connected) + { + try + { + segway = new CSegwayRMP200(); + connected = true; + } + catch(CException &e) + { + if(segway != NULL) + delete segway; + + segway = NULL; + + std::cout << e.what() << std::endl; + std::cout << "The segway platfrom is still not ready (is it power on?)" << std::endl << std::endl; + sleep(1); + } + } + + segway->unlock_balance(); + segway->set_operation_mode(tractor); + segway->set_gain_schedule(light); + segway->reset_right_wheel_integrator(); + segway->reset_left_wheel_integrator(); + segway->reset_yaw_integrator(); + segway->reset_forward_integrator(); + + // keep in mind that the order in of the event son the events list fix their + // priority. The first event on the list will be checked first, and if it is + // active, the other will not be checked. + events.push_back(segway->get_cable_disconnected_event()); + events.push_back(segway->get_power_off_event()); + events.push_back(segway->get_no_heartbeat_event()); + events.push_back(segway->get_new_status_event()); + + segway->move(0.1,0.0); + for(i=0;i<1000000;i++) + { + event_id=event_server->wait_first(events); + if(event_id==3) + { + if((i%100)==0) + std::cout << (*segway) << std::endl; + } + else if(event_id==2) + { + std::cout << "No heart beat detected" << std::endl; + segway->stop(); + sleep(1); + } + else if(event_id==1) + { + std::cout << "The segway platform power is off" << std::endl; + segway->stop(); + sleep(1); + } + else + { + std::cout << "The USB cable has been disconnected" << std::endl; + segway->stop(); + segway->close(); + connected=false; + while(!connected) + { + try + { + segway->connect(); + connected=true; + segway->move(0.1,0.0); + } + catch(CException &e) + { + std::cout << "The segway platfrom is still not ready" << std::endl; + sleep(1); + } + } + } + } + segway->stop(); + segway->close(); + delete segway; + } + catch(CException &e) + { + std::cout << e.what() << std::endl; + } +} diff --git a/src/segway_rmp200.cpp b/src/segway_rmp200.cpp new file mode 100755 index 0000000..bef3fb5 --- /dev/null +++ b/src/segway_rmp200.cpp @@ -0,0 +1,953 @@ +#include "segway_rmp200.h" +#include "segway_rmp200_exceptions.h" +#include "eventexceptions.h" +#include "ftdiexceptions.h" +#include <iostream> +#include <string> + +const std::string CSegwayRMP200::description = "Robotic Mobile Platform"; +const short int CSegwayRMP200::pid = 0xE729; + +CSegwayRMP200::CSegwayRMP200(const std::string& desc_serial) +{ + std::string serial_number=desc_serial; + std::vector<int> ftdi_devs; + + this->event_server = CEventServer::instance(); + this->thread_server = CThreadServer::instance(); + + this->init_attributes(); + this->init_ftdi(); + + if(desc_serial.compare("") == 0) + { + ftdi_devs = this->ftdi_server->get_ids_by_description(CSegwayRMP200::description); + + //check how many segway devices are connected + //launch exception if there are no segways or there is more than one + if(ftdi_devs.size() != 1) + { + if(ftdi_devs.size() == 0) + throw CSegwayRMP200Exception(_HERE_, "No segways available", this->id); + else + { + throw CSegwayRMP200Exception(_HERE_, "More than one segway available", this->id); + } + } + serial_number= this->ftdi_server->get_serial_number(ftdi_devs.at(0)); + } + this->id = "segway_" + serial_number; + this->init_threads(); + this->init_events(); + + this->connect(desc_serial); +} + +void CSegwayRMP200::init_attributes(void) +{ + // initialize internal variables + this->left_wheel_velocity=0.0; + this->right_wheel_velocity=0.0; + this->pitch_angle=0.0; + this->pitch_rate=0.0; + this->roll_angle=0.0; + this->roll_rate=0.0; + this->yaw_rate=0.0; + this->servo_frames=0.0; + this->left_wheel_displ=0.0; + this->right_wheel_displ=0.0; + this->forward_displ=0.0; + this->yaw_displ=0.0; + this->left_torque=0.0; + this->right_torque=0.0; + this->mode=(op_mode)-1; + this->hardware_mode=(op_mode)-1; + this->gain_schedule=(gain)-1; + this->ui_battery=0.0; + this->powerbase_battery=0.0; + // command variables + this->vT=0; + this->vR=0; +} + +void CSegwayRMP200::init_ftdi(void) +{ + this->comm_dev=NULL; + this->ftdi_server = CFTDIServer::instance(); + this->ftdi_server->add_custom_PID(this->pid); +} + +void CSegwayRMP200::init_threads(void) +{ + + // create the feedback and command threads + this->read_thread_id = this->id; + this->read_thread_id += "_read_thread"; + this->thread_server->create_thread(this->read_thread_id); + this->thread_server->attach_thread(this->read_thread_id,this->start_read_thread,this); + this->command_thread_id = this->id; + this->command_thread_id += "_command_thread"; + this->thread_server->create_thread(this->command_thread_id); + this->thread_server->attach_thread(this->command_thread_id,this->start_command_thread,this); + //create the heartbeat thread + this->heartbeat_thread_id = this->id; + this->heartbeat_thread_id += "_heartbeat_thread"; + this->thread_server->create_thread(this->heartbeat_thread_id); + this->thread_server->attach_thread(this->heartbeat_thread_id,this->heartbeat_thread,this); +} + +void CSegwayRMP200::init_events(void) +{ + // create the finish events + this->read_finish_event = this->id; + this->read_finish_event += "_finish_read_thread"; + this->event_server->create_event(this->read_finish_event); + this->command_finish_event = this->id; + this->command_finish_event += "_finish_command_thread"; + this->event_server->create_event(this->command_finish_event); + // create the error events + this->cable_disconnected_event = this->id; + this->cable_disconnected_event += "_cable_disconnected"; + this->event_server->create_event(this->cable_disconnected_event); + this->power_off_event = this->id; + this->power_off_event += "_power_off_event"; + this->event_server->create_event(this->power_off_event); + this->no_heartbeat_event = this->id; + this->no_heartbeat_event += "_no_heartbeat"; + this->event_server->create_event(this->no_heartbeat_event); + // create the heartbeat event + this->heartbeat_event = this->id; + this->heartbeat_event += "_heartbeat"; + this->event_server->create_event(this->heartbeat_event); + // create the new status event + this->new_status_event = this->id; + this->new_status_event += "_new_status"; + this->event_server->create_event(this->new_status_event); + +} + +std::string CSegwayRMP200::get_id(void) +{ + return this->id; +} + +std::string CSegwayRMP200::get_cable_disconnected_event(void) +{ + return this->cable_disconnected_event; +} + +std::string CSegwayRMP200::get_power_off_event(void) +{ + return this->power_off_event; +} + +std::string CSegwayRMP200::get_no_heartbeat_event(void) +{ + return this->no_heartbeat_event; +} + +std::string CSegwayRMP200::get_new_status_event(void) +{ + return this->new_status_event; +} + +unsigned char CSegwayRMP200::compute_checksum(segway_packet *packet) +{ + int i; + + unsigned short int checksum=0; + unsigned short int checksum_high=0; + + for(i=0;i<17;i++) + checksum += (short)packet->data[i]; + checksum_high = (unsigned short)(checksum >> 8); + checksum &= 0xFF; + checksum +=checksum_high; + checksum_high = (unsigned short)(checksum >> 8); + checksum &= 0xFF; + checksum +=checksum_high; + checksum = (~checksum + 1) & 0xFF; + + return (unsigned char)checksum; +} + +bool CSegwayRMP200::read_packet(segway_packet *packet,int *packet_len) +{ + int read_data=0,len=0,pos=0; + unsigned char *data=NULL; + + if(packet==NULL) + { + /* handle exceptions */ + throw CSegwayRMP200Exception(_HERE_,"Invalid packet structure",this->id); + } + else + { + len=this->comm_dev->get_num_data(); + data=new unsigned char[len]; + try{ + read_data=this->comm_dev->read(data,len); + }catch(CException &e){ + /* handle exception */ + throw; + } + if(read_data!=len) + { + /* handle exceptions */ + throw CSegwayRMP200Exception(_HERE_,"Unexpected error while reading the USB device",this->id); + } + while(pos<len) + { + if((*packet_len)==0) + { + if(data[pos]==0xF0) + { + packet->data[(*packet_len)]=data[pos]; + (*packet_len)++; + } + } + else + { + if((*packet_len)==1) + { + if(data[pos]==0x55) + { + packet->data[(*packet_len)]=data[pos]; + (*packet_len)++; + } + else + (*packet_len)=0; + } + else + { + if((*packet_len)==2) + { + if(data[pos]==0xAA || data[pos]==0xBB) + { + packet->data[(*packet_len)]=data[pos]; + (*packet_len)++; + } + else + (*packet_len)=0; + } + else + { + packet->data[(*packet_len)]=data[pos]; + (*packet_len)++; + if((*packet_len)==18) + { + (*packet_len)=0; + if(data!=NULL) + delete[] data; + return true; + } + } + } + } + pos++; + } + } + + if(data!=NULL) + delete[] data; + return false; +} + +void CSegwayRMP200::parse_packet(segway_packet *packet) +{ + short int command; + int i=0; + + if(this->compute_checksum(packet)!=packet->data[17]) + { + /* handle exceptions */ + throw CSegwayRMP200Exception(_HERE_,"Invalid packet checksum, a transmission error ocurred",this->id); + } + if(packet->data[2]==0xaa) + { + this->access_status.enter(); + command=(packet->data[4]*256+packet->data[5])/32; + switch(command) + { + case 0x0400: break; + case 0x0401: this->pitch_angle=((float)((short int)(((int)packet->data[9]<<8)+(int)packet->data[10])))/7.8; + this->pitch_rate=((float)((short int)(((int)packet->data[11]<<8)+(int)packet->data[12])))/7.8; + this->roll_angle=((float)((short int)(((int)packet->data[13]<<8)+(int)packet->data[14])))/7.8; + this->roll_rate=((float)((short int)(((int)packet->data[15]<<8)+(int)packet->data[16])))/7.8; + break; + case 0x0402: this->left_wheel_velocity=((float)((short int)(((int)packet->data[9]<<8)+(int)packet->data[10])))/332.0; + this->right_wheel_velocity=((float)((short int)(((int)packet->data[11]<<8)+(int)packet->data[12])))/332.0; + this->yaw_rate=((float)((short int)(((int)packet->data[13]<<8)+(int)packet->data[14])))/7.8; + this->servo_frames=((float)((unsigned short int)(((int)packet->data[15]<<8)+(int)packet->data[16])))*0.01; + break; + case 0x0403: this->left_wheel_displ=((float)((int)(((int)packet->data[11]<<24)+((int)packet->data[12]<<16)+((int)packet->data[9]<<8)+(int)packet->data[10])))/33215.0; + this->right_wheel_displ=((float)((int)(((int)packet->data[15]<<24)+((int)packet->data[16]<<16)+((int)packet->data[13]<<8)+(int)packet->data[14])))/33215.0; + break; + case 0x0404: this->forward_displ=((float)((int)(((int)packet->data[11]<<24)+((int)packet->data[12]<<16)+((int)packet->data[9]<<8)+(int)packet->data[10])))/33215.0;; + this->yaw_displ=((float)((int)(((int)packet->data[15]<<24)+((int)packet->data[16]<<16)+((int)packet->data[13]<<8)+(int)packet->data[14])))/112644.0; + break; + case 0x0405: this->left_torque=((float)((short int)(((int)packet->data[9]<<8)+(int)packet->data[10])))/1094.0; + this->right_torque=((float)((short int)(((int)packet->data[11]<<8)+(int)packet->data[12])))/1094.0; + break; + case 0x0406: this->mode=(op_mode)(packet->data[9]*256+packet->data[10]); + this->gain_schedule=(gain)(((int)packet->data[11]<<8)+(int)packet->data[12]); + this->ui_battery=1.4+(float)(((int)packet->data[13]<<8)+(int)packet->data[14])*0.0125; + this->powerbase_battery=(float)(((int)packet->data[15]<<8)+(int)packet->data[16])/4.0; + if(!this->event_server->event_is_set(this->new_status_event)) + this->event_server->set_event(this->new_status_event); + break; + case 0x0407: break; + case 0x0680: this->hardware_mode=(op_mode)(packet->data[10]&0x03); + if(!this->event_server->event_is_set(this->heartbeat_event)) + this->event_server->set_event(this->heartbeat_event); + break; + case 0x0688: break; + default: /* handle exceptions */ + break; + } + this->access_status.exit(); + } +} + +void *CSegwayRMP200::start_read_thread(void *param) +{ + CSegwayRMP200 *segway = (CSegwayRMP200 *) param; + + segway->read_thread(); +} + +void CSegwayRMP200::read_thread(void) +{ + std::list<std::string> event_list; + int packet_len=0,event_id; + segway_packet packet; + bool end=false; + + event_list.push_back(this->comm_rx_event); + event_list.push_back(this->read_finish_event); + while(!end) + { + event_id=this->event_server->wait_first(event_list); + if(event_id==0) + { + try{ + if(this->read_packet(&packet,&packet_len)) + this->parse_packet(&packet); + }catch(CException &e){ + std::cout << e.what() << std::endl; + throw; + } + } + else + { + end=true; + } + } + + pthread_exit(NULL); +} + +void *CSegwayRMP200::start_command_thread(void *param) +{ + CSegwayRMP200 *segway = (CSegwayRMP200 *) param; + + segway->command_thread(); +} + +void CSegwayRMP200::command_thread(void) +{ + segway_packet packet={0xF0,0x55,0x00,0x00,0x00,0x00,0x04,0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; + std::vector<unsigned char> command; + int exception_count=0; + bool end=false; + short int vT,vR; + + while(!end) + { + usleep(100000); + this->access_command.enter(); + vT=this->vT; + vR=this->vR; + this->access_command.exit(); + packet.data[9]=((unsigned char *)&vT)[1]; + packet.data[10]=((unsigned char *)&vT)[0]; + packet.data[11]=((unsigned char *)&vR)[1]; + packet.data[12]=((unsigned char *)&vR)[0]; + this->access_command.enter(); + if(this->command_queue.size()>0) + { + command=this->command_queue.front(); + this->command_queue.pop(); + packet.data[13]=command[0]; + packet.data[14]=command[1]; + packet.data[15]=command[2]; + packet.data[16]=command[3]; + } + this->access_command.exit(); + packet.data[17]=this->compute_checksum(&packet); + try{ + this->comm_dev->write(packet.data,18); + if(this->event_server->event_is_set(this->cable_disconnected_event)) + this->event_server->reset_event(this->cable_disconnected_event); + if(this->event_server->event_is_set(this->power_off_event)) + this->event_server->reset_event(this->power_off_event); + }catch(CFTDIException &e){// cable disconnected + exception_count=0; + if(!this->event_server->event_is_set(this->cable_disconnected_event)) + this->event_server->set_event(this->cable_disconnected_event); + }catch(CCommException &e){// power off and also cable disconnected + exception_count++; + if(exception_count==2) + { + exception_count=0; + if(!this->event_server->event_is_set(this->power_off_event)) + this->event_server->set_event(this->power_off_event); + } + }catch(CException &e){// something else + std::cout << e.what() << std::endl; + throw; + } + if(this->event_server->event_is_set(this->command_finish_event)) + { + this->event_server->reset_event(this->command_finish_event); + end=true; + } + } + + pthread_exit(NULL); +} + +void *CSegwayRMP200::heartbeat_thread(void *param) +{ + CSegwayRMP200 *segway = (CSegwayRMP200 *) param; + std::list<std::string> events; + + events.push_back(segway->heartbeat_event); + while(1) + { + try{ + segway->event_server->wait_all(events,200); + }catch(CEventTimeoutException &e){ + if(!segway->event_server->event_is_set(segway->no_heartbeat_event)) + segway->event_server->set_event(segway->no_heartbeat_event); + } + } + + pthread_exit(NULL); +} + +// configuration functions +void CSegwayRMP200::set_velocity_scale_factor(float factor) +{ + std::vector<unsigned char> command; + short int value; + + if(factor < 0.0 || factor > 1.0) + { + /* handle exceptions */ + throw CSegwayRMP200Exception(_HERE_,"Invalid scale factor for velocity",this->id); + } + else + { + command.resize(4); + value=(short int)(factor*16); + command[0]=0; + command[1]=10; + command[2]=((unsigned char *)&value)[1]; + command[3]=((unsigned char *)&value)[0]; + this->access_command.enter(); + this->command_queue.push(command); + this->access_command.exit(); + } +} + +void CSegwayRMP200::set_acceleration_scale_factor(float factor) +{ + std::vector<unsigned char> command; + short int value; + + if(factor < 0.0 || factor > 1.0) + { + /* handle exceptions */ + throw CSegwayRMP200Exception(_HERE_,"Invalid scale factor for acceleration",this->id); + } + else + { + command.resize(4); + value=(short int)(factor*16); + command[0]=0; + command[1]=11; + command[2]=((unsigned char *)&value)[1]; + command[3]=((unsigned char *)&value)[0]; + this->access_command.enter(); + this->command_queue.push(command); + this->access_command.exit(); + } +} + +void CSegwayRMP200::set_turnrate_scale_factor(float factor) +{ + std::vector<unsigned char> command; + short int value; + + if(factor < 0.0 || factor > 1.0) + { + /* handle exceptions */ + throw CSegwayRMP200Exception(_HERE_,"Invalid scale factor for turn rate",this->id); + } + else + { + command.resize(4); + value=(short int)(factor*16); + command[0]=0; + command[1]=12; + command[2]=((unsigned char *)&value)[1]; + command[3]=((unsigned char *)&value)[0]; + this->access_command.enter(); + this->command_queue.push(command); + this->access_command.exit(); + } +} + +void CSegwayRMP200::set_gain_schedule(gain value) +{ + std::vector<unsigned char> command; + + command.resize(4); + command[0]=0; + command[1]=13; + command[2]=((unsigned char *)&value)[1]; + command[3]=((unsigned char *)&value)[0]; + this->access_command.enter(); + this->command_queue.push(command); + this->access_command.exit(); +} + +void CSegwayRMP200::set_currentlimit_scale_factor(float factor) +{ + std::vector<unsigned char> command; + short int value; + + if(factor < 0.0 || factor > 1.0) + { + /* handle exceptions */ + throw CSegwayRMP200Exception(_HERE_,"Invalid scale factor for current limit",this->id); + } + else + { + command.resize(4); + value=(short int)(factor*256); + command[0]=0; + command[1]=14; + command[2]=((unsigned char *)&value)[1]; + command[3]=((unsigned char *)&value)[0]; + this->access_command.enter(); + this->command_queue.push(command); + this->access_command.exit(); + } +} + +void CSegwayRMP200::lock_balance(void) +{ + std::vector<unsigned char> command; + + command.resize(4); + command[0]=0; + command[1]=15; + command[2]=0; + command[3]=1; + this->access_command.enter(); + this->command_queue.push(command); + this->access_command.exit(); +} + +void CSegwayRMP200::unlock_balance(void) +{ + std::vector<unsigned char> command; + + command.resize(4); + command[0]=0; + command[1]=15; + command[2]=0; + command[3]=0; + this->access_command.enter(); + this->command_queue.push(command); + this->access_command.exit(); +} + +void CSegwayRMP200::set_operation_mode(op_mode mode) +{ + std::vector<unsigned char> command; +std::cout << "set_operation_mode::hardware_mode=" << hardware_mode << " vs. mode=" << mode << std::endl; + if(this->hardware_mode==mode) + { + command.resize(4); + command[0]=0; + command[1]=16; + command[2]=((unsigned char *)&mode)[1]; + command[3]=((unsigned char *)&mode)[0]; + this->access_command.enter(); + this->command_queue.push(command); + this->access_command.exit(); + } + else + { + /* handle exceptions */ + throw CSegwayRMP200Exception(_HERE_,"The platform current operation mode does not coincide with the desiered mode",this->id); + } +} + +void CSegwayRMP200::reset_right_wheel_integrator(void) +{ + std::vector<unsigned char> command; + + command.resize(4); + command[0]=0; + command[1]=50; + command[2]=0; + command[3]=1; + this->access_command.enter(); + this->command_queue.push(command); + this->access_command.exit(); +} + +void CSegwayRMP200::reset_left_wheel_integrator(void) +{ + std::vector<unsigned char> command; + + command.resize(4); + command[0]=0; + command[1]=50; + command[2]=0; + command[3]=2; + this->access_command.enter(); + this->command_queue.push(command); + this->access_command.exit(); +} + +void CSegwayRMP200::reset_yaw_integrator(void) +{ + std::vector<unsigned char> command; + + command.resize(4); + command[0]=0; + command[1]=50; + command[2]=0; + command[3]=4; + this->access_command.enter(); + this->command_queue.push(command); + this->access_command.exit(); +} + +void CSegwayRMP200::reset_forward_integrator(void) +{ + std::vector<unsigned char> command; + + command.resize(4); + command[0]=0; + command[1]=50; + command[2]=0; + command[3]=8; + this->access_command.enter(); + this->command_queue.push(command); + this->access_command.exit(); +} + +// status functions +float CSegwayRMP200::get_pitch_angle(void) +{ + return this->pitch_angle; +} + +float CSegwayRMP200::get_pitch_rate(void) +{ + return this->pitch_rate; +} + +float CSegwayRMP200::get_roll_angle(void) +{ + return this->roll_angle; +} + +float CSegwayRMP200::get_roll_rate(void) +{ + return this->roll_rate; +} + +float CSegwayRMP200::get_left_wheel_velocity(void) +{ + return this->left_wheel_velocity; +} + +float CSegwayRMP200::get_right_wheel_velocity(void) +{ + return this->right_wheel_velocity; +} + +float CSegwayRMP200::get_yaw_rate(void) +{ + return this->yaw_rate; +} + +float CSegwayRMP200::get_servo_frames(void) +{ + return this->servo_frames; +} + +float CSegwayRMP200::get_left_wheel_displacement(void) +{ + return this->left_wheel_displ; +} + +float CSegwayRMP200::get_right_wheel_displacement(void) +{ + return this->right_wheel_displ; +} + +float CSegwayRMP200::get_forward_displacement(void) +{ + return this->forward_displ; +} + +float CSegwayRMP200::get_yaw_displacement(void) +{ + return this->yaw_displ; +} + +float CSegwayRMP200::get_left_motor_torque(void) +{ + return this->left_torque; +} + +float CSegwayRMP200::get_right_motor_torque(void) +{ + return this->right_torque; +} + +op_mode CSegwayRMP200::get_operation_mode(void) +{ + return this->mode; +} + +op_mode CSegwayRMP200::get_hardware_operation_mode(void) +{ + return this->hardware_mode; +} + +gain CSegwayRMP200::get_gain_schedule(void) +{ + return this->gain_schedule; +} + +float CSegwayRMP200::get_ui_battery_voltage(void) +{ + return this->ui_battery; +} + +float CSegwayRMP200::get_powerbase_battery_voltage(void) +{ + return this->powerbase_battery; +} + +void CSegwayRMP200::connect(const std::string& desc_serial) +{ + std::string serial_number = desc_serial; + std::list<std::string> events; + + // rescan the bus to update the local information + this->ftdi_server->scan_bus(); + + //if no serial number is provided + if(desc_serial.compare("") == 0) + { + std::vector<int> ftdi_devs; + ftdi_devs = this->ftdi_server->get_ids_by_description(CSegwayRMP200::description); + + //check how many segway devices are connected + //launch exception if there are no segways or there is more than one + if(ftdi_devs.size() != 1) + { + if(ftdi_devs.size() == 0) + throw CSegwayRMP200Exception(_HERE_, "No segways available", this->id); + else + { + throw CSegwayRMP200Exception(_HERE_, "More than one segway available", this->id); + } + } + serial_number = this->ftdi_server->get_serial_number(ftdi_devs.at(0)); + } + + TFTDIconfig ftdi_config; + + if(this->comm_dev!=NULL) + this->close(); + + this->comm_dev=this->ftdi_server->get_device(serial_number); + + ftdi_config.baud_rate = 460800; + ftdi_config.word_length = -1; + ftdi_config.stop_bits = -1; + ftdi_config.parity = -1; + ftdi_config.read_timeout = 1000; + ftdi_config.write_timeout = 1000; + ftdi_config.latency_timer = 1; + + this->comm_dev->config(&ftdi_config); + this->comm_rx_event=this->comm_dev->get_rx_event_id(); + this->thread_server->start_thread(this->read_thread_id); + this->thread_server->start_thread(this->command_thread_id); + + + // wait until the state has been updated for the first time + events.push_back(this->new_status_event); + events.push_back(this->heartbeat_event); + try + { + this->event_server->wait_all(events, 2000); + this->event_server->wait_all(events, 2000); + } + catch(CEventTimeoutException e) + { + this->close(); + throw CSegwayRMP200Exception(_HERE_,"Segway connection not ready",this->id); + } + + this->thread_server->start_thread(this->heartbeat_thread_id); +} + +void CSegwayRMP200::reset(void) +{ + segway_packet packet={0xF0,0x55,0x00,0x00,0x00,0x00,0x04,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; + + if(this->comm_dev==NULL) + { + /* handle exceptions */ + throw CSegwayRMP200Exception(_HERE_,"Communciation device not set",this->id); + } + else + { + packet.data[17]=this->compute_checksum(&packet); + this->comm_dev->write(packet.data,18); + } + +} + +void CSegwayRMP200::move(float vT,float vR) +{ +std::cout << "move::hardware_mode=" << hardware_mode << " vs. mode=" << mode << std::endl; + if(this->mode!=this->hardware_mode) + { + /* handle exceptions */ + throw CSegwayRMP200Exception(_HERE_,"The desired operation mode does not coincide with the one set in the platform.",this->id); + } + else + { + this->access_command.enter(); + this->vT = (short int)(vT*3.6*147.0/1.609344); + this->vR = (short int)(vR*1024.0); + this->access_command.exit(); + } +} + +void CSegwayRMP200::stop(void) +{ + this->access_command.enter(); + this->vT = 0; + this->vR = 0; + this->access_command.exit(); +} + +void CSegwayRMP200::close() +{ + //kill threads + if(this->comm_dev!=NULL) + { + // finish the threads + this->event_server->set_event(this->read_finish_event); + this->event_server->set_event(this->command_finish_event); + this->thread_server->end_thread(this->read_thread_id); + this->thread_server->end_thread(this->command_thread_id); + this->thread_server->kill_thread(this->heartbeat_thread_id); + /* reset the events if necessary */ + this->event_server->reset_event(this->read_finish_event); + this->event_server->reset_event(this->command_finish_event); + if(this->event_server->event_is_set(this->no_heartbeat_event)) + this->event_server->reset_event(this->no_heartbeat_event); + if(this->event_server->event_is_set(this->power_off_event)) + this->event_server->reset_event(this->power_off_event); + if(this->event_server->event_is_set(this->cable_disconnected_event)) + this->event_server->reset_event(this->cable_disconnected_event); + this->comm_dev->close(); + delete this->comm_dev; + this->comm_dev=NULL; + } +} + +CSegwayRMP200::~CSegwayRMP200() +{ + this->close(); + /* destroy the events */ + this->event_server->delete_event(this->read_finish_event); + this->read_finish_event=""; + this->event_server->delete_event(this->command_finish_event); + this->command_finish_event=""; + this->event_server->delete_event(this->cable_disconnected_event); + this->cable_disconnected_event=""; + this->event_server->delete_event(this->power_off_event); + this->power_off_event=""; + this->event_server->delete_event(this->no_heartbeat_event); + this->no_heartbeat_event=""; + this->event_server->delete_event(this->heartbeat_event); + this->heartbeat_event=""; + this->event_server->delete_event(this->new_status_event); + this->new_status_event=""; + // destroy the threads + this->thread_server->delete_thread(this->read_thread_id); + this->read_thread_id=""; + this->thread_server->delete_thread(this->command_thread_id); + this->command_thread_id=""; + this->thread_server->delete_thread(this->heartbeat_thread_id); + this->heartbeat_thread_id=""; +} + +std::ostream& operator<< (std::ostream& out, CSegwayRMP200& segway) +{ + segway.access_status.enter(); + out << "Pitch angle: " << segway.pitch_angle << " degrees" << std::endl; + out << "Pitch rate " << segway.pitch_rate << " degrees/s" << std::endl; + out << "Roll angle: " << segway.roll_angle << " degrees" << std::endl; + out << "Roll rate: " << segway.roll_rate << " degrees/s" << std::endl; + out << "Left wheel velocity: " << segway.left_wheel_velocity << " m/s" << std::endl; + out << "Right wheel velocity: " << segway.right_wheel_velocity << " m/s" << std::endl; + out << "Yaw rate: " << segway.yaw_rate << " degrees/s" << std::endl; + out << "Servo frames: " << segway.servo_frames << " frames/s" << std::endl; + out << "Left wheel displacement: " << segway.left_wheel_displ << " m" << std::endl; + out << "Right wheel displacement: " << segway.right_wheel_displ << " m" << std::endl; + out << "Forward displacement: " << segway.forward_displ << " m" << std::endl; + out << "Yaw displacement: " << segway.yaw_displ << " rev" << std::endl; + out << "Left motor torque: " << segway.left_torque << " Nm" << std::endl; + out << "Right motor torque: " << segway.right_torque << " Nm" << std::endl; + if(segway.mode==tractor) + out << "Operation mode: tractor" << std::endl; + else if(segway.mode==balance) + out << "Operation mode: balance" << std::endl; + else + out << "Operation mode: power down" << std::endl; + if(segway.hardware_mode==tractor) + out << "Hardware operation mode: tractor" << std::endl; + else if(segway.hardware_mode==balance) + out << "Hardware operation mode: balance" << std::endl; + else + out << "Hardware operation mode: power down" << std::endl; + if(segway.gain_schedule==light) + out << "Gain schedule: light" << std::endl; + else if(segway.gain_schedule==tall) + out << "Gain schedule: tall" << std::endl; + else + out << "Gain schedule: heavy" << std::endl; + out << "UI battery voltage: " << segway.ui_battery << " V" << std::endl; + out << "Powerbase battery voltage: " << segway.powerbase_battery << " V" << std::endl; + segway.access_status.exit(); + + return out; +} diff --git a/src/segway_rmp200.h b/src/segway_rmp200.h new file mode 100755 index 0000000..e83f036 --- /dev/null +++ b/src/segway_rmp200.h @@ -0,0 +1,1421 @@ +#ifndef _SEGWAYRMP200_DRIVER_H +#define _SEGWAYRMP200_DRIVER_H + +#include "ftdimodule.h" +#include "ftdiserver.h" +#include "mutex.h" +#include <string> +#include <vector> +#include <queue> + +/** + * \brief structure of a USB packet + * + * This new data type has all the information of a data packet send to or received + * from the USB communication device. This data type is only 18 unsigned char values + * arranged as a vector. + * + */ +typedef struct +{ + /** + * \brief packet data + * + * This vector has all the data of a packet that has been received or that is going + * to be sent. The format of this packet is as follows: + * + */ + unsigned char data[18]; +}segway_packet; + +/** + * \brief Valid gain schedules for the segway + * + * This new data type enumerates all the possible gain schedules of a segway platform. + * This data type is only used on the balancing mode and ignored in the tractor mode. + * The possible gain schedule values are: + * + * - light: for relativelly small weights (20 kg) placed near the platform. + * - tall: for relativelly small weights (20 kg) distributed along the vertical axis + * of the robot. + * - heavy: for heavy weights (40 kg) placed near the platform. + * + */ +typedef enum {light,tall,heavy} gain; + +/** + * \brief Valid operation modes of the segway + * + * This new data type enumerates all the possible operation modes of a segway platform. + * The possible operation modes are: + * + * - tractor: in this mode the balancing feature is disabled and the platform needs an + * additional support point (castor wheel). In this mode it is possible to + * command the robot to move forward/reverse and also turn. + * - balance: in this mode the segway balances itself, trying to keep the given position. + * In this mode it is possible to move the robot without a castor wheel. + * - power down: the platform is shut down and no power is provided to the motors. It is + * possible to enter this mode from either the tractor and balance modes. + * + */ +typedef enum {tractor=1,balance=2,power_down=3} op_mode; + +/** + * \brief Segway RMP 200 driver + * + * This class implements the basic interface to communcate with an RMP200 segway platform, + * configure it and also send motion commands. By default the communication with the + * hardware platform is achieved through USB. + * + * At construction time the object tries to connect to a platform. If only one platform is + * connected to the computer, the default constructor can be used, but if there exist + * multiple segway platforms, it is necessary to pass the serial number to the constructor + * In order to connect to the desired one and avoid errors. + * + * When the object is properly contructed, the two main threads of the class start. These + * threads are: + * + * - The command thread: which is responsible of sending the mnotion command to the platform + * at regular intervals. Currently the update rate for the motion + * command is fixed to 50 times per second. + * + * When the user gives a motion command using the move() or stop() + * functions, the new command is not immediatelly send to the robot, + * but stored into internal parameters of the class. It is this thread + * that sends the new commands to the robot at regular intervals. The + * same happens with all the configuration parameters, when the + * corresponding function is called, the command is internally stored + * and send in the next command packet to the platform. + * + * At the moment it is not possible to change the update rate of the + * motion commands. + * + * - The feedback thread: this thread is responsible of reding all the data sent by the + * robot platform and store it in the internal parameters of the + * class as fast as they are sent. + * + * When the user tries to read the value of one of the parameters + * of the platform, the returned value is the one stored inside + * the class, which are updated by this thread. + * + * At the moment only data messages from 2 to 7 are handled, as well + * as the heart beat. The other messages are received but ignored. + * + * The public interface of this class alows to completelly configure all the parameters of + * the segway platform as well as monitor each of the available feedback parameters. Also + * there exist an operator << to show all feedback information already formated. + * + * This class also has support for unexpected hardware events such as diconnection of the + * USB cable, turning the platform power off or no reception of the heartbeat message for + * a long period. Primary, this actions are reported by dedicated events that are created + * internally at construction time. These events are: + * + * - cable_disconnected_event: when activated, it notifies that the USB cable has been + * disconnected from the platform. When this happens, the normal + * operation of the class is interrupted, but it does not crash. + * After this event is received, it will be necessary to call the + * close() function and the connect() function again to restore + * normal operation. + * + * When the connection is restored, this event is automatically + * cleared. + * + * - power_off_event : when activated, it notifies that the platform is not powerd on. This + * normally happens at start up when the green button on the platform is + * not lid or when an error ocurrs. When this event is active, the normal + * operation of the class is interrupted, but it is not necessary to + * close and reconnect the object. When the problem is solved, the class + * automatically returns to the normal operation mode. + * + * When the connection is restored, this event is automatically cleared. + * + * - no_heartbeat_event : when activated, it notifies that the platform is turned on, but no + * data is received from it. The class has an internal thread that + * works as a watchdog: when a heartbeat message is received, the + * watchdog counter is reset, but if this message is not received for + * a long time, the watchdog times out and generates an event. + * + * When this event is active, the normal operation of the class is + * interrupted, but it is not necessary to close and reconnect the + * object. When the problem is solved, the class automatically returns + * to the normal operation. When the connection is restored, this event + * is automatically cleared. + * + * Finally, in addition to the previously defined events, the class also provide an event to + * notify when a new complete status data is available. This event can be used to avoid + * reading the same data several times. + */ +class CSegwayRMP200 +{ + public: + /** + * \brief segway PID + * + * This constant holds the PID number used by the segway platforms. It is defined + * as static so it can be used even if no instance of this class exists. + */ + static const short int pid; + /** + * \brief Segway platform description + * + * This constant holds the description string of the segway platforms. It is + * defined as static so it can be used even if no instance of this class + * exists. + * + * This description can be used in the FTDI server to identify the segway platforms + * from any other FTDI device connected to the computer. + */ + static const std::string description; + private: + /** + * \brief unique identifier of the segway platform + * + * This string has the unique identifier of the segway platform. This string is + * initialized at construction time and can not be modified afterwards. The + * get_segway_id() function can be used to get this string. + * + * This string is also used to create unique identifier for all the threads and + * events used inside the class. This identifier is build from the serial number + * of the segway platform to which it is connected. + * + */ + std::string id; + /** + * \brief mutex for the status data + * + * This mutex is used to control the access to the status variables (shared memory) + * of the class. These variables are periodically updated by the feedback thread + * and they can be read by the user at any time using the get functions. + * + * This mutex is used by the feedback thread and all the get status function to + * avoid data corruption while simultaneously reading and writing to the status + * variable of the segway platform. There exist a different mutex for the command + * data. + * + */ + CMutex access_status; + /** + * \brief mutex for the command data + * + * This mutex is used to control the access to the command variables (shared memory) + * of the class. These variables are changed by the user at any time using the mov() + * or stop() functions, and the new command is actually send to the segway platform + * periodically by the command thread. + * + * This mutex is used by the command thread and all the motion function to avoid data + * corruption while simultaneously reading and writing to the command variable of the + * segway platform. There exist a different mutex for the status data. + */ + CMutex access_command; + /** + * \brief a reference to the FTDI USB device + * + * This attribute points to the communication device used to send and receive data + * to and from the segway platform. The communication device is cretaed inside the + * object at initialization time using the CFTDIServer and the description or serial + * number of the desired platform via the connect() function. + * + * It is not possible to send or receive data to or from the platform until the + * driver is not connected to the hardware platform. Any attempt to do so will + * result in an exception being thrown. + * + */ + CFTDI *comm_dev; + /** + * \brief reference to the unique ftdi_server + * + * This reference to the unique ftdi server is initialized when an object of + * this class is first created. It is used to create and handle all the + * FTDI device drivers used to access the segway platform. The object pointed + * by this reference is shared by all objects in any application. + * + */ + CFTDIServer *ftdi_server; + /** + * \brief Reference to the unique event handler + * + * This reference to the unique event handler is initialized when an object of + * this class is first created. It is used to create and handle all the + * segway platform events. The object pointed by this reference is shared by all + * objects in any application. + */ + CEventServer *event_server; + /** + * \brief Reference to the unique thread handler + * + * This reference to the unique thread handler is initialized when an object of + * this class is first created. It is used to create and handle all the + * segway platform threads. The object pointed by this reference is shared by all + * objects in any application. + */ + CThreadServer *thread_server; + /** + * \brief identifier of the feedback thread + * + * This string has the identifier of the thread used to read status information from + * the segway platform. This string is initialized at contruction time by appending + * the unique identifier of the segway object and the string "_read_thread". This + * thread is only used internally to the class, so it is not possible to get its + * identifier out. + */ + std::string read_thread_id; + /** + * \brief identifer of the command thread + * + * This string has the identifier of the thread used to send motion commands to + * the segway platform. This string is initialized at contruction time by appending + * the unique identifier of the segway object and the string "_command_thread". This + * thread is only used internally to the class, so it is not possible to get its + * identifier out. + */ + std::string command_thread_id; + /** + * \brief segway heartbeat thread + * + * This string has the idetifier of the thread used to check the periodic reception + * of the heartbeat signal send by the segway platform. This string is initialized + * at contruction time by appending the unique identifier of the segway object and + * the string "_heartbeat_thread". This thread is only used internally to the class, + * so it is not possible to get its identifier out. + */ + std::string heartbeat_thread_id; + /** + * \brief identifier of the reception event of the communication device + * + * This string has the identifier of the event generated by the communcation device + * to signal de reception of new data. This event is not created by this class, but + * retrieved from the communication device when it is attached to this class. This + * event is used by the read thread to awake when new data is received. + */ + std::string comm_rx_event; + /** + * \brief identifier of the event to finish the feedback thread + * + * This string has the identifier of the event used to signal the feedback thread + * to end its execution. This string is initialized at contruction time by appending + * the unique identifier of the segway object and the string "_finish_read_thread". + * This event is only used inside the class, so it is not possible to get its + * identifier out. + */ + std::string read_finish_event; + /** + * \brief identifier of the event to finish the command thread + * + * This string has the identifier of the event used to signal the command thread + * to end its execution. This string is initialized at contruction time by appending + * the unique identifier of the segway object and the string "_finish_command_thread". + * This event is only used inside the class, so it is not possible to get its + * identifier out. + */ + std::string command_finish_event; + /** + * \brief identifier of the event to signal that the platform is powered off + * + * This string has the identifier of the event used to signal that the platform is + * powered off. This string is initialized at contruction time by appending + * the unique identifier of the segway object and the string "_power_off_event". + * Use the get_power_off_event() function to get the event identifier from + * outside the class. + */ + std::string power_off_event; + /** + * \brief identifier of the event to signal that the cable is disconnected + * + * This string has the identifier of the event used to signal that the USB + * cable is disconnected. This string is initialized at contruction time by + * appending the unique identifier of the segway object and the string + * "_cable_disconnected_event". Use the get_cable_disconnected_event() + * function to get the event identifier from outside the class. + */ + std::string cable_disconnected_event; + /** + * \brief identifier of the event to signal the availability of new status data + * + * This string has the identifier of the event used to signal the availability + * of new status data. This string is initialized at contruction time by + * appending the unique identifier of the segway object and the string + * "_new_status_event". Use the get_new_status_event() function to + * get the event identifier from outside the class. + */ + std::string new_status_event; + /** + * \brief identifeir of the event to signal the absence of the heartbeat signal + * + * This string has the identifier of the event used to signal that no heartbeat + * has been received for a while. This string is initialized at contruction time + * by appending the unique identifier of the segway object and the string + * "_no_heartbeat_event". Use the get_no_heartbeat_event() function to + * get the event identifier from outside the class. + */ + std::string no_heartbeat_event; + /** + * \brief identifeir of the internal heartbeat event + * + * This string has the identifier of the heartbeat event .This string is + * initialized at contruction time by appending the unique identifier of + * the segway object and the string "_heartbeat_event". This event is only + * used inside the class, so it is not possible to get its identifier out. + */ + std::string heartbeat_event; + /** + * \brief class attributes initialization + * + * This method initalizes all the internal class variables at construction time. + */ + void init_attributes(void); + /** + * \brief ftdi server initialization + * + * This method initializes the ftdi_server to handle all the FTDI devices + * and also adds the specific PID of the segway platforms in order to be able + * to detect and list them. + */ + void init_ftdi(void); + /** + * \brief function to initialize the class threads + * + * This method initializes all the internal threads of the class. This includes + * the read and command threads and also the heartbeat thread. + * + * All the threads are created and assigned their corresponding execution function + * but they are not started until the connection to the platform is done, either + * at construction time or when the connect function is called. + */ + void init_threads(void); + /** + * \brief function to initialize the class events + * + * This function initializes all the internal and external events of the class. + * + */ + void init_events(void); + protected: + // status variables + /** + * \brief left wheel velocity + * + * This value has the velocity of the left wheel in meters per second. This value is + * periodically updated by the read thread and it is not possible to modify it + * otherwise. To get its value use the get_left_wheel_velocity() function or the + * overloaded operator <<. + */ + float left_wheel_velocity; + /** + * \brief right wheel velovity + * + * This value has the velocity of the right wheel in meters per second. This value is + * periodically updated by the read thread and it is not possible to modify it + * otherwise. To get its value use the get_right_wheel_velocity() function or the + * overloaded operator <<. + */ + float right_wheel_velocity; + /** + * \brief pitch angle + * + * This value has the pitch angle of the platform in degrees. This value is + * periodically updated by the read thread and it is not possible to modify it + * otherwise. To get its value use the get_pitch_angle() function or the + * overloaded operator <<. + */ + float pitch_angle; + /** + * \brief pitch rate + * + * This value has the pitch rate of the platform in degrees per second. This value is + * periodically updated by the read thread and it is not possible to modify it + * otherwise. To get its value use the get_pitch_rate() function or the + * overloaded operator <<. + */ + float pitch_rate; + /** + * \brief roll angle + * + * This value has the roll angle of the platform in degrees. This value is + * periodically updated by the read thread and it is not possible to modify it + * otherwise. To get its value use the get_roll_angle() function or the + * overloaded operator <<. + */ + float roll_angle; + /** + * \brief roll rate + * + * This value has the roll rate of the platform in degrees per second. This value is + * periodically updated by the read thread and it is not possible to modify it + * otherwise. To get its value use the get_roll_rate() function or the + * overloaded operator <<. + */ + float roll_rate; + /** + * \brief yaw rate + * + * This value has the yaw rate of the platform in degrees per second. This value is + * periodically updated by the read thread and it is not possible to modify it + * otherwise. To get its value use the get_yaw_rate() function or the + * overloaded operator <<. + */ + float yaw_rate; + /** + * \brief number of frames per second + * + * This value has the number of servo frames in fames per second. This value is + * periodically updated by the read thread and it is not possible to modify it + * otherwise. To get its value use the get_servo_frames() function or the + * overloaded operator <<. + */ + float servo_frames; + /** + * \brief left wheel displacement + * + * This value has the displacement of the left wheel in meters. This value is + * periodically updated by the read thread and it is not possible to modify it + * otherwise. To get its value use the get_left_wheel_displacement() function + * or the overloaded operator <<. + */ + float left_wheel_displ; + /** + * \brief right wheel displacement + * + * This value has the displacement of the right wheel in meters. This value is + * periodically updated by the read thread and it is not possible to modify it + * otherwise. To get its value use the get_right_wheel_displacement() function + * or the overloaded operator <<. + */ + float right_wheel_displ; + /** + * \brief forward displacement + * + * This value has the displacement of the whole platform in meters. This value is + * periodically updated by the read thread and it is not possible to modify it + * otherwise. To get its value use the get_forward_displacement() function + * or the overloaded operator <<. + */ + float forward_displ; + /** + * \brief yaw displacement + * + * This value has the rotation of the whole platform in revolutions. This value is + * periodically updated by the read thread and it is not possible to modify it + * otherwise. To get its value use the get_yaw_displacement() function + * or the overloaded operator <<. + */ + float yaw_displ; + /** + * \brief left motor torque + * + * This value has the torque of the left motor in Newtorn per meter. This value is + * periodically updated by the read thread and it is not possible to modify it + * otherwise. To get its value use the get_left_motor_torque() function + * or the overloaded operator <<. + */ + float left_torque; + /** + * \brief right motor torque + * + * This value has the torque of the right motor in Newtorn per meter. This value is + * periodically updated by the read thread and it is not possible to modify it + * otherwise. To get its value use the get_right_motor_torque() function + * or the overloaded operator <<. + */ + float right_torque; + /** + * \brief operation mode + * + * This value has the current operation mode of the platform. This value is + * periodically updated by the read thread and it is not possible to modify it + * otherwise. To get its value use the get_operation_mode() function + * or the overloaded operator <<. The possible operation modes are: + * + * - tractor + * - balance + * - power down + * + * See the documentation of the op_mode data type for more information on the + * possible operation modes. + */ + op_mode mode; + /** + * \brief hardware operation mode + * + * This value has the current hardware operation mode of the platform. This + * value is periodically updated by the read thread and it is not possible to + * modify it otherwise. To get its value use the get_hardware_operation_mode() + * function or the overloaded operator <<. The possible operation modes are: + * + * - tractor + * - balance + * - power down + * + * See the documentation of the op_mode data type for more information on the + * possible operation modes. + * + * This operation mode coincides with the platfrom settings (which of the two + * blue buttons are on). This operation mode must coincide with the operation + * mode set by the user. + */ + op_mode hardware_mode; + /** + * \brief gain schedule + * + * This value has the current gain schedule of the platform. This value is + * periodically updated by the read thread and it is not possible to modify it + * otherwise. To get its value use the get_gain_schedule() function + * or the overloaded operator <<. The possible gain schedules are: + * + * - light + * - tall + * - heavy. + * + * See the documentation of the gain data type for more information on the + * possible gain schedule. + */ + gain gain_schedule; + /** + * \brief user battery + * + * This value has the voltage of the UI battery in Volts. This value is + * periodically updated by the read thread and it is not possible to modify it + * otherwise. To get its value use the get_ui_battery_voltage() function + * or the overloaded operator <<. + */ + float ui_battery; + /** + * \brief power base battery + * + * This value has the voltage of the power base battery in Volts. This value is + * periodically updated by the read thread and it is not possible to modify it + * otherwise. To get its value use the get_powerbase_battery_voltage() function + * or the overloaded operator <<. + */ + float powerbase_battery; + // command variables + /** + * \brief translation velocity + * + * This value has the desired translational velocity in meters per second. This + * values is updated each time the move() or stop() functions are called. Then + * this value is sent periodically to the segway platform by the command thread. + */ + short int vT; + /** + * \brief rotation velocity + * + * This value has the desired rotational velocity in revolutions per second. This + * values is updated each time the move() or stop() functions are called. Then + * this value is sent periodically to the segway platform by the command thread. + */ + short int vR; + /** + * \brief internal command queus + * + * This queue is used to store configuration commands to be send to the platform. + * Initially, this queue is empty, and its length increases each time a set() or + * reset() function is called. The command thread checks this queue every time it + * is about to send a new command to include any configuration data if needed. + */ + std::queue< std::vector<unsigned char> > command_queue; + // methods + /** + * \brief function to compute checksum of USB packets + * + * This function computes the checksum of a given USB packet either received from + * the platform or to be send to it. When a new packet is received this function + * is used to check that the packet has no errors. Since the packet is sent with + * a checksum, the return value of this function should be 0. + * + * When a packet is about to be sent, this function is used to compute the + * checksum value for the packet. The returned value then is used to complete + * the data packet (18th bytes) before it is sent to the segway platform. + * + * This function is only used internally by the feedback and command threads, + * but it can not be used elsewhere. + * + * \param packet a reference to the packet on which to compute the chcksum. If + * the packet has been received it should already has a checksum + * value at the 18th position, and otherwise this position should + * be set to 0 to correctly compute the checksum. + * + * \return the value of the checksum. If the packet has been received, this value + * should be 0 for a valid packet and any other value otherwise. If the + * packet is to be sent, this value is the checksum to be used to complete + * the packet. + */ + unsigned char compute_checksum(segway_packet *packet); + /** + * \brief function to read a whole packet from the segway platform + * + * This functions is used to read full packets from the segway platform. It first + * syncronizes the incomming data to detect the packet header, and then stores all + * the data of the packet in the given packet strcuture. + * + * This function reads all available data and returns immediatelly even if the + * whole packet has not been received. If several packets have been received, this + * function returns after reading the first one, and the function has to be recalled + * until no more data is available. This function is only used internally by the + * feedback thread. + * + * \param packet a reference to a packet structure in which to store the received + * packet. The necessary memory for this structure has to be allocated + * before calling this function. This contents of this structure are + * only valid when the return value of this function is true, otherwise + * its contents should be ignored, but not modified since it has + * partial packet information. + * \param packet_len an integer with the size of the read packet. If the packet is + * completely received in a single call, this value is always 18 + * (the dafault length). In case the packet is not completelly + * received in a single call, this parameter is used to hold the + * actual number of bytes read, and the same variable must be used + * in the next call to this function to guarantee a correct reception + * of all data packets. + * + * \return a flag that indicated if a whole packet has been read (true) or not (false). + * only when the return value is true, the contents of the packet parameter + * can be used. + */ + bool read_packet(segway_packet *packet,int *packet_len); + /** + * \brief function to parse whole packets read from the segway platform + * + * This function is used to extract the data contained into the data packets received. + * The checksum is first checked and if there is any error, an exception is thrown. + * Otherwise, the data from the packet is stored into the corresponding internal + * attributes of the class. + * + * This function blocks the status mutex to avoid errors while updating the internal + * attributes. This way all functions to get the current status will get blocked until + * the update is complete. + * + * \param packet a reference to a packet structure which stores the data of a new + * received packet. The packet passed to this function should be the + * one returned by the read_packet() function. + * + */ + void parse_packet(segway_packet *packet); + /** + * \brief Thread function that reads data from segway + * + * This functions waits for any data to be received from the segway platform. When a whole + * packet is read from the robot, it is parsed and then the internal information of the class + * updated. + * + * This thread is created at construction time but it is not started until the communication + * device is attached to avoid errors. This thread is always active until the finish event is + * activated, which happens when the close() function is called. + * + * \return in this case, the function always return NULL, so no data is returned to the + * main thread. + */ + void read_thread(void); + /** + * \brief start read thread + * + * This function starts the read thread. + * + * \param param a pointer to the object itself. since this function is statis, there exist no + * this pointer, so this parameter is used to access the internal attributes of + * the class. + */ + static void *start_read_thread(void *param); + /** + * \brief Thread function that sends commands to the segway + * + * This function is used to send motion commands to the segway platform periodically. This + * functions gets the internal motion commands (translational and rotational velocities) from + * the class and sends it to the robot every 20ms. At this moment it is not possible to + * change the update drate of the motion commandsi. + * + * This thread also checks the internal command queue to check if there is any configuration + * data avaialble. If so, it reads the contents of the first commans and includes it into the + * packet data to be send. If no new configuration data is available, this thread only sends + * motion commands. + * + * This thread is created at construction time but it is not started until the communication + * device is attached to avoid errors. This thread is always active until the finish event is + * activated, which happens when the close() function is called. If this thread ends unexpectly + * the robot will stop after a few moments, since it requires constant commands from the host + * computer to continued operation. + * + * To change the current motion command, use the move() function. The stop() function should + * be used to immediatelly stop the motors. These functions will modify the internal attributes + * of the class, and this thread will be the one responsible of sending the new commands to + * the robot. + * + * \return in this case, the function always return NULL, so no data is returned to the + * main thread. + * + */ + void command_thread(void); + /** + * \brief start command thread + * + * This function starts the command thread. + * + * \param param a pointer to the object itself. since this function is statis, there exist no + * this pointer, so this parameter is used to access the internal attributes of + * the class. + */ + static void *start_command_thread(void *param); + /** + * \brief heartbeat thread function + * + * This threads waits for the heartbeat event generated by the reception of a specific + * data packet from the segway platform for a given ammount of time. + * + * While this data packet is received the thread does nothing. When the communications + * are interrupted or the power is turned off, the allowed ammount of time elapses + * and the external no_heartbeat_event is set to notify the error to the user. The + * operation of this thread is equivalent to a watchdog. + * + * If the problem is solved, the event is reset and the normal operation of the + * driver continues. + */ + static void *heartbeat_thread(void *param); + public: + /** + * \brief constructor + * + * This constructor creates and initializes all the threads and events nedded by the class. + * However, the threads are not started until the connect() function is called. This + * constructor accepts a string with the serial number of the segway platform, which is used to + * create the unique identifiers of both events and threads. + * + * If no serial number is provided, the class tries to automatically connect to the + * platfrom. In this case is more or less than one platforms are connected to the + * computer, the constructor throws an exception. + * + * \param desc_serial a null terminated string with the description or the serial + * number of the segway platform to associate to the driver. + * This string can be obtanied through the CFTDIServer or else + * hardcoded if known. + */ + CSegwayRMP200(const std::string& desc_serial=""); + /** + * \brief function to get the identifeir of the segway + * + * This function is used to get the unique identifier of the segway platform associated + * to the driver. + * + * \return a null terminated string with the identifier of the segway. + */ + std::string get_id(void); + /** + * \brief function to get the identifier of the cable disconnected event + * + * This function returns the identifier of the cable disconnected event. This + * event can be used by an external application to monitor the state of the + * segway platform. + */ + std::string get_cable_disconnected_event(void); + /** + * \brief function to get the identifier of the power off event + * + * This function returns the identifier of the power off event. This + * event can be used by an external application to monitor the state of the + * segway platform. + */ + std::string get_power_off_event(void); + /** + * \brief function to get the no heartbeat event + * + * This function returns the identifier of the cable no heartbeat event. This + * event can be used by an external applciation to monitor the state of the + * segway platform. + */ + std::string get_no_heartbeat_event(void); + /** + * \brief function to get the new status data available event + * + * This function returns the identifier of the new status data available event. + * This event can be used by an external application to know when there exist + * new data, and avoid polling the driver too fast or too slowly. + */ + std::string get_new_status_event(void); + // configuration functions + /** + * \brief function to set the velocity scale factor + * + * This function is used to set the desired scale factor for the velocity. This scale factor + * is used to change the maximum velocity allowed. The given motion commands are multiplied + * by this scale factor, thus limiting the maximum possible speed. + * + * This configuration information is processed but it is not immediatelly send to the platform. + * Instead, it is stored internally and send by the command thread the next time a new motion + * command has to be send. Therefore, there may exist a small delay between this call and the + * actual change in the configuration. + * + * This function can be called at any time, but it is recomended to use it only once at the + * configuration stage of the robot, before sending motion commands to it. + * + * \param factor the desired scale factor for the velocity. The possible values for this + * parameter must be limited between 0.0 and 1.0. Any other value is not + * allowed and will throw an exception. + */ + void set_velocity_scale_factor(float factor); + /** + * \brief function to set the acceleration scale factor + * + * This function is used to set the desired scale factor for the acceleration. This scale factor + * is used to change the maximum acceleration allowed. The given motion commands are multiplied + * by this scale factor, thus limiting the maximum possible acceleration. + * + * This configuration information is processed but it is not immediatelly send to the platform. + * Instead, it is stored internally and send by the command thread the next time a new motion + * command has to be send. Therefore, there may exist a small delay between this call and the + * actual change in the configuration. + * + * This function can be called at any time, but it is recomended to use it only once at the + * configuration stage of the robot, before sending motion commands to it. + * + * \param factor the desired scale factor for the acceleration. The possible values for this + * parameter must be limited between 0.0 and 1.0. Any other value is not + * allowed and will throw an exception. + */ + void set_acceleration_scale_factor(float factor); + /** + * \brief function to set the turnrate scale factor + * + * This function is used to set the desired scale factor for the turn rate. This scale factor + * is used to change the maximum turn rate allowed. The given motion commands are multiplied + * by this scale factor, thus limiting the maximum possible turn speed. + * + * This configuration information is processed but it is not immediatelly send to the platform. + * Instead, it is stored internally and send by the command thread the next time a new motion + * command has to be send. Therefore, there may exist a small delay between this call and the + * actual change in the configuration. + * + * This function can be called at any time, but it is recomended to use it only once at the + * configuration stage of the robot, before sending motion commands to it. + * + * \param factor the desired scale factor for the turn rate. The possible values for this + * parameter must be limited between 0.0 and 1.0. Any other value is not + * allowed and will throw an exception + */ + void set_turnrate_scale_factor(float factor); + /** + * \brief function to set the gain schedule + * + * This function is used to change the current gain schedule of the segway platform. The gain + * schedule is used to improve the balance capabilities of the platform. Depending on the + * weight of the payload and on its distribution, this parameter must be changed. + * + * This configuration information is processed but it is not immediatelly send to the platform. + * Instead, it is stored internally and send by the command thread the next time a new motion + * command has to be send. Therefore, there may exist a small delay between this call and the + * actual change in the configuration. + * + * This function can be called at any time, but it is recomended to use it only once at the + * configuration stage of the robot, before sending motion commands to it. + * + * \param value the desired value for the gain schedule. This parameter should be one of the + * following values: + * + * - light + * - tall + * - heavy + * + * See the documentation on the gain data type for more information on the + * different meaning of the gain schedules. + */ + void set_gain_schedule(gain value); + /** + * \brief function to set the current limit scale factor + * + * This function is used to set the desired scale factor for the current limit. This scale + * factor is used to change the maximum motor current allowed. + * + * This configuration information is processed but it is not immediatelly send to the platform. + * Instead, it is stored internally and send by the command thread the next time a new motion + * command has to be send. Therefore, there may exist a small delay between this call and the + * actual change in the configuration. + * + * This function can be called at any time, but it is recomended to use it only once at the + * configuration stage of the robot, before sending motion commands to it. + * + * \param factor the desired scale factor for the current limit. The possible values for this + * parameter must be limited between 0.0 and 1.0. Any other value is not + * allowed and will throw an exception + */ + void set_currentlimit_scale_factor(float factor); + /** + * \brief function to lock the balance function + * + * This function is used to block the balance mode. + * + * This configuration information is processed but it is not immediatelly send to the platform. + * Instead, it is stored internally and send by the command thread the next time a new motion + * command has to be send. Therefore, there may exist a small delay between this call and the + * actual change in the configuration. + */ + void lock_balance(void); + /** + * \brief function to unlock the balance function + * + * This function is used to unblock the balance mode. + * + * This configuration information is processed but it is not immediatelly send to the platform. + * Instead, it is stored internally and send by the command thread the next time a new motion + * command has to be send. Therefore, there may exist a small delay between this call and the + * actual change in the configuration. + */ + void unlock_balance(void); + /** + * \brief function to set the operation mode + * + * This function is used to change the current operation mode of the segway platform. The + * operation mode is used to change the working mode of the segway platform. + * + * This configuration information is processed but it is not immediatelly send to the platform. + * Instead, it is stored internally and send by the command thread the next time a new motion + * command has to be send. Therefore, there may exist a small delay between this call and the + * actual change in the configuration. + * + * This function can be called at any time, but it is recomended to use it only once at the + * configuration stage of the robot, before sending motion commands to it. + * + * \param mode the desired value for the operation mode. This parameter should be one of the + * following values: + * + * - tractor + * - balance + * - power down + * + * See the documentation on the op_mode data type for more information on the + * different meaning of the operation modes. + */ + void set_operation_mode(op_mode mode); + /** + * \brief function to reset the right wheel integrator + * + * This function is used to reeet the right wheel integrator of the segway platform. This + * integrator holds the total distance traveled by the right wheel. + * + * This configuration information is processed but it is not immediatelly send to the platform. + * Instead, it is stored internally and send by the command thread the next time a new motion + * command has to be send. Therefore, there may exist a small delay between this call and the + * actual change in the configuration. + * + * This function can be called at any time, but it is recomended to use it only once at the + * configuration stage of the robot, before sending motion commands to it. + * + */ + void reset_right_wheel_integrator(void); + /** + * \brief function to reset the left wheel integrator + * + * This function is used to reset the left wheel integrator of the segway platform. This + * integrator holds the total distance traveled by the left wheel. + * + * This configuration information is processed but it is not immediatelly send to the platform. + * Instead, it is stored internally and send by the command thread the next time a new motion + * command has to be send. Therefore, there may exist a small delay between this call and the + * actual change in the configuration. + * + * This function can be called at any time, but it is recomended to use it only once at the + * configuration stage of the robot, before sending motion commands to it. + */ + void reset_left_wheel_integrator(void); + /** + * \brief function to reset the yaw integrator + * + * This function is used to reset the yaw integrator of the segway platform. This + * integrator holds the total rotation performed by the robot. + * + * This configuration information is processed but it is not immediatelly send to the platform. + * Instead, it is stored internally and send by the command thread the next time a new motion + * command has to be send. Therefore, there may exist a small delay between this call and the + * actual change in the configuration. + * + * This function can be called at any time, but it is recomended to use it only once at the + * configuration stage of the robot, before sending motion commands to it. + */ + void reset_yaw_integrator(void); + /** + * \brief function to reset the forward integrator + * + * This function is used to reset the forward integrator of the segway platform. This + * integrator holds the total forward displacement of the robot. + * + * This configuration information is processed but it is not immediatelly send to the platform. + * Instead, it is stored internally and send by the command thread the next time a new motion + * command has to be send. Therefore, there may exist a small delay between this call and the + * actual change in the configuration. + * + * This function can be called at any time, but it is recomended to use it only once at the + * configuration stage of the robot, before sending motion commands to it. + * + */ + void reset_forward_integrator(void); + /** + * \brief function to connect to the hardware platform + * + * This function is used to connect the driver with the hardware platform. The + * communication device is only created and initialized when this function is + * called, so it is not possible to send or receive data to or from the platform + * until then. When this function is called, both the command and feedback threads + * are started. Otherwise, the communication is not possible. + * + * At contruction time this function is automatically called so the segway is + * ready right after it is created. Howerver, it is possible to call this function + * again in case the object msu be closed due to an error or because the target + * platform changed. + * + * If a serial number is provided to this function, it tries to connect to the + * platform which has the same serial number. If no serial number is provided, it + * tries to automatically connect to any platform it may find. If more or less than + * one segway platforms are connected to the computer, this function will throw + * an exception. + * + * If the cable is disconnected, it throws a CSegwayCableDisconnectedException class and + * also activates the cable_diconnected_event event. If the power is turner off, it + * throws a CSegwayPowerOffException class and also activates the power_off_event event. + * Any other exception id rethrown without being processed. + * This function throws a CSegwayRMP200Exception exception to report any error. + * + * \param desc_serial a null terminated string with the description or the serial + * number of the segway platform to associate to the driver. + * This string can be obtanied through the CFTDIServer or else + * hardcoded if known. + * + */ + void connect(const std::string& desc_serial=""); + // status functions + /** + * \brief function to return the pitch angle + * + * This function returns the current pitch angle in degrees. This function + * only returns the value of the internal attribute, but it does not access + * the hardware platform. This value is periodically updated by the feedback + * thread. + * + * \return the current pitch angle in degrees. + */ + float get_pitch_angle(void); + /** + * \brief function to return the pitch rate + * + * This function returns the current pitch rate in degrees per second. This + * function only returns the value of the internal attribute, but it does not + * access the hardware platform. This value is periodically updated by the + * feedback thread. + * + * \return the current pitch rate in degrees per second. + */ + float get_pitch_rate(void); + /** + * \brief function to return the roll angle + * + * This function returns the current roll angle in degrees. This function + * only returns the value of the internal attribute, but it does not access + * the hardware platform. This value is periodically updated by the feedback + * thread. + * + * \return the current roll angle in degrees. + */ + float get_roll_angle(void); + /** + * \brief function to return the roll rate + * + * This function returns the current roll rate in degrees per second. This + * function only returns the value of the internal attribute, but it does not + * access the hardware platform. This value is periodically updated by the + * feedback thread. + * + * \return the current roll rate in degrees per second. + */ + float get_roll_rate(void); + /** + * \brief function to return the left wheel velocity + * + * This function returns the current left wheel velocity in meters per second. + * This function only returns the value of the internal attribute, but it + * does not access the hardware platform. This value is periodically updated + * by the feedback thread. + * + * \return the current left wheel in meters per second. + */ + float get_left_wheel_velocity(void); + /** + * \brief function to return the right wheel velocity + * + * This function returns the current right wheel velocity in meters per second. + * This function only returns the value of the internal attribute, but it + * does not access the hardware platform. This value is periodically updated + * by the feedback thread. + * + * \return the current right wheel in meters per second. + */ + float get_right_wheel_velocity(void); + /** + * \brief function to return the yaw rate + * + * This function returns the current yaw rate in degrees per second. + * This function only returns the value of the internal attribute, but it + * does not access the hardware platform. This value is periodically updated + * by the feedback thread. + * + * \return the current yaw rate in revolutions per second. + * + */ + float get_yaw_rate(void); + /** + * \brief function to return the number of servo frames per second + * + * This function returns the current number of servo frames per second. This + * function only returns the value of the internal attribute, but it does + * not access the hardware platform. This value is periodically updated by + * the feedback thread. + * + * \return the current number of servo frames per second. + */ + float get_servo_frames(void); + /** + * \brief function to return the left wheel displacement + * + * This function returns the current left wheel displacement in meters. This + * function only returns the value of the internal attribute, but it does + * not access the hardware platform. This value is periodically updated by + * the feedback thread. + * + * \return the current left wheel displacement in meters. + */ + float get_left_wheel_displacement(void); + /** + * \brief function to return the right wheel displacement + * + * This function returns the current right wheel displacement in meters. This + * function only returns the value of the internal attribute, but it does + * not access the hardware platform. This value is periodically updated by + * the feedback thread. + * + * \return the current right wheel displacement in meters. + */ + float get_right_wheel_displacement(void); + /** + * \brief function to return the total forward displacement + * + * This function returns the current forward displacement in meters. This + * function only returns the value of the internal attribute, but it does + * not access the hardware platform. This value is periodically updated by + * the feedback thread. + * + * \return the current forward displacement in meters. + * + */ + float get_forward_displacement(void); + /** + * \brief function to return the total yaw displacement + * + * This function returns the current yaw displacement in revolutions. This + * function only returns the value of the internal attribute, but it does + * not access the hardware platform. This value is periodically updated by + * the feedback thread. + * + * \return the current yaw displacement in revolutions per second. + * + */ + float get_yaw_displacement(void); + /** + * \brief function to return the current left motot torque + * + * This function returns the current left motor torque in Nm. This + * function only returns the value of the internal attribute, but it does not + * access the hardware platform. This value is periodically updated by the + * feedback thread. + * + * \return the current left motor torque in Nm. + */ + float get_left_motor_torque(void); + /** + * \brief function to return the current right motor torque + * + * This function returns the current right motor torque in Nm. This + * function only returns the value of the internal attribute, but it does not + * access the hardware platform. This value is periodically updated by the + * feedback thread. + * + * \return the current right motor torque in Nm. + * + */ + float get_right_motor_torque(void); + /** + * \brief function to return the current operation mode + * + * This function returns the current operation mode of the segway platform. This + * function only returns the value of the internal attribute, but it does not + * access the hardware platform. This value is periodically updated by the + * feedback thread. + * + * \return the current operation mode being used. The possible values are: + * + * - tractor + * - balance + * - power down + * + */ + op_mode get_operation_mode(void); + /** + * \brief function to return the current hardware operation mode + * + * This function returns the current hardware operation mode of the segway + * platform. This function only returns the value of the internal attribute, + * but it does not access the hardware platform. This value is periodically + * updated by the feedback thread. + * + * The value of this attribute is fixed by the state of the two blue buttons + * on the platform. + * + * \return the current operation mode being used. The possible values are: + * + * - tractor + * - balance + * - power down + * + */ + op_mode get_hardware_operation_mode(void); + /** + * \brief function to get the current gain schedule + * + * This function returns the current gain schedule of the segway platform. This + * function only returns the value of the internal attribute, but it does not + * access the hardware platform. This value is periodically updated by the + * feedback thread. + * + * \return the current gain schedule being used. The possible values are: + * + * - light + * - tall + * - heavy + * + */ + gain get_gain_schedule(void); + /** + * \brief function to return the value of the user battery voltage + * + * This function returns the current voltage of the user battery. This + * function only returns the value of the internal attribute, but it does not + * access the hardware platform. This value is periodically updated by the + * feedback thread. + * + * \return the value in volts of the user battery. + */ + float get_ui_battery_voltage(void); + /** + * \brief function to get the current value of the powerbase battery voltage + * + * This function returns the current voltage of the powerbase battery. This + * function only returns the value of the internal attribute, but it does not + * access the hardware platform. This value is periodically updated by the + * feedback thread. + * + * \return the value in volts of the powerbase battery. + * + */ + float get_powerbase_battery_voltage(void); + /** + * \brief function to reset the segway platform + * + * This function is used to reset the segway platform to its default state. When + * this function is called al configuration paramerets previoulsy set return to + * its default value. Contrary to what happens with the motion commands, this + * function immediatelly sends a data packet to the segway platform. + * + * This function throws a CSegwayRMP200Exception exception to report any error. + * + */ + void reset(void); + /** + * \brief function to set new translational and rotational velocities + * + * This function is used to set a new motion command on the segway. This function + * sets the internal translational and rotational velocities to the desired values, + * and it is the command thread which actually sends the new comamnd to the robot. + * + * This function can be called at any time to set up a new motion command to the + * robot. The command thread sends the current motion command to the robot every + * 20ms, so if this function is called more often, some of the commands will not + * be executed. This function throws a CSegwayRMP200Exception to report errors. + * + * If the desired operation mode set by the user with the set_operation_mode() + * function does not coincide with the hardware operation mode defined by the + * state of the two blue buttons on the platform, this function throws an exception. + * + * \param vT desired translational velocity in meters per second. This parameter + * is limited to 12 kilometers per hour in both directions (both signs). + * However, the given value is affected by the velocity scale factor set + * by the set_velocity_scale_factor() function, so the actual maximum + * speed can be lower. + * + * \param vR desired rotational velocity in revolutions per second. This parameter + * is limited to 0.6 revolutions per second in both directions (both + * signs). However, the given value is affectd by the turnrate scale + * factor set by the set_turnrate_scale_factor() function, so the actual + * maximum turnrate can be lower. + */ + void move(float vT,float vR); + /** + * \brief function to stop all motion + * + * This function is used to stop all motion on the segway. This function sets the + * internal translational and rotational velocities to 0.0, and it is the command + * thread which actually sends the new comamnd to the robot. + * + * This function can be called at any time to stop the current motion of the robot. + * This function throws a CSegwayRMP200Exception to report errors. + * + */ + void stop(void); + /** + * \brief function to close the segway driver + * + * This function stops all internal threads by activating the the associated finish + * events, but it does not destroy them, since it is possible to reconnect the object + * to a new platform, in which case the thread will be restarted. + * + * This function also closes the communication device and frees all the associated + * resources. + * + */ + void close(void); + // operators + /** + * \brief display operator overloading + * + * This operator is used to show the current state of an object of this class + * onto the standard ouput, file or any output stream. The information shown + * is already formated as shown below: + * + * \verbatim + * Pitch angle: <pitch_angle> degrees + * Pitch rate: <pitch_rate> degrees/s + * Roll angle: <roll_angle> degrees + * Roll rate: <roll_rate> degrees/s + * Left wheel velocity: <left_wheel_velocity> m/s + * Right wheel velocity: <right_wheel_velocity> m/s + * Yaw rate: <yaw_rate> degrees/s + * Servo frames: <servo_frames> frames/s + * Left wheel displacement: <left_wheel_displ> m + * Right wheel displacement: <right_wheel_displ> m + * Forward displacement: <forward_displ> m + * Yaw displacement: <yaw_displ> rev + * Left motor torque: <left_torque> Nm + * Right motor torque: <right_torque> Nm + * Operation mode: <op_mode> + * Hardware operation mode : <hardware_op_mode> + * Gain schedule: <gain_schedule> + * UI battery voltage: <ui_battery> V + * Powerbase battery voltage: <powerbase_battery> V + * \endverbatim + */ + friend std::ostream& operator<< (std::ostream& out, CSegwayRMP200& segway); + /** + * \brief destructor + * + * This destructor is called when the object is about to be destroyed. It calls + * the close() function to safely stop all the internal threads, and then deletes + * all the internal threads and events. + * + */ + ~CSegwayRMP200(); +}; + +#endif + diff --git a/src/segway_rmp200_exceptions.cpp b/src/segway_rmp200_exceptions.cpp new file mode 100644 index 0000000..59d3e8c --- /dev/null +++ b/src/segway_rmp200_exceptions.cpp @@ -0,0 +1,12 @@ +#include "segway_rmp200_exceptions.h" +#include <string.h> +#include <stdio.h> + +const std::string segway_rmp200_exception_msg="[CSegwayRMP200 class] - "; + +CSegwayRMP200Exception::CSegwayRMP200Exception(const std::string& where,const std::string& error_msg,const std::string& segway_id):CException(where,segway_rmp200_exception_msg) +{ + this->error_msg+=error_msg; + this->error_msg+=" - "; + this->error_msg+=segway_id; +} diff --git a/src/segway_rmp200_exceptions.h b/src/segway_rmp200_exceptions.h new file mode 100644 index 0000000..99fc2ac --- /dev/null +++ b/src/segway_rmp200_exceptions.h @@ -0,0 +1,58 @@ +#ifndef _SEGWAY_RMP200_EXCEPTIONS +#define _SEGWAY_RMP200_EXCEPTIONS + +#include "exceptions.h" + +/** + * \brief Generic segway RMP 200 exception class + * + * This class implements the exceptions for the CSegwayRMP200 class. In addition + * to the basic error message provided by the base class CException, this + * exception class provides also the unique identifier of the segway robot + * that generated the exception. + * + * Also, similarly to other exception classes, it appends a class identifer + * string ("[CSegwayRMP200 class] - ") to the error message in order to identify the + * class that generated the exception. + * + * The base class can be used to catch any exception thrown by the application + * or also, this class can be used in order to catch only exceptions generated + * by CComm objects. + */ +class CSegwayRMP200Exception : public CException +{ + public: + /** + * \brief Constructor + * + * The constructor calls the base class constructor to add the general + * exception identifier and then adds the class identifier string + * "[CSegwayRMP200 class]" and the supplied error message. + * + * It also appends the unique identifier of the segway robot + * that generated the exception. So, the total exception message will + * look like this: + * + * \verbatim + * [Exception caught] - <where> + * [CSegwayRMP200 class] - <error message> - <segway id> + * \endverbatim + * + * \param where a null terminated string with the information about the name + * of the function, the source code filename and the line where + * the exception was generated. This string must be generated + * by the _HERE_ macro. + * + * \param error_msg a null terminated string that contains the error message. + * This string may have any valid character and there is no + * limit on its length. + * + * \param segway_id a null terminated string that contains the segway robot + * unique identifier. This string must be the one used to create + * the communication device. + * + */ + CSegwayRMP200Exception(const std::string& where,const std::string& error_msg,const std::string& segway_id); +}; + +#endif -- GitLab