From 6721dc6632f173d520623241ff2122b240f208d3 Mon Sep 17 00:00:00 2001 From: Shubham Kumar Date: Fri, 25 May 2018 17:36:34 +0530 Subject: [PATCH 01/11] Add converstion from VREP laserscans to CObservation2DRangeScan --- CMakeLists.txt | 1 + mrpt_graphslam_2d/CMakeLists.txt | 16 ++++-- .../include/mrpt_bridge/vrep_conversion.h | 31 ++++++++++ .../remoteApi/bubbleRob_test.cpp | 57 ------------------- .../remoteApi/remoteApi_test.cpp | 54 ++++++++++++++++++ .../remoteApi/vrep_conversion.cpp | 47 +++++++++++++++ 6 files changed, 143 insertions(+), 63 deletions(-) create mode 100644 mrpt_graphslam_2d/include/mrpt_bridge/vrep_conversion.h delete mode 100644 mrpt_graphslam_2d/remoteApi/bubbleRob_test.cpp create mode 100644 mrpt_graphslam_2d/remoteApi/remoteApi_test.cpp create mode 100644 mrpt_graphslam_2d/remoteApi/vrep_conversion.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index ef55823..053f5c3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -57,6 +57,7 @@ set(PROJECT_ROOT ${CMAKE_CURRENT_SOURCE_DIR}) find_package(MRPT REQUIRED graphslam) message(STATUS "MRPT_VERSION: ${MRPT_VERSION}") +# TODO - Link the mrpt libraries to the excecutable created by the VREP files # User Options diff --git a/mrpt_graphslam_2d/CMakeLists.txt b/mrpt_graphslam_2d/CMakeLists.txt index d0bbb5f..2030436 100644 --- a/mrpt_graphslam_2d/CMakeLists.txt +++ b/mrpt_graphslam_2d/CMakeLists.txt @@ -29,15 +29,17 @@ if (EXISTS "$ENV{VREP}") set (VREP_PATH "$ENV{VREP}/programming" CACHE "The VREP build path" STRING) - set (SOURCES + set (SOURCES + include/mrpt_bridge/vrep_conversion.h ${VREP_PATH}/remoteApi/extApi.h ${VREP_PATH}/remoteApi/extApiPlatform.h ${VREP_PATH}/include/shared_memory.h ${VREP_PATH}/remoteApi/extApi.c ${VREP_PATH}/common/shared_memory.c - ${VREP_PATH}/remoteApi/extApiPlatform.c) + ${VREP_PATH}/remoteApi/extApiPlatform.c + remoteApi/vrep_conversion.cpp) - include_directories (${VREP_PATH}/remoteApi ${VREP_PATH}/include) + include_directories (${VREP_PATH}/remoteApi ${VREP_PATH}/include include) add_definitions( -Dpthread ) add_definitions (-DNON_MATLAB_PARSING) @@ -46,13 +48,15 @@ if (EXISTS "$ENV{VREP}") add_library (test_Client SHARED ${SOURCES}) - add_executable(bubbleRob_test remoteApi/bubbleRob_test.cpp) + add_executable(remoteApi_test remoteApi/remoteApi_test.cpp) target_link_libraries ( - bubbleRob_test + remoteApi_test test_Client pthread - rt) + rt + ${MRPT_LIBS} + ) else() diff --git a/mrpt_graphslam_2d/include/mrpt_bridge/vrep_conversion.h b/mrpt_graphslam_2d/include/mrpt_bridge/vrep_conversion.h new file mode 100644 index 0000000..7da88db --- /dev/null +++ b/mrpt_graphslam_2d/include/mrpt_bridge/vrep_conversion.h @@ -0,0 +1,31 @@ +#ifndef VREP_CONVERSION_H +#define VREP_CONVERSION_H + +#include +#include + +#include + +#include "extApi.h" + +namespace mrpt +{ +namespace obs +{ +class CObservation2DRangeScan; +} +} + +namespace mrpt +{ +namespace poses +{ +class CPose3D; +} +} +namespace vrep_bridge +{ bool convert(const simxUChar* _dataSignal, const simxInt& _dataCount, const simxFloat& _maxScanDistance, + const simxFloat& _scanningAngle,const mrpt::poses::CPose3D& _pose,mrpt::obs::CObservation2DRangeScan& _obj); +} + +#endif diff --git a/mrpt_graphslam_2d/remoteApi/bubbleRob_test.cpp b/mrpt_graphslam_2d/remoteApi/bubbleRob_test.cpp deleted file mode 100644 index 77a865e..0000000 --- a/mrpt_graphslam_2d/remoteApi/bubbleRob_test.cpp +++ /dev/null @@ -1,57 +0,0 @@ -#include -#include -#include - -extern "C" { - #include "extApi.h" -} - -int main() -{ - simxFinish(-1); //close all existing connections. - - int clientID=simxStart((simxChar*)"127.0.0.1",19997,true,true,2000,5); - simxInt handle; - simxFloat position[3]; - simxFloat orient[3]; - float x[2] ={0,0.1}; - float y[2] ={0,0.1}; - - if (clientID!=-1) - { - printf("Simulation started \n"); - - while (simxGetConnectionId(clientID)!=-1) //checl for successful connection - { - for(int i=0;i<2;i++){ - for(int j=0;j<2;j++){ - for(int k=0;k<2;k++){ - simxGetObjectHandle(clientID,"bubbleRob",&handle,simx_opmode_streaming); //get object handle - simxGetObjectPosition(clientID,handle,-1,position,simx_opmode_streaming); // get object position - simxGetObjectOrientation(clientID,handle,-1,orient,simx_opmode_streaming); // get object orientation(returns euler angles) - - printf("bubbleRob Handle : %u\n",handle); - for(int u =0 ;u<3;u++){ - printf("bubbleRob Position %i : %f\n",u,position[u]); - printf("bubbleRob Orientation %i : %f\n",u,orient[u]); - printf("\n"); - } - - position[0] = x[j]; - position[1] = y[k]; - position[2] = 0; - - simxSetObjectPosition(clientID,handle,-1,position,simx_opmode_streaming); - simxSetObjectOrientation(clientID,handle,-1,orient,simx_opmode_streaming); - printf("New position and orientation set. \n"); - extApi_sleepMs(1000); - } - } - } - - } - simxFinish(clientID); - } - return(0); -} - diff --git a/mrpt_graphslam_2d/remoteApi/remoteApi_test.cpp b/mrpt_graphslam_2d/remoteApi/remoteApi_test.cpp new file mode 100644 index 0000000..04e4a41 --- /dev/null +++ b/mrpt_graphslam_2d/remoteApi/remoteApi_test.cpp @@ -0,0 +1,54 @@ +#include +#include +#include +#include +#include +#include +#include "mrpt_bridge/vrep_conversion.h" +extern "C" { + #include "extApi.h" +} +using namespace mrpt::obs; +using namespace mrpt::poses; +using namespace vrep_bridge; + +int main() +{ + simxFinish(-1); //close all existing connections. + + int clientID=simxStart((simxChar*)"127.0.0.1",19997,true,true,2000,5); + simxInt handle; + simxFloat position[3],scanningAngle,maxScanDistance; + simxUChar* dataSignal; + int dataSignalSize,dataCount; + + + if (clientID!=-1) + { + printf("Simulation started \n"); + + while (simxGetConnectionId(clientID)!=-1){ + simxGetObjectHandle(clientID,"fastHokuyo",&handle,simx_opmode_streaming); //get object handlesimxGetObjectPosition(clientID,handle,-1,position,simx_opmode_streaming); // get object position + simxGetObjectPosition(clientID,handle,-1,position,simx_opmode_streaming); // get object orientation(returns euler angles) + simxGetStringSignal(clientID,"measuredDataAtThisTime",&dataSignal,&dataSignalSize,simx_opmode_streaming); + simxGetFloatSignal(clientID,"scanningAngle",&scanningAngle,simx_opmode_streaming); + simxGetFloatSignal(clientID,"maxScanDistance",&maxScanDistance,simx_opmode_streaming); + if (simxGetStringSignal(clientID,"measuredDataAtThisTime",&dataSignal,&dataSignalSize,simx_opmode_buffer)==simx_error_noerror) + { + dataCount=dataSignalSize/12; + CPose3D sensor_pose(position[0],position[1],position[2]); + CObservation2DRangeScan obj; + bool res = convert(dataSignal,dataCount,maxScanDistance,scanningAngle,sensor_pose,obj); + printf("%d\n",res); + + } + printf("Scanning angle : %f\n",scanningAngle ); + printf("Handle : %u\n",handle); + printf("Laser Position : (%f,%f,%f) \n",position[0],position[1],position[2]); + extApi_sleepMs(100); + } + simxFinish(clientID); + } + return(0); +} + diff --git a/mrpt_graphslam_2d/remoteApi/vrep_conversion.cpp b/mrpt_graphslam_2d/remoteApi/vrep_conversion.cpp new file mode 100644 index 0000000..7aef2e2 --- /dev/null +++ b/mrpt_graphslam_2d/remoteApi/vrep_conversion.cpp @@ -0,0 +1,47 @@ +#include +#include +#include +#include +#include +#include "mrpt_bridge/vrep_conversion.h" + +extern "C" { + #include "extApi.h" +} + +using namespace mrpt::obs; +namespace vrep_bridge { + bool convert(const simxUChar* _dataSignal, const simxInt& _dataCount, const simxFloat& _maxScanDistance, + const simxFloat& _scanningAngle,const mrpt::poses::CPose3D& _pose,CObservation2DRangeScan& _obj){ + float range[_dataCount]; + for (int i=0;i<_dataCount;i++){ + float x =((float*)_dataSignal)[3*i]; + float y =((float*)_dataSignal)[3*i+1]; + range[i] = sqrt(x*x + y*y); + } + _obj.rightToLeft = true; + //_obj.sensorLabel + _obj.aperture = _scanningAngle; + _obj.maxRange = _maxScanDistance; + _obj.sensorPose = _pose; //pose is calculated from the position recieved from the simulation. + const double ang_step = _obj.aperture / (_dataCount - 1); + const double inv_ang_step = (_dataCount - 1) / _obj.aperture; + _obj.resizeScan(_dataCount); + for (std::size_t i = 0; i < _dataCount; i++) + { + int j = inv_ang_step * ang_step * i; + if (j < 0) + j += _dataCount; + else if (j >= _dataCount) + j -= _dataCount; + + const float r = range[j]; + _obj.setScanRange(i, r); + + const bool r_valid = ((_obj.scan[i] < (_maxScanDistance * 0.95)) && (_obj.scan[i] > 0)); + _obj.setScanRangeValidity(i, r_valid); + } + return true; + + } +} From 8a9a7580e20e99131a73656f494f06175d46039f Mon Sep 17 00:00:00 2001 From: Shubham Kumar Date: Sat, 26 May 2018 01:10:48 +0530 Subject: [PATCH 02/11] Add gtest for CObservation2DRangeScan conversion method --- mrpt_graphslam_2d/CMakeLists.txt | 14 +++++--- .../include/mrpt_bridge/vrep_conversion.h | 2 +- .../remoteApi/remoteApi_test.cpp | 8 ++++- .../remoteApi/vrep_conversion.cpp | 10 ++---- mrpt_graphslam_2d/test/convertTest.cpp | 33 +++++++++++++++++++ 5 files changed, 54 insertions(+), 13 deletions(-) create mode 100644 mrpt_graphslam_2d/test/convertTest.cpp diff --git a/mrpt_graphslam_2d/CMakeLists.txt b/mrpt_graphslam_2d/CMakeLists.txt index 2030436..65b9bf0 100644 --- a/mrpt_graphslam_2d/CMakeLists.txt +++ b/mrpt_graphslam_2d/CMakeLists.txt @@ -3,12 +3,18 @@ set(PROJECT_TEST_NAME ${PROJECT_NAME}_test) if (BUILD_TESTING) - set(test_sources "test/runTests.cpp") - add_executable(${PROJECT_TEST_NAME} - ${test_sources}) + set(test_sources + include/mrpt_bridge/vrep_conversion.h + remoteApi/vrep_conversion.cpp + test/runTests.cpp + test/convertTest.cpp + ) + add_executable(${PROJECT_TEST_NAME} ${test_sources}) target_link_libraries(${PROJECT_TEST_NAME} gtest - pthread) + pthread + ${MRPT_LIBS} + ) set_target_properties( ${PROJECT_TEST_NAME} PROPERTIES diff --git a/mrpt_graphslam_2d/include/mrpt_bridge/vrep_conversion.h b/mrpt_graphslam_2d/include/mrpt_bridge/vrep_conversion.h index 7da88db..3788c91 100644 --- a/mrpt_graphslam_2d/include/mrpt_bridge/vrep_conversion.h +++ b/mrpt_graphslam_2d/include/mrpt_bridge/vrep_conversion.h @@ -24,7 +24,7 @@ class CPose3D; } } namespace vrep_bridge -{ bool convert(const simxUChar* _dataSignal, const simxInt& _dataCount, const simxFloat& _maxScanDistance, +{ bool convert(const float range[], const simxFloat& _maxScanDistance, const simxFloat& _scanningAngle,const mrpt::poses::CPose3D& _pose,mrpt::obs::CObservation2DRangeScan& _obj); } diff --git a/mrpt_graphslam_2d/remoteApi/remoteApi_test.cpp b/mrpt_graphslam_2d/remoteApi/remoteApi_test.cpp index 04e4a41..560c6d7 100644 --- a/mrpt_graphslam_2d/remoteApi/remoteApi_test.cpp +++ b/mrpt_graphslam_2d/remoteApi/remoteApi_test.cpp @@ -36,9 +36,15 @@ int main() if (simxGetStringSignal(clientID,"measuredDataAtThisTime",&dataSignal,&dataSignalSize,simx_opmode_buffer)==simx_error_noerror) { dataCount=dataSignalSize/12; + float range[dataCount]; + for (int i=0;i +#include +#include +#include +#include +#define __STDC_FORMAT_MACROS +#include +#include +#include "mrpt_bridge/vrep_conversion.h" +extern "C" { + #include "extApi.h" +} +using namespace mrpt::obs; +using namespace mrpt::poses; +using namespace vrep_bridge; + + +TEST(ConvertTest, CObservation2DRangeScanTest) +{ + + simxFloat position[3] ={1.00,1.00,1.00} ,scanningAngle = 4.18 ,maxScanDistance = 5; + simxUChar* dataSignal; + float range[] = {2.00,2.00,1.00}; + + CPose3D sensor_pose(position[0],position[1],position[2]); + CObservation2DRangeScan obj; + EXPECT_TRUE(convert(range,maxScanDistance,scanningAngle,sensor_pose,obj)); + EXPECT_TRUE(obj.rightToLeft); + EXPECT_EQ(obj.aperture, scanningAngle); + EXPECT_EQ(obj.maxRange,maxScanDistance); + EXPECT_EQ(obj.sensorPose,sensor_pose); +} + From 9b8c5de0e6ecdd77b7456c6fcf32f326333757df Mon Sep 17 00:00:00 2001 From: Shubham Kumar Date: Sat, 26 May 2018 17:52:48 +0530 Subject: [PATCH 03/11] Add conversion method for CPose3D class --- .../include/mrpt_bridge/vrep_conversion.h | 2 ++ mrpt_graphslam_2d/remoteApi/remoteApi_test.cpp | 6 ++++-- mrpt_graphslam_2d/remoteApi/vrep_conversion.cpp | 9 +++++++++ mrpt_graphslam_2d/test/convertTest.cpp | 14 ++++++++++++-- 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/mrpt_graphslam_2d/include/mrpt_bridge/vrep_conversion.h b/mrpt_graphslam_2d/include/mrpt_bridge/vrep_conversion.h index 3788c91..afcdd47 100644 --- a/mrpt_graphslam_2d/include/mrpt_bridge/vrep_conversion.h +++ b/mrpt_graphslam_2d/include/mrpt_bridge/vrep_conversion.h @@ -26,6 +26,8 @@ class CPose3D; namespace vrep_bridge { bool convert(const float range[], const simxFloat& _maxScanDistance, const simxFloat& _scanningAngle,const mrpt::poses::CPose3D& _pose,mrpt::obs::CObservation2DRangeScan& _obj); + + bool convert(const float position[3], const float quaternion[4],mrpt::poses::CPose3D& _pose); } #endif diff --git a/mrpt_graphslam_2d/remoteApi/remoteApi_test.cpp b/mrpt_graphslam_2d/remoteApi/remoteApi_test.cpp index 560c6d7..14c4fb2 100644 --- a/mrpt_graphslam_2d/remoteApi/remoteApi_test.cpp +++ b/mrpt_graphslam_2d/remoteApi/remoteApi_test.cpp @@ -21,7 +21,7 @@ int main() simxFloat position[3],scanningAngle,maxScanDistance; simxUChar* dataSignal; int dataSignalSize,dataCount; - + simxFloat quaternion[4]; if (clientID!=-1) { @@ -30,6 +30,7 @@ int main() while (simxGetConnectionId(clientID)!=-1){ simxGetObjectHandle(clientID,"fastHokuyo",&handle,simx_opmode_streaming); //get object handlesimxGetObjectPosition(clientID,handle,-1,position,simx_opmode_streaming); // get object position simxGetObjectPosition(clientID,handle,-1,position,simx_opmode_streaming); // get object orientation(returns euler angles) + simxGetObjectQuaternion(clientID,handle,-1,quaternion,simx_opmode_streaming); simxGetStringSignal(clientID,"measuredDataAtThisTime",&dataSignal,&dataSignalSize,simx_opmode_streaming); simxGetFloatSignal(clientID,"scanningAngle",&scanningAngle,simx_opmode_streaming); simxGetFloatSignal(clientID,"maxScanDistance",&maxScanDistance,simx_opmode_streaming); @@ -42,7 +43,8 @@ int main() float y =((float*)dataSignal)[3*i+1]; range[i] = sqrt(x*x + y*y); } - CPose3D sensor_pose(position[0],position[1],position[2]); + CPose3D sensor_pose; + bool pose_convert = convert(position,quaternion,sensor_pose); CObservation2DRangeScan obj; bool res = convert(range,maxScanDistance,scanningAngle,sensor_pose,obj); printf("%d\n",res); diff --git a/mrpt_graphslam_2d/remoteApi/vrep_conversion.cpp b/mrpt_graphslam_2d/remoteApi/vrep_conversion.cpp index 7a6eb35..3f6207f 100644 --- a/mrpt_graphslam_2d/remoteApi/vrep_conversion.cpp +++ b/mrpt_graphslam_2d/remoteApi/vrep_conversion.cpp @@ -4,6 +4,8 @@ #include #include #include "mrpt_bridge/vrep_conversion.h" +#include + extern "C" { #include "extApi.h" @@ -40,4 +42,11 @@ namespace vrep_bridge { return true; } + + bool convert(const float position[3], const float quaternion[4], mrpt::poses::CPose3D& _pose){ + mrpt::math::CQuaternionDouble q = mrpt::math::CQuaternionDouble((double)quaternion[0],(double)quaternion[1] + ,(double)quaternion[2],(double)quaternion[3]); + _pose = mrpt::poses::CPose3D(q,(double)position[0],(double)position[1],(double)position[2]); + return true; + } } diff --git a/mrpt_graphslam_2d/test/convertTest.cpp b/mrpt_graphslam_2d/test/convertTest.cpp index 06663d7..84a91da 100644 --- a/mrpt_graphslam_2d/test/convertTest.cpp +++ b/mrpt_graphslam_2d/test/convertTest.cpp @@ -21,8 +21,9 @@ TEST(ConvertTest, CObservation2DRangeScanTest) simxFloat position[3] ={1.00,1.00,1.00} ,scanningAngle = 4.18 ,maxScanDistance = 5; simxUChar* dataSignal; float range[] = {2.00,2.00,1.00}; - - CPose3D sensor_pose(position[0],position[1],position[2]); + simxFloat quaternion[4] = {0.5,0.5,0.5,0.5}; + CPose3D sensor_pose; + bool res = convert(position,quaternion,sensor_pose); CObservation2DRangeScan obj; EXPECT_TRUE(convert(range,maxScanDistance,scanningAngle,sensor_pose,obj)); EXPECT_TRUE(obj.rightToLeft); @@ -31,3 +32,12 @@ TEST(ConvertTest, CObservation2DRangeScanTest) EXPECT_EQ(obj.sensorPose,sensor_pose); } +TEST(ConvertTest,CPose3DTest){ + simxFloat position[3] ={1.00,1.00,1.00}; + simxFloat quaternion[4] = {0.5,0.5,0.5,0.5}; + CPose3D pose; + EXPECT_TRUE(convert(position,quaternion,pose)); + float pitch = asin(-2*((quaternion[0]*quaternion[2])-(quaternion[1]*quaternion[3]))); + EXPECT_EQ((double)pitch,pose.pitch()); +} + From 2c4a8a5af9707860d68843f438b6473a57efcbc8 Mon Sep 17 00:00:00 2001 From: Shubham Kumar Date: Sun, 27 May 2018 19:33:53 +0530 Subject: [PATCH 04/11] Add conversion method for CObservationOdometry class --- .../include/mrpt_bridge/vrep_conversion.h | 7 +++- .../remoteApi/remoteApi_test.cpp | 16 +++++--- .../remoteApi/vrep_conversion.cpp | 38 ++++++++++++++----- mrpt_graphslam_2d/test/convertTest.cpp | 14 +++++++ 4 files changed, 58 insertions(+), 17 deletions(-) diff --git a/mrpt_graphslam_2d/include/mrpt_bridge/vrep_conversion.h b/mrpt_graphslam_2d/include/mrpt_bridge/vrep_conversion.h index afcdd47..9050777 100644 --- a/mrpt_graphslam_2d/include/mrpt_bridge/vrep_conversion.h +++ b/mrpt_graphslam_2d/include/mrpt_bridge/vrep_conversion.h @@ -13,6 +13,7 @@ namespace mrpt namespace obs { class CObservation2DRangeScan; +class CObservationOdometry; } } @@ -24,10 +25,12 @@ class CPose3D; } } namespace vrep_bridge -{ bool convert(const float range[], const simxFloat& _maxScanDistance, +{ bool convert(const float _range[], const simxFloat& _maxScanDistance, const simxFloat& _scanningAngle,const mrpt::poses::CPose3D& _pose,mrpt::obs::CObservation2DRangeScan& _obj); - bool convert(const float position[3], const float quaternion[4],mrpt::poses::CPose3D& _pose); + bool convert(const float _position[3], const float _quaternion[4],mrpt::poses::CPose3D& _pose); + + bool convert(const mrpt::poses::CPose3D& _pose3D,const float _vel[3], const float _angularvelocity[3], mrpt::obs::CObservationOdometry& _obj); } #endif diff --git a/mrpt_graphslam_2d/remoteApi/remoteApi_test.cpp b/mrpt_graphslam_2d/remoteApi/remoteApi_test.cpp index 14c4fb2..25b8e33 100644 --- a/mrpt_graphslam_2d/remoteApi/remoteApi_test.cpp +++ b/mrpt_graphslam_2d/remoteApi/remoteApi_test.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include #include "mrpt_bridge/vrep_conversion.h" extern "C" { @@ -21,7 +22,7 @@ int main() simxFloat position[3],scanningAngle,maxScanDistance; simxUChar* dataSignal; int dataSignalSize,dataCount; - simxFloat quaternion[4]; + simxFloat quaternion[4],vel[3],angularvel[3]; if (clientID!=-1) { @@ -34,6 +35,11 @@ int main() simxGetStringSignal(clientID,"measuredDataAtThisTime",&dataSignal,&dataSignalSize,simx_opmode_streaming); simxGetFloatSignal(clientID,"scanningAngle",&scanningAngle,simx_opmode_streaming); simxGetFloatSignal(clientID,"maxScanDistance",&maxScanDistance,simx_opmode_streaming); + simxGetObjectVelocity(clientID,handle,vel,angularvel,simx_opmode_streaming); + CPose3D sensor_pose; + + bool pose_convert = convert(position,quaternion,sensor_pose); + if (simxGetStringSignal(clientID,"measuredDataAtThisTime",&dataSignal,&dataSignalSize,simx_opmode_buffer)==simx_error_noerror) { dataCount=dataSignalSize/12; @@ -43,13 +49,13 @@ int main() float y =((float*)dataSignal)[3*i+1]; range[i] = sqrt(x*x + y*y); } - CPose3D sensor_pose; - bool pose_convert = convert(position,quaternion,sensor_pose); + CObservation2DRangeScan obj; - bool res = convert(range,maxScanDistance,scanningAngle,sensor_pose,obj); - printf("%d\n",res); + bool rangescan_convert = convert(range,maxScanDistance,scanningAngle,sensor_pose,obj); } + CObservationOdometry odometry; + bool odometry_convert = convert(sensor_pose, vel, angularvel,odometry); printf("Scanning angle : %f\n",scanningAngle ); printf("Handle : %u\n",handle); printf("Laser Position : (%f,%f,%f) \n",position[0],position[1],position[2]); diff --git a/mrpt_graphslam_2d/remoteApi/vrep_conversion.cpp b/mrpt_graphslam_2d/remoteApi/vrep_conversion.cpp index 3f6207f..eee5a18 100644 --- a/mrpt_graphslam_2d/remoteApi/vrep_conversion.cpp +++ b/mrpt_graphslam_2d/remoteApi/vrep_conversion.cpp @@ -5,6 +5,7 @@ #include #include "mrpt_bridge/vrep_conversion.h" #include +#include extern "C" { @@ -12,16 +13,18 @@ extern "C" { } using namespace mrpt::obs; +using namespace mrpt::poses; +using namespace mrpt::math; + namespace vrep_bridge { - bool convert(const float range[], const simxFloat& _maxScanDistance, - const simxFloat& _scanningAngle,const mrpt::poses::CPose3D& _pose,CObservation2DRangeScan& _obj){ + bool convert(const float _range[], const simxFloat& _maxScanDistance, + const simxFloat& _scanningAngle,const CPose3D& _pose,CObservation2DRangeScan& _obj){ - int _dataCount = sizeof(range)/sizeof(range[0]); + int _dataCount = sizeof(_range)/sizeof(_range[0]); _obj.rightToLeft = true; - //_obj.sensorLabel _obj.aperture = _scanningAngle; _obj.maxRange = _maxScanDistance; - _obj.sensorPose = _pose; //pose is calculated from the position recieved from the simulation. + _obj.sensorPose = _pose; const double ang_step = _obj.aperture / (_dataCount - 1); const double inv_ang_step = (_dataCount - 1) / _obj.aperture; _obj.resizeScan(_dataCount); @@ -33,7 +36,7 @@ namespace vrep_bridge { else if (j >= _dataCount) j -= _dataCount; - const float r = range[j]; + const float r = _range[j]; _obj.setScanRange(i, r); const bool r_valid = ((_obj.scan[i] < (_maxScanDistance * 0.95)) && (_obj.scan[i] > 0)); @@ -43,10 +46,25 @@ namespace vrep_bridge { } - bool convert(const float position[3], const float quaternion[4], mrpt::poses::CPose3D& _pose){ - mrpt::math::CQuaternionDouble q = mrpt::math::CQuaternionDouble((double)quaternion[0],(double)quaternion[1] - ,(double)quaternion[2],(double)quaternion[3]); - _pose = mrpt::poses::CPose3D(q,(double)position[0],(double)position[1],(double)position[2]); + bool convert(const float _position[3], const float _quaternion[4], CPose3D& _pose){ + if((mrpt::square(_quaternion[0])+mrpt::square(_quaternion[1])+mrpt::square(_quaternion[2])+mrpt::square(_quaternion[3]))-1 <1e-3){ + _pose = CPose3D((double)_position[0],(double)_position[1],(double)_position[2]); + } + else{ + CQuaternionDouble q = mrpt::math::CQuaternionDouble((double)_quaternion[0],(double)_quaternion[1] + ,(double)_quaternion[2],(double)_quaternion[3]); + _pose = CPose3D(q,(double)_position[0],(double)_position[1],(double)_position[2]); + } + return true; + } + + bool convert(const CPose3D& _pose3D, const float _vel[3], const float _angularvelocity[3],CObservationOdometry& _obj){ + CPose2D _pose2D = CPose2D(_pose3D); + _obj.odometry = _pose2D; + _obj.hasEncodersInfo = false; + _obj.hasVelocities = true; + TTwist2D _tTwist = TTwist2D((double)_vel[0],(double)_vel[1],(double)_angularvelocity[2]); // velocity in 2D + angular velocity along z + _obj.velocityLocal = _tTwist; return true; } } diff --git a/mrpt_graphslam_2d/test/convertTest.cpp b/mrpt_graphslam_2d/test/convertTest.cpp index 84a91da..f687182 100644 --- a/mrpt_graphslam_2d/test/convertTest.cpp +++ b/mrpt_graphslam_2d/test/convertTest.cpp @@ -5,6 +5,7 @@ #include #define __STDC_FORMAT_MACROS #include +#include #include #include "mrpt_bridge/vrep_conversion.h" extern "C" { @@ -41,3 +42,16 @@ TEST(ConvertTest,CPose3DTest){ EXPECT_EQ((double)pitch,pose.pitch()); } +TEST(ConvertTest,CObservationOdometryTest){ + simxFloat position[3] ={1.00,1.00,1.00}; + simxFloat quaternion[4] = {0.5,0.5,0.5,0.5}; + simxFloat vel[3] ={1.00,1.00,1.00}; + simxFloat ang_vel[4] = {0.5,0.5,0.5}; + CObservationOdometry odometry; + CPose3D pose; + bool res = convert(position,quaternion,pose); + CPose2D pose_2D = CPose2D(pose); + EXPECT_TRUE(convert(pose,vel,ang_vel,odometry)); + EXPECT_TRUE(odometry.hasVelocities); + EXPECT_EQ(pose_2D,odometry.odometry); +} \ No newline at end of file From 4df37d16d8ce8442c971fb2cad85fb06353e347a Mon Sep 17 00:00:00 2001 From: Nikos Koukis Date: Sun, 27 May 2018 17:45:18 +0100 Subject: [PATCH 05/11] cmake: Check minimum compiler version - Bump to C++17 standard --- CMakeLists.txt | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 053f5c3..bafe15b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -36,22 +36,31 @@ set(test_output_directory ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/test) set(MIN_GCC_CXX_COMPILER_VERSION "7.0.0") set(MIN_CLANG_CXX_COMPILER_VERSION "4.0.0") -if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - if (NOT "${CMAKE_CXX_COMPILER_VERSION}" VERSION_GREATER - ${MIN_CLANG_CXX_COMPILER_VERSION}) - endif() -elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") - if (NOT "${CMAKE_CXX_COMPILER_VERSION}" VERSION_GREATER - ${MIN_GCC_CXX_COMPILER_VERSION}) - endif() +if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") # Flags specific to Clang + if (NOT "${CMAKE_CXX_COMPILER_VERSION}" VERSION_GREATER + ${MIN_CLANG_CXX_COMPILER_VERSION}) + message(FATAL_ERROR + "Compiler version [${CMAKE_CXX_COMPILER_VERSION}] isn't supported. Minimum: ${MIN_CLANG_CXX_COMPILER_VERSION}") + endif() +elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") # Flags specific to GCC + if (NOT "${CMAKE_CXX_COMPILER_VERSION}" VERSION_GREATER + ${MIN_GCC_CXX_COMPILER_VERSION}) + message(FATAL_ERROR + "Compiler version [${CMAKE_CXX_COMPILER_VERSION}] isn't supported. Minimum: ${MIN_GCC_CXX_COMPILER_VERSION}") + endif() else() - message(WARNING - "Compiler \"${CMAKE_CXX_COMPILER_ID}\" is not yet supported by ${PROJECT_NAME}") + # TODO - make it run on Windows + message(WARNING + "Compiler [${CMAKE_CXX_COMPILER_ID}] is not yet supported by ${PROJECT_NAME}") endif() set(PROJECT_ROOT ${CMAKE_CURRENT_SOURCE_DIR}) +# Set the standard +set (CMAKE_C_STANDARD 99) # Require C99 +set (CMAKE_CXX_STANDARD 17) # Require C++17 + #MRPT Lib ################################################################################ find_package(MRPT REQUIRED graphslam) @@ -71,9 +80,6 @@ endif() option(BUILD_TESTING "Build all gtests" ON) -# Set the C/CXX Standards that we follow -set (CMAKE_CXX_STANDARD 14) # Require C++14 - # cmake helper scripts ################################################################################ From 868434d59b93e8ff475895b8b86d1d609a679116 Mon Sep 17 00:00:00 2001 From: Shubham Kumar Date: Tue, 29 May 2018 01:44:34 +0530 Subject: [PATCH 06/11] Add documentation for conversion methods and bug fix --- conversions/CMakeLists.txt | 34 +++++++ .../include/mrpt_bridge/vrep_conversion.h | 26 +++++ conversions/test/convertTest.cpp | 84 ++++++++++++++++ conversions/test/runTests.cpp | 8 ++ conversions/vrep_conversion.cpp | 82 ++++++++++++++++ doc/Doxyfile.in | 2 +- mrpt_graphslam_2d/CMakeLists.txt | 92 +++++++----------- .../include/mrpt_bridge/vrep_conversion.h | 36 ------- .../remoteApi/remoteApi_test.cpp | 44 +++++---- .../remoteApi/vrep_conversion.cpp | 70 ------------- mrpt_graphslam_2d/test/convertTest.cpp | 57 ----------- scenes/vrep_laserscanner.ttt | Bin 0 -> 309084 bytes 12 files changed, 296 insertions(+), 239 deletions(-) create mode 100644 conversions/include/mrpt_bridge/vrep_conversion.h create mode 100644 conversions/test/convertTest.cpp create mode 100644 conversions/test/runTests.cpp create mode 100644 conversions/vrep_conversion.cpp delete mode 100644 mrpt_graphslam_2d/include/mrpt_bridge/vrep_conversion.h delete mode 100644 mrpt_graphslam_2d/remoteApi/vrep_conversion.cpp delete mode 100644 mrpt_graphslam_2d/test/convertTest.cpp create mode 100755 scenes/vrep_laserscanner.ttt diff --git a/conversions/CMakeLists.txt b/conversions/CMakeLists.txt index e3ba7a0..0ed373d 100644 --- a/conversions/CMakeLists.txt +++ b/conversions/CMakeLists.txt @@ -1,3 +1,37 @@ PROJECT(${PROJECT_ROOT}_conversions) +set(CONVERT_TEST_NAME mrpt_vrep_bridge_conversions_test) +#Testing +###################################################### +if (BUILD_TESTING) + set(convertTest_sources + include/mrpt_bridge/vrep_conversion.h + vrep_conversion.cpp + test/runTests.cpp + test/convertTest.cpp + ) + add_executable(${CONVERT_TEST_NAME} ${convertTest_sources}) + target_link_libraries(${CONVERT_TEST_NAME} + gtest + pthread + ${MRPT_LIBS} + ) + set_target_properties(${CONVERT_TEST_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${test_output_directory} + ) + add_test(NAME ${CONVERT_TEST_NAME} COMMAND + ${test_output_directory}/${CONVERT_TEST_NAME}) +endif() + +set (SOURCES + include/mrpt_bridge/vrep_conversion.h + vrep_conversion.cpp +) +include_directories (include) +add_library (conversion_lib SHARED ${SOURCES}) +target_link_libraries( + conversion_lib + ${MRPT_LIBS} +) \ No newline at end of file diff --git a/conversions/include/mrpt_bridge/vrep_conversion.h b/conversions/include/mrpt_bridge/vrep_conversion.h new file mode 100644 index 0000000..c0374f7 --- /dev/null +++ b/conversions/include/mrpt_bridge/vrep_conversion.h @@ -0,0 +1,26 @@ +#ifndef VREP_CONVERSION_H +#define VREP_CONVERSION_H + +#include +#include + +namespace mrpt::obs +{ + class CObservation2DRangeScan; + class CObservationOdometry; +} + +namespace mrpt::poses +{ + class CPose3D; +} + +namespace vrep_bridge +{ + bool convert(const float _range[], const int _dataCount, const float& _maxScanDistance, + const float& _scanningAngle,const mrpt::poses::CPose3D& _pose,mrpt::obs::CObservation2DRangeScan& _obj); + bool convert(const float _position[3], const float _quaternion[4],mrpt::poses::CPose3D& _pose); + bool convert(const mrpt::poses::CPose3D& _pose3D,const float _vel[3], const float _angularvelocity[3], mrpt::obs::CObservationOdometry& _obj); +} + +#endif diff --git a/conversions/test/convertTest.cpp b/conversions/test/convertTest.cpp new file mode 100644 index 0000000..ff1a18c --- /dev/null +++ b/conversions/test/convertTest.cpp @@ -0,0 +1,84 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include "mrpt_bridge/vrep_conversion.h" +using namespace mrpt::obs; +using namespace mrpt::poses; +using namespace vrep_bridge; + +/** +*This unit test tests the CObservation2DRangeScan conversion method. It tests the following parameters of the object created with the functions parameters. +*- obj.aperture[] -> scanningAngle +*- obj.maxRange -> maxScanDistance +*- obj.sensorPose -> sensor_pose +* +*/ +TEST(ConvertTest, CObservation2DRangeScanTest) +{ + float position[3] ={1.00,1.00,1.00} ,scanningAngle = 4.18 ,maxScanDistance = 5; + float range[] = {2.00,2.00,1.00}; + int dataCount = 3; + float quaternion[4] = {0.5,0.5,0.5,0.5}; + CPose3D sensor_pose; + bool res = convert(position,quaternion,sensor_pose); + CObservation2DRangeScan obj; + EXPECT_TRUE(convert(range,dataCount,maxScanDistance,scanningAngle,sensor_pose,obj)); + EXPECT_TRUE(obj.rightToLeft); + EXPECT_FLOAT_EQ(obj.aperture, scanningAngle); + EXPECT_FLOAT_EQ(obj.maxRange,maxScanDistance); + EXPECT_EQ(obj.sensorPose,sensor_pose); +} +/** +*This unit test tests the yaw, pitch, roll values of the converted CPose3D object with the yaw,pitch,roll values calculated from the quaternion array. +* +*/ +TEST(ConvertTest,CPose3DTest) +{ + float position[3] ={1.00,1.00,1.00}; + float quaternion[4] = {0.5,0.5,0.5,0.5}; + float yaw,pitch,roll; + if((mrpt::square(quaternion[0])+mrpt::square(quaternion[1])+mrpt::square(quaternion[2])+mrpt::square(quaternion[3]))-1 <1e-3) + {// Check to ensure intialization of data is normalized + for(int i=0;i<4;i++) + quaternion[i] = 0; + yaw = 0; + pitch = 0; + roll = 0; + } + else + { + yaw = atan((2*((quaternion[1]*quaternion[0])+(quaternion[3]*quaternion[2])))/ + (mrpt::square(quaternion[3])-mrpt::square(quaternion[2])-mrpt::square(quaternion[1])+mrpt::square(quaternion[0]))); + pitch = asin(-2*((quaternion[0]*quaternion[2])-(quaternion[1]*quaternion[3]))); + roll = atan((2*((quaternion[1]*quaternion[2])+(quaternion[3]*quaternion[0])))/ + (mrpt::square(quaternion[3])+mrpt::square(quaternion[2])-mrpt::square(quaternion[1])-mrpt::square(quaternion[0]))); + } + CPose3D pose; + EXPECT_TRUE(convert(position,quaternion,pose)); + EXPECT_DOUBLE_EQ(static_cast(yaw),pose.yaw()); + EXPECT_DOUBLE_EQ(static_cast(roll),pose.roll()); + EXPECT_DOUBLE_EQ(static_cast(pitch),pose.pitch()); +} +/** +*This unit test tests the pose of the converted CObservationOdometry object with the pose of the sensor calculated from the position and quaternion values recieved from the simulator. +* +*/ +TEST(ConvertTest,CObservationOdometryTest) +{ + float position[3] ={1.00,1.00,1.00}; + float quaternion[4] = {0.5,0.5,0.5,0.5}; + float vel[3] ={1.00,1.00,1.00}; + float ang_vel[4] = {0.5,0.5,0.5}; + CObservationOdometry odometry; + CPose3D pose; + bool res = convert(position,quaternion,pose); + CPose2D pose_2D = CPose2D(pose); + EXPECT_TRUE(convert(pose,vel,ang_vel,odometry)); + EXPECT_TRUE(odometry.hasVelocities); + EXPECT_EQ(pose_2D,odometry.odometry); +} \ No newline at end of file diff --git a/conversions/test/runTests.cpp b/conversions/test/runTests.cpp new file mode 100644 index 0000000..81e4ecc --- /dev/null +++ b/conversions/test/runTests.cpp @@ -0,0 +1,8 @@ +#include "gtest/gtest.h" + +int main(int argc, char** argv) +{ + testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} + diff --git a/conversions/vrep_conversion.cpp b/conversions/vrep_conversion.cpp new file mode 100644 index 0000000..da1356f --- /dev/null +++ b/conversions/vrep_conversion.cpp @@ -0,0 +1,82 @@ +#include +#include +#include +#include +#include +#include "mrpt_bridge/vrep_conversion.h" +#include +#include + +using namespace mrpt::obs; +using namespace mrpt::poses; +using namespace mrpt::math; + +namespace vrep_bridge +{ /** + *This method converts VREP laser scans into a CObservation2DRangeScan class object. It has the following arguments: + *- _range[] -> This array contains all the laser scan measurements(distances). + *- _dataCount -> Contains the size of _range[]. + *- _maxScanDistance,_scanningAngle -> This is a simulation parameter and can be changed in the simulator. Fetched from VREP using simxGetFloatSignal. + *- _pose -> Sensor Pose. + */ + bool convert(const float _range[], const int _dataCount, const float& _maxScanDistance, + const float& _scanningAngle,const CPose3D& _pose,CObservation2DRangeScan& _obj) + { _obj.rightToLeft = true; + _obj.aperture = _scanningAngle; + _obj.maxRange = _maxScanDistance; + _obj.sensorPose = _pose; + const double ang_step = _obj.aperture / (_dataCount - 1); + const double inv_ang_step = (_dataCount - 1) / _obj.aperture; + _obj.resizeScan(_dataCount); + for (std::size_t i = 0; i < _dataCount; i++) + { + int j = inv_ang_step * ang_step * i; + if (j < 0) + j += _dataCount; + else + j -= _dataCount; + const float r = _range[j]; + _obj.setScanRange(i, r); + const bool r_valid = ((_obj.scan[i] < (_maxScanDistance * 0.95)) && (_obj.scan[i] > 0)); + _obj.setScanRangeValidity(i, r_valid); + } + return true; + } + /** + *This method converts sensor position,quaternion into a CPose3D class object. It has the following arguments: + *- _position[] -> This array contains x,y,z coordinates of the sensor. + *- _quaternion -> Contains the quaternion vector of the sensor. + * + * Only position array is used for conversion to CPose3D in case _quaternion vector cannot be converted to CQuaternionDouble class + */ + bool convert(const float _position[3], const float _quaternion[4], CPose3D& _pose) + { + if((mrpt::square(_quaternion[0])+mrpt::square(_quaternion[1])+mrpt::square(_quaternion[2])+mrpt::square(_quaternion[3]))-1 <1e-3) + { + _pose = CPose3D(static_cast(_position[0]),static_cast(_position[1]),static_cast(_position[2])); + } + else + { + CQuaternionDouble q = mrpt::math::CQuaternionDouble(static_cast(_quaternion[0]),static_cast(_quaternion[1]) + ,static_cast(_quaternion[2]),static_cast(_quaternion[3])); + _pose = CPose3D(q,static_cast(_position[0]),static_cast(_position[1]),static_cast(_position[2])); + } + return true; + } + /** + *This method converts pose,velocity and angular velocity value of an object into a CObservationOdometry class object. It has the following arguments: + *- _pose3D -> Contains sensor pose.. + *- _vel[3] -> Contains x,y,z velocity value of the sensor. + *- _angularvelocity[3] -> Contains angular velocity across x,y,z axis. + */ + bool convert(const CPose3D& _pose3D, const float _vel[3], const float _angularvelocity[3],CObservationOdometry& _obj) + { + CPose2D _pose2D = CPose2D(_pose3D); + _obj.odometry = _pose2D; + _obj.hasEncodersInfo = false; + _obj.hasVelocities = true; + TTwist2D _tTwist = TTwist2D(static_cast(_vel[0]),static_cast(_vel[1]),static_cast(_angularvelocity[2])); // velocity in 2D + angular velocity along z + _obj.velocityLocal = _tTwist; + return true; + } +} diff --git a/doc/Doxyfile.in b/doc/Doxyfile.in index ed519f3..a66fd67 100644 --- a/doc/Doxyfile.in +++ b/doc/Doxyfile.in @@ -416,7 +416,7 @@ LOOKUP_CACHE_SIZE = 0 # normally produced when WARNINGS is set to YES. # The default value is: NO. -EXTRACT_ALL = NO +EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will # be included in the documentation. diff --git a/mrpt_graphslam_2d/CMakeLists.txt b/mrpt_graphslam_2d/CMakeLists.txt index 65b9bf0..8dc08ff 100644 --- a/mrpt_graphslam_2d/CMakeLists.txt +++ b/mrpt_graphslam_2d/CMakeLists.txt @@ -1,27 +1,21 @@ PROJECT(mrpt_graphslam_2d) set(PROJECT_TEST_NAME ${PROJECT_NAME}_test) - if (BUILD_TESTING) - set(test_sources - include/mrpt_bridge/vrep_conversion.h - remoteApi/vrep_conversion.cpp - test/runTests.cpp - test/convertTest.cpp - ) - add_executable(${PROJECT_TEST_NAME} ${test_sources}) - target_link_libraries(${PROJECT_TEST_NAME} - gtest - pthread - ${MRPT_LIBS} + set(test_sources + test/runTests.cpp + ) + add_executable(${PROJECT_TEST_NAME} ${test_sources}) + target_link_libraries(${PROJECT_TEST_NAME} + gtest + pthread ) - set_target_properties( - ${PROJECT_TEST_NAME} - PROPERTIES - RUNTIME_OUTPUT_DIRECTORY ${test_output_directory} + set_target_properties(${PROJECT_TEST_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${test_output_directory} ) - add_test(NAME ${PROJECT_TEST_NAME} COMMAND - ${test_output_directory}/${PROJECT_TEST_NAME}) + add_test(NAME ${PROJECT_TEST_NAME} COMMAND + ${test_output_directory}/${PROJECT_TEST_NAME}) endif() @@ -29,43 +23,31 @@ endif() ################################################################################ if (EXISTS "$ENV{VREP}") - message(STATUS "Found VREP") - set (VREP_ROOT "$ENV{VREP}" CACHE "VREP root dir" STRING) - - - set (VREP_PATH "$ENV{VREP}/programming" CACHE "The VREP build path" STRING) - - set (SOURCES - include/mrpt_bridge/vrep_conversion.h - ${VREP_PATH}/remoteApi/extApi.h - ${VREP_PATH}/remoteApi/extApiPlatform.h - ${VREP_PATH}/include/shared_memory.h - ${VREP_PATH}/remoteApi/extApi.c - ${VREP_PATH}/common/shared_memory.c - ${VREP_PATH}/remoteApi/extApiPlatform.c - remoteApi/vrep_conversion.cpp) - - include_directories (${VREP_PATH}/remoteApi ${VREP_PATH}/include include) - - add_definitions( -Dpthread ) - add_definitions (-DNON_MATLAB_PARSING) - add_definitions (-DMAX_EXT_API_CONNECTIONS=255) - - add_library (test_Client SHARED ${SOURCES}) - - - add_executable(remoteApi_test remoteApi/remoteApi_test.cpp) - - target_link_libraries ( - remoteApi_test - test_Client - pthread - rt - ${MRPT_LIBS} - ) - - + message(STATUS "Found VREP") + set (VREP_ROOT "$ENV{VREP}" CACHE "VREP root dir" STRING) + set (VREP_PATH "$ENV{VREP}/programming" CACHE "The VREP build path" STRING) + set (SOURCES + ${VREP_PATH}/remoteApi/extApi.h + ${VREP_PATH}/remoteApi/extApiPlatform.h + ${VREP_PATH}/include/shared_memory.h + ${VREP_PATH}/remoteApi/extApi.c + ${VREP_PATH}/common/shared_memory.c + ${VREP_PATH}/remoteApi/extApiPlatform.c + ) + include_directories (${VREP_PATH}/remoteApi ${VREP_PATH}/include) + add_definitions( -Dpthread ) + add_definitions (-DNON_MATLAB_PARSING) + add_definitions (-DMAX_EXT_API_CONNECTIONS=255) + add_library (test_Client SHARED ${SOURCES}) + add_executable(remoteApi_test remoteApi/remoteApi_test.cpp) + target_link_libraries( + remoteApi_test + test_Client + pthread + rt + conversion_lib + ) else() - message(FATAL_ERROR "Can't detect V-REP installation. Have you exported the VREP environment variable to the corresponding path?") + message(FATAL_ERROR "Can't detect V-REP installation. Have you exported the VREP environment variable to the corresponding path?") endif() diff --git a/mrpt_graphslam_2d/include/mrpt_bridge/vrep_conversion.h b/mrpt_graphslam_2d/include/mrpt_bridge/vrep_conversion.h deleted file mode 100644 index 9050777..0000000 --- a/mrpt_graphslam_2d/include/mrpt_bridge/vrep_conversion.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef VREP_CONVERSION_H -#define VREP_CONVERSION_H - -#include -#include - -#include - -#include "extApi.h" - -namespace mrpt -{ -namespace obs -{ -class CObservation2DRangeScan; -class CObservationOdometry; -} -} - -namespace mrpt -{ -namespace poses -{ -class CPose3D; -} -} -namespace vrep_bridge -{ bool convert(const float _range[], const simxFloat& _maxScanDistance, - const simxFloat& _scanningAngle,const mrpt::poses::CPose3D& _pose,mrpt::obs::CObservation2DRangeScan& _obj); - - bool convert(const float _position[3], const float _quaternion[4],mrpt::poses::CPose3D& _pose); - - bool convert(const mrpt::poses::CPose3D& _pose3D,const float _vel[3], const float _angularvelocity[3], mrpt::obs::CObservationOdometry& _obj); -} - -#endif diff --git a/mrpt_graphslam_2d/remoteApi/remoteApi_test.cpp b/mrpt_graphslam_2d/remoteApi/remoteApi_test.cpp index 25b8e33..a949ab6 100644 --- a/mrpt_graphslam_2d/remoteApi/remoteApi_test.cpp +++ b/mrpt_graphslam_2d/remoteApi/remoteApi_test.cpp @@ -1,12 +1,13 @@ #include #include #include -#include +#include #include #include #include -#include "mrpt_bridge/vrep_conversion.h" -extern "C" { +#include "../../conversions/include/mrpt_bridge/vrep_conversion.h" +extern "C" +{ #include "extApi.h" } using namespace mrpt::obs; @@ -14,22 +15,28 @@ using namespace mrpt::poses; using namespace vrep_bridge; int main() -{ - simxFinish(-1); //close all existing connections. - +{ /** + *This is a sample VREP remote api which fetches the following data from the simulator + *- object handle[] -> Using simxGetObjectHandle. + *- object position -> Using simxGetObjectPosition + *- object velocity -> Using simxGetObjectVelocity + *- object quaternion -> Using simxGetObjectQuaternion + * + * This api also makes use of the conversion methods defined in ../../conversions/vrep_conversion.cpp + */ + simxFinish(-1);//close all existing connections. int clientID=simxStart((simxChar*)"127.0.0.1",19997,true,true,2000,5); simxInt handle; simxFloat position[3],scanningAngle,maxScanDistance; simxUChar* dataSignal; int dataSignalSize,dataCount; simxFloat quaternion[4],vel[3],angularvel[3]; - if (clientID!=-1) { printf("Simulation started \n"); - - while (simxGetConnectionId(clientID)!=-1){ - simxGetObjectHandle(clientID,"fastHokuyo",&handle,simx_opmode_streaming); //get object handlesimxGetObjectPosition(clientID,handle,-1,position,simx_opmode_streaming); // get object position + while (simxGetConnectionId(clientID)!=-1) + { + simxGetObjectHandle(clientID,"fastHokuyo",&handle,simx_opmode_streaming);//get object handlesimxGetObjectPosition(clientID,handle,-1,position,simx_opmode_streaming); // get object position simxGetObjectPosition(clientID,handle,-1,position,simx_opmode_streaming); // get object orientation(returns euler angles) simxGetObjectQuaternion(clientID,handle,-1,quaternion,simx_opmode_streaming); simxGetStringSignal(clientID,"measuredDataAtThisTime",&dataSignal,&dataSignalSize,simx_opmode_streaming); @@ -37,29 +44,26 @@ int main() simxGetFloatSignal(clientID,"maxScanDistance",&maxScanDistance,simx_opmode_streaming); simxGetObjectVelocity(clientID,handle,vel,angularvel,simx_opmode_streaming); CPose3D sensor_pose; - bool pose_convert = convert(position,quaternion,sensor_pose); - if (simxGetStringSignal(clientID,"measuredDataAtThisTime",&dataSignal,&dataSignalSize,simx_opmode_buffer)==simx_error_noerror) { dataCount=dataSignalSize/12; float range[dataCount]; - for (int i=0;i -#include -#include -#include -#include -#include "mrpt_bridge/vrep_conversion.h" -#include -#include - - -extern "C" { - #include "extApi.h" -} - -using namespace mrpt::obs; -using namespace mrpt::poses; -using namespace mrpt::math; - -namespace vrep_bridge { - bool convert(const float _range[], const simxFloat& _maxScanDistance, - const simxFloat& _scanningAngle,const CPose3D& _pose,CObservation2DRangeScan& _obj){ - - int _dataCount = sizeof(_range)/sizeof(_range[0]); - _obj.rightToLeft = true; - _obj.aperture = _scanningAngle; - _obj.maxRange = _maxScanDistance; - _obj.sensorPose = _pose; - const double ang_step = _obj.aperture / (_dataCount - 1); - const double inv_ang_step = (_dataCount - 1) / _obj.aperture; - _obj.resizeScan(_dataCount); - for (std::size_t i = 0; i < _dataCount; i++) - { - int j = inv_ang_step * ang_step * i; - if (j < 0) - j += _dataCount; - else if (j >= _dataCount) - j -= _dataCount; - - const float r = _range[j]; - _obj.setScanRange(i, r); - - const bool r_valid = ((_obj.scan[i] < (_maxScanDistance * 0.95)) && (_obj.scan[i] > 0)); - _obj.setScanRangeValidity(i, r_valid); - } - return true; - - } - - bool convert(const float _position[3], const float _quaternion[4], CPose3D& _pose){ - if((mrpt::square(_quaternion[0])+mrpt::square(_quaternion[1])+mrpt::square(_quaternion[2])+mrpt::square(_quaternion[3]))-1 <1e-3){ - _pose = CPose3D((double)_position[0],(double)_position[1],(double)_position[2]); - } - else{ - CQuaternionDouble q = mrpt::math::CQuaternionDouble((double)_quaternion[0],(double)_quaternion[1] - ,(double)_quaternion[2],(double)_quaternion[3]); - _pose = CPose3D(q,(double)_position[0],(double)_position[1],(double)_position[2]); - } - return true; - } - - bool convert(const CPose3D& _pose3D, const float _vel[3], const float _angularvelocity[3],CObservationOdometry& _obj){ - CPose2D _pose2D = CPose2D(_pose3D); - _obj.odometry = _pose2D; - _obj.hasEncodersInfo = false; - _obj.hasVelocities = true; - TTwist2D _tTwist = TTwist2D((double)_vel[0],(double)_vel[1],(double)_angularvelocity[2]); // velocity in 2D + angular velocity along z - _obj.velocityLocal = _tTwist; - return true; - } -} diff --git a/mrpt_graphslam_2d/test/convertTest.cpp b/mrpt_graphslam_2d/test/convertTest.cpp deleted file mode 100644 index f687182..0000000 --- a/mrpt_graphslam_2d/test/convertTest.cpp +++ /dev/null @@ -1,57 +0,0 @@ -#include -#include -#include -#include -#include -#define __STDC_FORMAT_MACROS -#include -#include -#include -#include "mrpt_bridge/vrep_conversion.h" -extern "C" { - #include "extApi.h" -} -using namespace mrpt::obs; -using namespace mrpt::poses; -using namespace vrep_bridge; - - -TEST(ConvertTest, CObservation2DRangeScanTest) -{ - - simxFloat position[3] ={1.00,1.00,1.00} ,scanningAngle = 4.18 ,maxScanDistance = 5; - simxUChar* dataSignal; - float range[] = {2.00,2.00,1.00}; - simxFloat quaternion[4] = {0.5,0.5,0.5,0.5}; - CPose3D sensor_pose; - bool res = convert(position,quaternion,sensor_pose); - CObservation2DRangeScan obj; - EXPECT_TRUE(convert(range,maxScanDistance,scanningAngle,sensor_pose,obj)); - EXPECT_TRUE(obj.rightToLeft); - EXPECT_EQ(obj.aperture, scanningAngle); - EXPECT_EQ(obj.maxRange,maxScanDistance); - EXPECT_EQ(obj.sensorPose,sensor_pose); -} - -TEST(ConvertTest,CPose3DTest){ - simxFloat position[3] ={1.00,1.00,1.00}; - simxFloat quaternion[4] = {0.5,0.5,0.5,0.5}; - CPose3D pose; - EXPECT_TRUE(convert(position,quaternion,pose)); - float pitch = asin(-2*((quaternion[0]*quaternion[2])-(quaternion[1]*quaternion[3]))); - EXPECT_EQ((double)pitch,pose.pitch()); -} - -TEST(ConvertTest,CObservationOdometryTest){ - simxFloat position[3] ={1.00,1.00,1.00}; - simxFloat quaternion[4] = {0.5,0.5,0.5,0.5}; - simxFloat vel[3] ={1.00,1.00,1.00}; - simxFloat ang_vel[4] = {0.5,0.5,0.5}; - CObservationOdometry odometry; - CPose3D pose; - bool res = convert(position,quaternion,pose); - CPose2D pose_2D = CPose2D(pose); - EXPECT_TRUE(convert(pose,vel,ang_vel,odometry)); - EXPECT_TRUE(odometry.hasVelocities); - EXPECT_EQ(pose_2D,odometry.odometry); -} \ No newline at end of file diff --git a/scenes/vrep_laserscanner.ttt b/scenes/vrep_laserscanner.ttt new file mode 100755 index 0000000000000000000000000000000000000000..4851b5f89239ece0884bf96af0b70929414246f4 GIT binary patch literal 309084 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

BZ|Of;mfnr1+7(QjhE< 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≫MNqyno;GIUMp6UG->)s{zakiTG^6Sw(UDu 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 Mp}cMDis Date: Tue, 29 May 2018 18:01:12 +0530 Subject: [PATCH 07/11] Remove variable prefix --- .../include/mrpt_bridge/vrep_conversion.h | 8 +-- conversions/vrep_conversion.cpp | 58 +++++++++---------- 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/conversions/include/mrpt_bridge/vrep_conversion.h b/conversions/include/mrpt_bridge/vrep_conversion.h index c0374f7..5771ec9 100644 --- a/conversions/include/mrpt_bridge/vrep_conversion.h +++ b/conversions/include/mrpt_bridge/vrep_conversion.h @@ -17,10 +17,10 @@ namespace mrpt::poses namespace vrep_bridge { - bool convert(const float _range[], const int _dataCount, const float& _maxScanDistance, - const float& _scanningAngle,const mrpt::poses::CPose3D& _pose,mrpt::obs::CObservation2DRangeScan& _obj); - bool convert(const float _position[3], const float _quaternion[4],mrpt::poses::CPose3D& _pose); - bool convert(const mrpt::poses::CPose3D& _pose3D,const float _vel[3], const float _angularvelocity[3], mrpt::obs::CObservationOdometry& _obj); + bool convert(const float range[], const int dataCount, const float& maxScanDistance, + const float& scanningAngle,const mrpt::poses::CPose3D& pose,mrpt::obs::CObservation2DRangeScan& obj); + bool convert(const float position[3], const float quaternion[4],mrpt::poses::CPose3D& pose); + bool convert(const mrpt::poses::CPose3D& pose3D,const float vel[3], const float angularvelocity[3], mrpt::obs::CObservationOdometry& obj); } #endif diff --git a/conversions/vrep_conversion.cpp b/conversions/vrep_conversion.cpp index da1356f..06db3cf 100644 --- a/conversions/vrep_conversion.cpp +++ b/conversions/vrep_conversion.cpp @@ -19,26 +19,26 @@ namespace vrep_bridge *- _maxScanDistance,_scanningAngle -> This is a simulation parameter and can be changed in the simulator. Fetched from VREP using simxGetFloatSignal. *- _pose -> Sensor Pose. */ - bool convert(const float _range[], const int _dataCount, const float& _maxScanDistance, - const float& _scanningAngle,const CPose3D& _pose,CObservation2DRangeScan& _obj) - { _obj.rightToLeft = true; - _obj.aperture = _scanningAngle; - _obj.maxRange = _maxScanDistance; - _obj.sensorPose = _pose; - const double ang_step = _obj.aperture / (_dataCount - 1); - const double inv_ang_step = (_dataCount - 1) / _obj.aperture; - _obj.resizeScan(_dataCount); - for (std::size_t i = 0; i < _dataCount; i++) + bool convert(const float range[], const int dataCount, const float& maxScanDistance, + const float& scanningAngle,const CPose3D& pose,CObservation2DRangeScan& obj) + { obj.rightToLeft = true; + obj.aperture = scanningAngle; + obj.maxRange = maxScanDistance; + obj.sensorPose = pose; + const double ang_step = obj.aperture / (dataCount - 1); + const double inv_ang_step = (dataCount - 1) / obj.aperture; + obj.resizeScan(dataCount); + for (std::size_t i = 0; i < dataCount; i++) { int j = inv_ang_step * ang_step * i; if (j < 0) - j += _dataCount; + j += dataCount; else - j -= _dataCount; - const float r = _range[j]; - _obj.setScanRange(i, r); - const bool r_valid = ((_obj.scan[i] < (_maxScanDistance * 0.95)) && (_obj.scan[i] > 0)); - _obj.setScanRangeValidity(i, r_valid); + j -= dataCount; + const float r = range[j]; + obj.setScanRange(i, r); + const bool r_valid = ((obj.scan[i] < (maxScanDistance * 0.95)) && (obj.scan[i] > 0)); + obj.setScanRangeValidity(i, r_valid); } return true; } @@ -49,17 +49,17 @@ namespace vrep_bridge * * Only position array is used for conversion to CPose3D in case _quaternion vector cannot be converted to CQuaternionDouble class */ - bool convert(const float _position[3], const float _quaternion[4], CPose3D& _pose) + bool convert(const float position[3], const float quaternion[4], CPose3D& pose) { - if((mrpt::square(_quaternion[0])+mrpt::square(_quaternion[1])+mrpt::square(_quaternion[2])+mrpt::square(_quaternion[3]))-1 <1e-3) + if((mrpt::square(quaternion[0])+mrpt::square(quaternion[1])+mrpt::square(quaternion[2])+mrpt::square(quaternion[3]))-1 <1e-3) { - _pose = CPose3D(static_cast(_position[0]),static_cast(_position[1]),static_cast(_position[2])); + pose = CPose3D(static_cast(position[0]),static_cast(position[1]),static_cast(position[2])); } else { - CQuaternionDouble q = mrpt::math::CQuaternionDouble(static_cast(_quaternion[0]),static_cast(_quaternion[1]) - ,static_cast(_quaternion[2]),static_cast(_quaternion[3])); - _pose = CPose3D(q,static_cast(_position[0]),static_cast(_position[1]),static_cast(_position[2])); + CQuaternionDouble q = mrpt::math::CQuaternionDouble(static_cast(quaternion[0]),static_cast(quaternion[1]) + ,static_cast(quaternion[2]),static_cast(quaternion[3])); + pose = CPose3D(q,static_cast(position[0]),static_cast(position[1]),static_cast(position[2])); } return true; } @@ -69,14 +69,14 @@ namespace vrep_bridge *- _vel[3] -> Contains x,y,z velocity value of the sensor. *- _angularvelocity[3] -> Contains angular velocity across x,y,z axis. */ - bool convert(const CPose3D& _pose3D, const float _vel[3], const float _angularvelocity[3],CObservationOdometry& _obj) + bool convert(const CPose3D& pose3D, const float vel[3], const float angularvelocity[3],CObservationOdometry& obj) { - CPose2D _pose2D = CPose2D(_pose3D); - _obj.odometry = _pose2D; - _obj.hasEncodersInfo = false; - _obj.hasVelocities = true; - TTwist2D _tTwist = TTwist2D(static_cast(_vel[0]),static_cast(_vel[1]),static_cast(_angularvelocity[2])); // velocity in 2D + angular velocity along z - _obj.velocityLocal = _tTwist; + CPose2D pose2D = CPose2D(pose3D); + obj.odometry = pose2D; + obj.hasEncodersInfo = false; + obj.hasVelocities = true; + TTwist2D tTwist = TTwist2D(static_cast(vel[0]),static_cast(vel[1]),static_cast(angularvelocity[2])); // velocity in 2D + angular velocity along z + obj.velocityLocal = tTwist; return true; } } From 6eef707903c3b440c2aeffc2a4109a9df153524a Mon Sep 17 00:00:00 2001 From: Shubham Kumar Date: Thu, 31 May 2018 00:18:54 +0530 Subject: [PATCH 08/11] Test the convert functions to data fetched from VREP --- conversions/CMakeLists.txt | 15 ++--- .../{mrpt_bridge => }/vrep_conversion.h | 0 conversions/test/convertTest.cpp | 67 +++++++++++++++---- conversions/vrep_conversion.cpp | 43 ++++++------ mrpt_graphslam_2d/CMakeLists.txt | 16 +---- .../remoteApi/remoteApi_test.cpp | 8 +-- 6 files changed, 89 insertions(+), 60 deletions(-) rename conversions/include/{mrpt_bridge => }/vrep_conversion.h (100%) diff --git a/conversions/CMakeLists.txt b/conversions/CMakeLists.txt index 0ed373d..853102d 100644 --- a/conversions/CMakeLists.txt +++ b/conversions/CMakeLists.txt @@ -6,16 +6,11 @@ set(CONVERT_TEST_NAME mrpt_vrep_bridge_conversions_test) if (BUILD_TESTING) set(convertTest_sources - include/mrpt_bridge/vrep_conversion.h - vrep_conversion.cpp - test/runTests.cpp - test/convertTest.cpp + include/vrep_conversion.h vrep_conversion.cpp test/runTests.cpp test/convertTest.cpp ) add_executable(${CONVERT_TEST_NAME} ${convertTest_sources}) target_link_libraries(${CONVERT_TEST_NAME} - gtest - pthread - ${MRPT_LIBS} + gtest pthread ${MRPT_LIBS} ) set_target_properties(${CONVERT_TEST_NAME} PROPERTIES @@ -26,12 +21,10 @@ if (BUILD_TESTING) endif() set (SOURCES - include/mrpt_bridge/vrep_conversion.h - vrep_conversion.cpp + include/vrep_conversion.h vrep_conversion.cpp ) include_directories (include) add_library (conversion_lib SHARED ${SOURCES}) target_link_libraries( - conversion_lib - ${MRPT_LIBS} + conversion_lib ${MRPT_LIBS} ) \ No newline at end of file diff --git a/conversions/include/mrpt_bridge/vrep_conversion.h b/conversions/include/vrep_conversion.h similarity index 100% rename from conversions/include/mrpt_bridge/vrep_conversion.h rename to conversions/include/vrep_conversion.h diff --git a/conversions/test/convertTest.cpp b/conversions/test/convertTest.cpp index ff1a18c..ad992f9 100644 --- a/conversions/test/convertTest.cpp +++ b/conversions/test/convertTest.cpp @@ -3,10 +3,10 @@ #include #include #include -#include -#include -#include -#include "mrpt_bridge/vrep_conversion.h" +#include "mrpt/obs/CObservation2DRangeScan.h" +#include "mrpt/obs/CObservationOdometry.h" +#include "mrpt/poses/CPose3D.h" +#include "vrep_conversion.h" using namespace mrpt::obs; using namespace mrpt::poses; using namespace vrep_bridge; @@ -20,10 +20,53 @@ using namespace vrep_bridge; */ TEST(ConvertTest, CObservation2DRangeScanTest) { - float position[3] ={1.00,1.00,1.00} ,scanningAngle = 4.18 ,maxScanDistance = 5; - float range[] = {2.00,2.00,1.00}; - int dataCount = 3; - float quaternion[4] = {0.5,0.5,0.5,0.5}; + float position[3] ={0.175f,0.00f,0.035f} ,scanningAngle = 4.1867f ,maxScanDistance = 5.00f; + float range[] = + { + 0.522596f ,0.520694f ,0.5189f ,0.516002f ,0.515378f ,0.514868f ,0.512759f ,0.513314f ,0.511191f ,0.512639f , + 0.51111f ,0.512957f ,0.512058f ,0.515077f ,0.514384f ,0.514165f ,0.518676f ,0.518822f ,0.519768f ,0.52625f , + 0.528463f ,0.530869f ,0.534459f ,0.552093f ,0.514051f ,0.51159f ,0.50079f ,0.494321f ,0.490789f ,0.488556f , + 0.485548f ,0.483604f ,0.481487f ,0.480994f ,0.480249f ,0.478227f ,0.478654f ,0.478947f ,0.477009f ,0.478284f , + 0.479595f ,0.477731f ,0.479953f ,0.482361f ,0.480562f ,0.484045f ,0.482289f ,0.486024f ,0.491505f ,0.489796f , + 0.496636f ,0.494958f ,0.50294f ,0.523664f ,0.521971f ,0.463143f ,0.462066f ,0.44504f ,0.444043f ,0.436001f , + 0.435061f ,0.429915f ,0.429025f ,0.425276f ,0.424431f ,0.422605f ,0.4218f ,0.420262f ,0.419496f ,0.418933f , + 0.418204f ,0.418977f ,0.418282f ,0.418851f ,0.41819f ,0.417546f ,0.419639f ,0.419027f ,0.421455f ,0.420873f , + 0.423868f ,0.423317f ,0.427758f ,0.427235f ,0.432961f ,0.432465f ,0.439457f ,0.438988f ,0.45503f ,0.45458f , + 0.411491f ,0.41146f ,0.400607f ,0.400607f ,0.400622f ,0.393857f ,0.393901f ,0.38893f ,0.389004f ,0.385895f , + 0.385997f ,0.383287f ,0.383418f ,0.38166f ,0.381818f ,0.381992f ,0.380751f ,0.380953f ,0.380026f ,0.380256f , + 0.38067f ,0.38093f ,0.38204f ,0.38233f ,0.383886f ,0.384206f ,0.384542f ,0.387214f ,0.387583f ,0.39055f , + 0.390952f ,0.39616f ,0.396598f ,0.40411f ,0.404589f ,0.418109f ,0.418637f ,0.385371f ,0.386406f ,0.375865f , + 0.376908f ,0.370591f ,0.371654f ,0.366174f ,0.361973f ,0.363061f ,0.359515f ,0.360629f ,0.357786f ,0.35893f , + 0.356348f ,0.354518f ,0.355702f ,0.353672f ,0.354889f ,0.35391f ,0.355163f ,0.354233f ,0.353274f ,0.354579f , + 0.354433f ,0.354312f ,0.355676f ,0.355701f ,0.357108f ,0.357816f ,0.358547f ,0.360023f ,0.361401f ,0.363093f , + 0.364649f ,0.367767f ,0.370789f ,0.372441f ,0.377908f ,0.386399f ,0.390203f ,0.383448f ,0.378072f ,0.374658f , + 0.371442f ,0.369523f ,0.36294f ,0.361983f ,0.361103f ,0.360299f ,0.359571f ,0.355979f ,0.355883f ,0.355851f , + 0.35292f ,0.353389f ,0.353917f ,0.351983f ,0.352645f ,0.351138f ,0.352226f ,0.351245f ,0.35246f ,0.351627f , + 0.353249f ,0.353141f ,0.353116f ,0.354935f ,0.355285f ,0.356074f ,0.358392f ,0.359699f ,0.361776f ,0.364492f , + 0.364054f ,0.367074f ,0.371484f ,0.371965f ,0.377694f ,0.379585f ,0.39053f ,0.406653f ,0.406642f ,0.39847f , + 0.393974f ,0.389529f ,0.386683f ,0.383892f ,0.382122f ,0.380322f ,0.378562f ,0.377526f ,0.376507f ,0.375526f , + 0.373195f ,0.372283f ,0.372216f ,0.371937f ,0.371696f ,0.371887f ,0.372259f ,0.372676f ,0.370578f ,0.371062f , + 0.372221f ,0.373365f ,0.374565f ,0.372583f ,0.374369f ,0.376379f ,0.378465f ,0.381356f ,0.379459f ,0.382617f , + 0.385892f ,0.384044f ,0.389294f ,0.395425f ,0.403015f ,0.401181f ,0.416441f ,0.359556f ,0.358512f ,0.347937f , + 0.346959f ,0.340757f ,0.339829f ,0.336336f ,0.335451f ,0.332241f ,0.331396f ,0.329413f ,0.328604f ,0.326725f , + 0.325805f ,0.325047f ,0.324599f ,0.323872f ,0.323844f ,0.323146f ,0.323147f ,0.322477f ,0.323466f ,0.322823f , + 0.32367f ,0.323053f ,0.32456f ,0.323969f ,0.325721f ,0.325154f ,0.326954f ,0.326412f ,0.329684f ,0.329164f , + 0.328657f ,0.331589f ,0.331105f ,0.335941f ,0.335478f ,0.341327f ,0.340883f ,0.347614f ,0.347189f ,0.365663f , + 0.365245f ,0.409723f ,0.40977f ,0.381707f ,0.381779f ,0.374049f ,0.374148f ,0.367739f ,0.367864f ,0.363015f , + 0.363166f ,0.363331f ,0.360174f ,0.360365f ,0.35757f ,0.357786f ,0.355923f ,0.356166f ,0.354637f ,0.354906f , + 0.354103f ,0.354399f ,0.354708f ,0.354155f ,0.354492f ,0.354687f ,0.355052f ,0.356233f ,0.356627f ,0.357861f , + 0.358285f ,0.360907f ,0.361363f ,0.363851f ,0.364339f ,0.369091f ,0.369615f ,0.376163f ,0.376727f ,0.377308f , + 0.388464f ,0.389094f ,0.45283f ,0.454046f ,0.427938f ,0.429126f ,0.421014f ,0.422221f ,0.415221f ,0.409613f , + 0.410844f ,0.407127f ,0.408389f ,0.404664f ,0.405957f ,0.403514f ,0.400878f ,0.402217f ,0.40078f ,0.402159f , + 0.40078f ,0.402199f ,0.401146f ,0.400661f ,0.40214f ,0.401625f ,0.40204f ,0.403587f ,0.403612f ,0.405208f , + 0.406656f ,0.408131f ,0.409811f ,0.412816f ,0.415607f ,0.417388f ,0.423047f ,0.431611f ,0.433534f ,0.477153f , + 0.470957f ,0.46552f ,0.462042f ,0.458759f ,0.456723f ,0.454801f ,0.453091f ,0.45212f ,0.446713f ,0.446509f , + 0.446379f ,0.446323f ,0.446342f ,0.443543f ,0.444175f ,0.444877f ,0.442981f ,0.444239f ,0.445565f ,0.444401f , + 0.446282f ,0.446131f ,0.448157f ,0.44866f ,0.451289f ,0.452373f ,0.455437f ,0.457836f ,0.460719f ,0.465214f , + 0.471546f ,0.485626f , + }; + int dataCount = 402; + float quaternion[4] = {-0.000028f,0.00f,0.00f,1.00f}; CPose3D sensor_pose; bool res = convert(position,quaternion,sensor_pose); CObservation2DRangeScan obj; @@ -39,8 +82,8 @@ TEST(ConvertTest, CObservation2DRangeScanTest) */ TEST(ConvertTest,CPose3DTest) { - float position[3] ={1.00,1.00,1.00}; - float quaternion[4] = {0.5,0.5,0.5,0.5}; + float position[3] ={0.175f,0.00f,0.035f}; + float quaternion[4] = {-0.000028f,0.00f,0.00f,1.00f}; float yaw,pitch,roll; if((mrpt::square(quaternion[0])+mrpt::square(quaternion[1])+mrpt::square(quaternion[2])+mrpt::square(quaternion[3]))-1 <1e-3) {// Check to ensure intialization of data is normalized @@ -70,8 +113,8 @@ TEST(ConvertTest,CPose3DTest) */ TEST(ConvertTest,CObservationOdometryTest) { - float position[3] ={1.00,1.00,1.00}; - float quaternion[4] = {0.5,0.5,0.5,0.5}; + float position[3] ={0.175f,0.00f,0.035f}; + float quaternion[4] = {-0.000028f,0.00f,0.00f,1.00f}; float vel[3] ={1.00,1.00,1.00}; float ang_vel[4] = {0.5,0.5,0.5}; CObservationOdometry odometry; diff --git a/conversions/vrep_conversion.cpp b/conversions/vrep_conversion.cpp index 06db3cf..71dbf46 100644 --- a/conversions/vrep_conversion.cpp +++ b/conversions/vrep_conversion.cpp @@ -2,10 +2,10 @@ #include #include #include -#include -#include "mrpt_bridge/vrep_conversion.h" -#include -#include +#include "mrpt/obs/CObservation2DRangeScan.h" +#include "vrep_conversion.h" +#include "mrpt/math/CQuaternion.h" +#include "mrpt/obs/CObservationOdometry.h" using namespace mrpt::obs; using namespace mrpt::poses; @@ -13,14 +13,16 @@ using namespace mrpt::math; namespace vrep_bridge { /** - *This method converts VREP laser scans into a CObservation2DRangeScan class object. It has the following arguments: - *- _range[] -> This array contains all the laser scan measurements(distances). - *- _dataCount -> Contains the size of _range[]. - *- _maxScanDistance,_scanningAngle -> This is a simulation parameter and can be changed in the simulator. Fetched from VREP using simxGetFloatSignal. - *- _pose -> Sensor Pose. + *Converts VREP laser scans into a CObservation2DRangeScan class object. It has the following arguments: + *@param[out] obj Converted CObservation2DRangeScan object. + *@param[in] _range[] This array contains all the laser scan measurements(distances). + *@param[in] _dataCount Contains the size of _range[]. + *@param[in] _maxScanDistance Contains maximum scan distance of scanner(simulation parameter) + *@param[in] _scanningAngle Contains scanning angle of scanner(simulation parameter) + *@param[in] _pose Sensor Pose. */ bool convert(const float range[], const int dataCount, const float& maxScanDistance, - const float& scanningAngle,const CPose3D& pose,CObservation2DRangeScan& obj) + const float& scanningAngle,const mrpt::poses::CPose3D& pose,mrpt::obs::CObservation2DRangeScan& obj) { obj.rightToLeft = true; obj.aperture = scanningAngle; obj.maxRange = maxScanDistance; @@ -43,13 +45,13 @@ namespace vrep_bridge return true; } /** - *This method converts sensor position,quaternion into a CPose3D class object. It has the following arguments: - *- _position[] -> This array contains x,y,z coordinates of the sensor. - *- _quaternion -> Contains the quaternion vector of the sensor. - * + *Converts sensor position,quaternion into a CPose3D class object. It has the following arguments: + *@param[out] pose Converted CPose3D object. + *@param[in] position[3] This array contains x,y,z coordinates of the sensor. + *@param[in] quaternion[4] Contains the quaternion vector of the sensor. * Only position array is used for conversion to CPose3D in case _quaternion vector cannot be converted to CQuaternionDouble class */ - bool convert(const float position[3], const float quaternion[4], CPose3D& pose) + bool convert(const float position[3], const float quaternion[4], mrpt::poses::CPose3D& pose) { if((mrpt::square(quaternion[0])+mrpt::square(quaternion[1])+mrpt::square(quaternion[2])+mrpt::square(quaternion[3]))-1 <1e-3) { @@ -64,12 +66,13 @@ namespace vrep_bridge return true; } /** - *This method converts pose,velocity and angular velocity value of an object into a CObservationOdometry class object. It has the following arguments: - *- _pose3D -> Contains sensor pose.. - *- _vel[3] -> Contains x,y,z velocity value of the sensor. - *- _angularvelocity[3] -> Contains angular velocity across x,y,z axis. + *Converts pose,velocity and angular velocity value of an object into a CObservationOdometry class object. It has the following arguments: + *@param[out] obj Contains the converted CObservationOdometry object. + *@param[in] _pose3D Contains sensor pose.. + *@param[in] _vel[3] Contains x,y,z velocity value of the sensor. + *@param[in] _angularvelocity[3] Contains angular velocity across x,y,z axis. */ - bool convert(const CPose3D& pose3D, const float vel[3], const float angularvelocity[3],CObservationOdometry& obj) + bool convert(const mrpt::poses::CPose3D& pose3D, const float vel[3], const float angularvelocity[3],mrpt::obs::CObservationOdometry& obj) { CPose2D pose2D = CPose2D(pose3D); obj.odometry = pose2D; diff --git a/mrpt_graphslam_2d/CMakeLists.txt b/mrpt_graphslam_2d/CMakeLists.txt index 8dc08ff..665261c 100644 --- a/mrpt_graphslam_2d/CMakeLists.txt +++ b/mrpt_graphslam_2d/CMakeLists.txt @@ -7,8 +7,7 @@ if (BUILD_TESTING) ) add_executable(${PROJECT_TEST_NAME} ${test_sources}) target_link_libraries(${PROJECT_TEST_NAME} - gtest - pthread + gtest pthread ) set_target_properties(${PROJECT_TEST_NAME} PROPERTIES @@ -27,12 +26,7 @@ if (EXISTS "$ENV{VREP}") set (VREP_ROOT "$ENV{VREP}" CACHE "VREP root dir" STRING) set (VREP_PATH "$ENV{VREP}/programming" CACHE "The VREP build path" STRING) set (SOURCES - ${VREP_PATH}/remoteApi/extApi.h - ${VREP_PATH}/remoteApi/extApiPlatform.h - ${VREP_PATH}/include/shared_memory.h - ${VREP_PATH}/remoteApi/extApi.c - ${VREP_PATH}/common/shared_memory.c - ${VREP_PATH}/remoteApi/extApiPlatform.c + ${VREP_PATH}/remoteApi/extApi.h ${VREP_PATH}/remoteApi/extApiPlatform.h ${VREP_PATH}/include/shared_memory.h ${VREP_PATH}/remoteApi/extApi.c ${VREP_PATH}/common/shared_memory.c ${VREP_PATH}/remoteApi/extApiPlatform.c ) include_directories (${VREP_PATH}/remoteApi ${VREP_PATH}/include) add_definitions( -Dpthread ) @@ -41,11 +35,7 @@ if (EXISTS "$ENV{VREP}") add_library (test_Client SHARED ${SOURCES}) add_executable(remoteApi_test remoteApi/remoteApi_test.cpp) target_link_libraries( - remoteApi_test - test_Client - pthread - rt - conversion_lib + remoteApi_test test_Client pthread rt conversion_lib ) else() message(FATAL_ERROR "Can't detect V-REP installation. Have you exported the VREP environment variable to the corresponding path?") diff --git a/mrpt_graphslam_2d/remoteApi/remoteApi_test.cpp b/mrpt_graphslam_2d/remoteApi/remoteApi_test.cpp index a949ab6..1971db5 100644 --- a/mrpt_graphslam_2d/remoteApi/remoteApi_test.cpp +++ b/mrpt_graphslam_2d/remoteApi/remoteApi_test.cpp @@ -2,10 +2,10 @@ #include #include #include -#include -#include -#include -#include "../../conversions/include/mrpt_bridge/vrep_conversion.h" +#include "mrpt/obs/CObservation2DRangeScan.h" +#include "mrpt/obs/CObservationOdometry.h" +#include "mrpt/poses/CPose3D.h" +#include "../../conversions/include/vrep_conversion.h" extern "C" { #include "extApi.h" From 56b7818d477ec352efd50113d37cb206e6fa451a Mon Sep 17 00:00:00 2001 From: Shubham Kumar Date: Wed, 6 Jun 2018 22:54:12 +0530 Subject: [PATCH 09/11] Add additionaltests for conversion method --- CMakeLists.txt | 20 +++++++++++++++ conversions/include/vrep_conversion.h | 27 ++++++++++++++++++++- conversions/test/convertTest.cpp | 14 ++++++++--- conversions/vrep_conversion.cpp | 35 +++------------------------ mrpt_graphslam_2d/CMakeLists.txt | 29 ++++------------------ 5 files changed, 66 insertions(+), 59 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bafe15b..954ea5f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -121,3 +121,23 @@ configure_file(cmake/${PROJECT_NAME}ConfigVersion.cmake.in # TODO - How to use it configure_file(cmake/${PROJECT_NAME}ConfigVersion.hpp.in "${PROJECT_BINARY_DIR}/${PROJECT_NAME}.hpp" @ONLY) + +#V-REP Config +################################################################################ + +if (EXISTS "$ENV{VREP}") + message(STATUS "Found VREP") + set (VREP_ROOT "$ENV{VREP}" CACHE "VREP root dir" STRING) + set (VREP_PATH "$ENV{VREP}/programming" CACHE "The VREP build path" STRING) + set (VREP_SOURCES + ${VREP_PATH}/remoteApi/extApi.h ${VREP_PATH}/remoteApi/extApiPlatform.h ${VREP_PATH}/include/shared_memory.h + ${VREP_PATH}/remoteApi/extApi.c ${VREP_PATH}/common/shared_memory.c ${VREP_PATH}/remoteApi/extApiPlatform.c + ) + include_directories (${VREP_PATH}/remoteApi ${VREP_PATH}/include) + add_definitions( -Dpthread ) + add_definitions (-DNON_MATLAB_PARSING) + add_definitions (-DMAX_EXT_API_CONNECTIONS=255) + add_library (vrep_lib SHARED ${VREP_SOURCES}) +else() + message(FATAL_ERROR "Can't detect V-REP installation. Have you exported the VREP environment variable to the corresponding path?") +endif() \ No newline at end of file diff --git a/conversions/include/vrep_conversion.h b/conversions/include/vrep_conversion.h index 5771ec9..66459a1 100644 --- a/conversions/include/vrep_conversion.h +++ b/conversions/include/vrep_conversion.h @@ -16,10 +16,35 @@ namespace mrpt::poses } namespace vrep_bridge -{ +{ + /** + * Converts VREP laser scans into a CObservation2DRangeScan class object. It has the following arguments: + * @param[out] obj Converted CObservation2DRangeScan object. + * @param[in] _range[] This array contains all the laser scan measurements(distances). + * @param[in] _dataCount Contains the size of _range[]. + * @param[in] _maxScanDistance Contains maximum scan distance of scanner(simulation parameter) + * @param[in] _scanningAngle Contains scanning angle of scanner(simulation parameter) + * @param[in] _pose Sensor Pose. + */ bool convert(const float range[], const int dataCount, const float& maxScanDistance, const float& scanningAngle,const mrpt::poses::CPose3D& pose,mrpt::obs::CObservation2DRangeScan& obj); + + /** + * Converts sensor position,quaternion into a CPose3D class object. It has the following arguments: + * @param[out] pose Converted CPose3D object. + * @param[in] position[3] This array contains x,y,z coordinates of the sensor. + * @param[in] quaternion[4] Contains the quaternion vector of the sensor. + * Only position array is used for conversion to CPose3D in case _quaternion vector cannot be converted to CQuaternionDouble class + */ bool convert(const float position[3], const float quaternion[4],mrpt::poses::CPose3D& pose); + + /** + * Converts pose,velocity and angular velocity value of an object into a CObservationOdometry class object. It has the following arguments: + * @param[out] obj Contains the converted CObservationOdometry object. + * @param[in] _pose3D Contains sensor pose.. + * @param[in] _vel[3] Contains x,y,z velocity value of the sensor. + * @param[in] _angularvelocity[3] Contains angular velocity across x,y,z axis. + */ bool convert(const mrpt::poses::CPose3D& pose3D,const float vel[3], const float angularvelocity[3], mrpt::obs::CObservationOdometry& obj); } diff --git a/conversions/test/convertTest.cpp b/conversions/test/convertTest.cpp index ad992f9..b07fc7c 100644 --- a/conversions/test/convertTest.cpp +++ b/conversions/test/convertTest.cpp @@ -12,7 +12,7 @@ using namespace mrpt::poses; using namespace vrep_bridge; /** -*This unit test tests the CObservation2DRangeScan conversion method. It tests the following parameters of the object created with the functions parameters. +* This unit test tests the CObservation2DRangeScan conversion method. It tests the following parameters of the object created with the functions parameters. *- obj.aperture[] -> scanningAngle *- obj.maxRange -> maxScanDistance *- obj.sensorPose -> sensor_pose @@ -75,9 +75,17 @@ TEST(ConvertTest, CObservation2DRangeScanTest) EXPECT_FLOAT_EQ(obj.aperture, scanningAngle); EXPECT_FLOAT_EQ(obj.maxRange,maxScanDistance); EXPECT_EQ(obj.sensorPose,sensor_pose); + for (std::size_t i = 0; i < dataCount; i++) + { + const float r = range[i]; + const bool r_valid = ((obj.scan[i] < (maxScanDistance * 0.95)) && (obj.scan[i] > 0)); + EXPECT_FLOAT_EQ(obj.getScanRange(i),r); + EXPECT_EQ(obj.getScanRangeValidity(i),r_valid); + EXPECT_EQ(obj.getScanSize(),dataCount); + } } /** -*This unit test tests the yaw, pitch, roll values of the converted CPose3D object with the yaw,pitch,roll values calculated from the quaternion array. +* This unit test tests the yaw, pitch, roll values of the converted CPose3D object with the yaw,pitch,roll values calculated from the quaternion array. * */ TEST(ConvertTest,CPose3DTest) @@ -108,7 +116,7 @@ TEST(ConvertTest,CPose3DTest) EXPECT_DOUBLE_EQ(static_cast(pitch),pose.pitch()); } /** -*This unit test tests the pose of the converted CObservationOdometry object with the pose of the sensor calculated from the position and quaternion values recieved from the simulator. +* This unit test tests the pose of the converted CObservationOdometry object with the pose of the sensor calculated from the position and quaternion values recieved from the simulator. * */ TEST(ConvertTest,CObservationOdometryTest) diff --git a/conversions/vrep_conversion.cpp b/conversions/vrep_conversion.cpp index 71dbf46..95d18a1 100644 --- a/conversions/vrep_conversion.cpp +++ b/conversions/vrep_conversion.cpp @@ -12,45 +12,24 @@ using namespace mrpt::poses; using namespace mrpt::math; namespace vrep_bridge -{ /** - *Converts VREP laser scans into a CObservation2DRangeScan class object. It has the following arguments: - *@param[out] obj Converted CObservation2DRangeScan object. - *@param[in] _range[] This array contains all the laser scan measurements(distances). - *@param[in] _dataCount Contains the size of _range[]. - *@param[in] _maxScanDistance Contains maximum scan distance of scanner(simulation parameter) - *@param[in] _scanningAngle Contains scanning angle of scanner(simulation parameter) - *@param[in] _pose Sensor Pose. - */ +{ bool convert(const float range[], const int dataCount, const float& maxScanDistance, const float& scanningAngle,const mrpt::poses::CPose3D& pose,mrpt::obs::CObservation2DRangeScan& obj) { obj.rightToLeft = true; obj.aperture = scanningAngle; obj.maxRange = maxScanDistance; obj.sensorPose = pose; - const double ang_step = obj.aperture / (dataCount - 1); - const double inv_ang_step = (dataCount - 1) / obj.aperture; obj.resizeScan(dataCount); for (std::size_t i = 0; i < dataCount; i++) { - int j = inv_ang_step * ang_step * i; - if (j < 0) - j += dataCount; - else - j -= dataCount; - const float r = range[j]; + const float r = range[i]; obj.setScanRange(i, r); const bool r_valid = ((obj.scan[i] < (maxScanDistance * 0.95)) && (obj.scan[i] > 0)); obj.setScanRangeValidity(i, r_valid); } return true; } - /** - *Converts sensor position,quaternion into a CPose3D class object. It has the following arguments: - *@param[out] pose Converted CPose3D object. - *@param[in] position[3] This array contains x,y,z coordinates of the sensor. - *@param[in] quaternion[4] Contains the quaternion vector of the sensor. - * Only position array is used for conversion to CPose3D in case _quaternion vector cannot be converted to CQuaternionDouble class - */ + bool convert(const float position[3], const float quaternion[4], mrpt::poses::CPose3D& pose) { if((mrpt::square(quaternion[0])+mrpt::square(quaternion[1])+mrpt::square(quaternion[2])+mrpt::square(quaternion[3]))-1 <1e-3) @@ -65,13 +44,7 @@ namespace vrep_bridge } return true; } - /** - *Converts pose,velocity and angular velocity value of an object into a CObservationOdometry class object. It has the following arguments: - *@param[out] obj Contains the converted CObservationOdometry object. - *@param[in] _pose3D Contains sensor pose.. - *@param[in] _vel[3] Contains x,y,z velocity value of the sensor. - *@param[in] _angularvelocity[3] Contains angular velocity across x,y,z axis. - */ + bool convert(const mrpt::poses::CPose3D& pose3D, const float vel[3], const float angularvelocity[3],mrpt::obs::CObservationOdometry& obj) { CPose2D pose2D = CPose2D(pose3D); diff --git a/mrpt_graphslam_2d/CMakeLists.txt b/mrpt_graphslam_2d/CMakeLists.txt index 665261c..8bcac47 100644 --- a/mrpt_graphslam_2d/CMakeLists.txt +++ b/mrpt_graphslam_2d/CMakeLists.txt @@ -17,27 +17,8 @@ if (BUILD_TESTING) ${test_output_directory}/${PROJECT_TEST_NAME}) endif() - -#V-REP Config -################################################################################ - -if (EXISTS "$ENV{VREP}") - message(STATUS "Found VREP") - set (VREP_ROOT "$ENV{VREP}" CACHE "VREP root dir" STRING) - set (VREP_PATH "$ENV{VREP}/programming" CACHE "The VREP build path" STRING) - set (SOURCES - ${VREP_PATH}/remoteApi/extApi.h ${VREP_PATH}/remoteApi/extApiPlatform.h ${VREP_PATH}/include/shared_memory.h ${VREP_PATH}/remoteApi/extApi.c ${VREP_PATH}/common/shared_memory.c ${VREP_PATH}/remoteApi/extApiPlatform.c - ) - include_directories (${VREP_PATH}/remoteApi ${VREP_PATH}/include) - add_definitions( -Dpthread ) - add_definitions (-DNON_MATLAB_PARSING) - add_definitions (-DMAX_EXT_API_CONNECTIONS=255) - add_library (test_Client SHARED ${SOURCES}) - add_executable(remoteApi_test remoteApi/remoteApi_test.cpp) - target_link_libraries( - remoteApi_test test_Client pthread rt conversion_lib - ) -else() - message(FATAL_ERROR "Can't detect V-REP installation. Have you exported the VREP environment variable to the corresponding path?") - -endif() +add_definitions (-DNON_MATLAB_PARSING) +add_definitions (-DMAX_EXT_API_CONNECTIONS=255) +include_directories (${VREP_PATH}/remoteApi ${VREP_PATH}/include) +add_executable(remoteApi_test remoteApi/remoteApi_test.cpp) +target_link_libraries(remoteApi_test vrep_lib pthread rt conversion_lib) \ No newline at end of file From d25b982836958d94a0d5a0fa4e6573b0fca45a86 Mon Sep 17 00:00:00 2001 From: Shubham Kumar Date: Fri, 8 Jun 2018 14:53:35 +0530 Subject: [PATCH 10/11] Add vrep shared library code --- CMakeLists.txt | 42 +++++++++++++++++++------------------- conversions/CMakeLists.txt | 26 ++++++++++------------- 2 files changed, 32 insertions(+), 36 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 954ea5f..2ff5a01 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,6 +61,26 @@ set(PROJECT_ROOT ${CMAKE_CURRENT_SOURCE_DIR}) set (CMAKE_C_STANDARD 99) # Require C99 set (CMAKE_CXX_STANDARD 17) # Require C++17 +#V-REP Config +################################################################################ + +if (EXISTS "$ENV{VREP}") + message(STATUS "Found VREP") + set (VREP_ROOT "$ENV{VREP}" CACHE "VREP root dir" STRING) + set (VREP_PATH "$ENV{VREP}/programming" CACHE "The VREP build path" STRING) + set (VREP_SOURCES + ${VREP_PATH}/remoteApi/extApi.h ${VREP_PATH}/remoteApi/extApiPlatform.h ${VREP_PATH}/include/shared_memory.h + ${VREP_PATH}/remoteApi/extApi.c ${VREP_PATH}/common/shared_memory.c ${VREP_PATH}/remoteApi/extApiPlatform.c + ) + include_directories (${VREP_PATH}/remoteApi ${VREP_PATH}/include) + add_definitions( -Dpthread ) + add_definitions (-DNON_MATLAB_PARSING) + add_definitions (-DMAX_EXT_API_CONNECTIONS=255) + add_library (vrep_lib SHARED ${VREP_SOURCES}) +else() + message(FATAL_ERROR "Can't detect V-REP installation. Have you exported the VREP environment variable to the corresponding path?") +endif() + #MRPT Lib ################################################################################ find_package(MRPT REQUIRED graphslam) @@ -120,24 +140,4 @@ configure_file(cmake/${PROJECT_NAME}ConfigVersion.cmake.in "${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" @ONLY) # TODO - How to use it configure_file(cmake/${PROJECT_NAME}ConfigVersion.hpp.in - "${PROJECT_BINARY_DIR}/${PROJECT_NAME}.hpp" @ONLY) - -#V-REP Config -################################################################################ - -if (EXISTS "$ENV{VREP}") - message(STATUS "Found VREP") - set (VREP_ROOT "$ENV{VREP}" CACHE "VREP root dir" STRING) - set (VREP_PATH "$ENV{VREP}/programming" CACHE "The VREP build path" STRING) - set (VREP_SOURCES - ${VREP_PATH}/remoteApi/extApi.h ${VREP_PATH}/remoteApi/extApiPlatform.h ${VREP_PATH}/include/shared_memory.h - ${VREP_PATH}/remoteApi/extApi.c ${VREP_PATH}/common/shared_memory.c ${VREP_PATH}/remoteApi/extApiPlatform.c - ) - include_directories (${VREP_PATH}/remoteApi ${VREP_PATH}/include) - add_definitions( -Dpthread ) - add_definitions (-DNON_MATLAB_PARSING) - add_definitions (-DMAX_EXT_API_CONNECTIONS=255) - add_library (vrep_lib SHARED ${VREP_SOURCES}) -else() - message(FATAL_ERROR "Can't detect V-REP installation. Have you exported the VREP environment variable to the corresponding path?") -endif() \ No newline at end of file + "${PROJECT_BINARY_DIR}/${PROJECT_NAME}.hpp" @ONLY) \ No newline at end of file diff --git a/conversions/CMakeLists.txt b/conversions/CMakeLists.txt index 853102d..c58eff2 100644 --- a/conversions/CMakeLists.txt +++ b/conversions/CMakeLists.txt @@ -5,26 +5,22 @@ set(CONVERT_TEST_NAME mrpt_vrep_bridge_conversions_test) ###################################################### if (BUILD_TESTING) - set(convertTest_sources - include/vrep_conversion.h vrep_conversion.cpp test/runTests.cpp test/convertTest.cpp - ) - add_executable(${CONVERT_TEST_NAME} ${convertTest_sources}) - target_link_libraries(${CONVERT_TEST_NAME} - gtest pthread ${MRPT_LIBS} + set(convertTest_sources + include/vrep_conversion.h vrep_conversion.cpp test/runTests.cpp test/convertTest.cpp + ) + add_executable(${CONVERT_TEST_NAME} ${convertTest_sources}) + target_link_libraries(${CONVERT_TEST_NAME} + gtest pthread ${MRPT_LIBS} ) set_target_properties(${CONVERT_TEST_NAME} - PROPERTIES - RUNTIME_OUTPUT_DIRECTORY ${test_output_directory} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${test_output_directory} ) add_test(NAME ${CONVERT_TEST_NAME} COMMAND - ${test_output_directory}/${CONVERT_TEST_NAME}) + ${test_output_directory}/${CONVERT_TEST_NAME}) endif() -set (SOURCES - include/vrep_conversion.h vrep_conversion.cpp -) +set (SOURCES include/vrep_conversion.h vrep_conversion.cpp) include_directories (include) add_library (conversion_lib SHARED ${SOURCES}) -target_link_libraries( - conversion_lib ${MRPT_LIBS} -) \ No newline at end of file +target_link_libraries( conversion_lib ${MRPT_LIBS} ) \ No newline at end of file From 9aa289bcc3f62b79e011978f59bc19dd375e5a66 Mon Sep 17 00:00:00 2001 From: Shubham Kumar Date: Fri, 8 Jun 2018 18:02:34 +0530 Subject: [PATCH 11/11] Change header style --- conversions/CMakeLists.txt | 4 ++-- conversions/include/vrep_conversion.h | 4 ++-- conversions/vrep_conversion.cpp | 6 +++--- mrpt_graphslam_2d/CMakeLists.txt | 1 - mrpt_graphslam_2d/remoteApi/remoteApi_test.cpp | 6 +++--- 5 files changed, 10 insertions(+), 11 deletions(-) diff --git a/conversions/CMakeLists.txt b/conversions/CMakeLists.txt index c58eff2..5b6e902 100644 --- a/conversions/CMakeLists.txt +++ b/conversions/CMakeLists.txt @@ -20,7 +20,7 @@ if (BUILD_TESTING) ${test_output_directory}/${CONVERT_TEST_NAME}) endif() -set (SOURCES include/vrep_conversion.h vrep_conversion.cpp) +set (CONVERSION_SOURCES include/vrep_conversion.h vrep_conversion.cpp) include_directories (include) -add_library (conversion_lib SHARED ${SOURCES}) +add_library (conversion_lib SHARED ${CONVERSION_SOURCES}) target_link_libraries( conversion_lib ${MRPT_LIBS} ) \ No newline at end of file diff --git a/conversions/include/vrep_conversion.h b/conversions/include/vrep_conversion.h index 66459a1..f977f3d 100644 --- a/conversions/include/vrep_conversion.h +++ b/conversions/include/vrep_conversion.h @@ -1,8 +1,8 @@ #ifndef VREP_CONVERSION_H #define VREP_CONVERSION_H -#include -#include +#include +#include namespace mrpt::obs { diff --git a/conversions/vrep_conversion.cpp b/conversions/vrep_conversion.cpp index 95d18a1..1c9c0f4 100644 --- a/conversions/vrep_conversion.cpp +++ b/conversions/vrep_conversion.cpp @@ -1,6 +1,6 @@ -#include -#include -#include +#include +#include +#include #include #include "mrpt/obs/CObservation2DRangeScan.h" #include "vrep_conversion.h" diff --git a/mrpt_graphslam_2d/CMakeLists.txt b/mrpt_graphslam_2d/CMakeLists.txt index 8bcac47..28feeca 100644 --- a/mrpt_graphslam_2d/CMakeLists.txt +++ b/mrpt_graphslam_2d/CMakeLists.txt @@ -19,6 +19,5 @@ endif() add_definitions (-DNON_MATLAB_PARSING) add_definitions (-DMAX_EXT_API_CONNECTIONS=255) -include_directories (${VREP_PATH}/remoteApi ${VREP_PATH}/include) add_executable(remoteApi_test remoteApi/remoteApi_test.cpp) target_link_libraries(remoteApi_test vrep_lib pthread rt conversion_lib) \ No newline at end of file diff --git a/mrpt_graphslam_2d/remoteApi/remoteApi_test.cpp b/mrpt_graphslam_2d/remoteApi/remoteApi_test.cpp index 1971db5..38088a8 100644 --- a/mrpt_graphslam_2d/remoteApi/remoteApi_test.cpp +++ b/mrpt_graphslam_2d/remoteApi/remoteApi_test.cpp @@ -1,6 +1,6 @@ -#include -#include -#include +#include +#include +#include #include #include "mrpt/obs/CObservation2DRangeScan.h" #include "mrpt/obs/CObservationOdometry.h"