diff --git a/MobileRobot/AugReaMarker/ROS_ArUco/build/ros_aruco/CMakeFiles/ros_aruco.dir/CXX.includecache b/MobileRobot/AugReaMarker/ROS_ArUco/build/ros_aruco/CMakeFiles/ros_aruco.dir/CXX.includecache index c12350d480fc2501fbe2fadfbebbeb181e835b2d..5a97d95687c4e807c505142b266294f36c86b5b9 100644 --- a/MobileRobot/AugReaMarker/ROS_ArUco/build/ros_aruco/CMakeFiles/ros_aruco.dir/CXX.includecache +++ b/MobileRobot/AugReaMarker/ROS_ArUco/build/ros_aruco/CMakeFiles/ros_aruco.dir/CXX.includecache @@ -71,6 +71,8 @@ fstream - sstream - +array +- math.h - unistd.h diff --git a/MobileRobot/AugReaMarker/ROS_ArUco/build/ros_aruco/CMakeFiles/ros_aruco.dir/flags.make b/MobileRobot/AugReaMarker/ROS_ArUco/build/ros_aruco/CMakeFiles/ros_aruco.dir/flags.make index 51ba30e6c555e137f51c86aacbb7883bc625e205..8863ce1bf389b159986e8ce50eb800ce5973470f 100644 --- a/MobileRobot/AugReaMarker/ROS_ArUco/build/ros_aruco/CMakeFiles/ros_aruco.dir/flags.make +++ b/MobileRobot/AugReaMarker/ROS_ArUco/build/ros_aruco/CMakeFiles/ros_aruco.dir/flags.make @@ -2,7 +2,7 @@ # Generated by "Unix Makefiles" Generator, CMake Version 2.8 # compile CXX with /usr/bin/c++ -CXX_FLAGS = -I/usr/local/include -I/home/faridalijani/thesis/MobileRobot/AugReaMarker/ROS_ArUco/ros_aruco/ros_aruco -I/home/faridalijani/thesis/MobileRobot/AugReaMarker/ROS_ArUco/ros_aruco/include -I/home/faridalijani/thesis/MobileRobot/AugReaMarker/ROS_ArUco/ros_aruco/ros_aruco.h -I/opt/ros/hydro/include -I/opt/ros/hydro/include/opencv -I/usr/local/include/aruco +CXX_FLAGS = -std=c++0x -I/usr/local/include -I/home/faridalijani/thesis/MobileRobot/AugReaMarker/ROS_ArUco/ros_aruco/ros_aruco -I/home/faridalijani/thesis/MobileRobot/AugReaMarker/ROS_ArUco/ros_aruco/include -I/home/faridalijani/thesis/MobileRobot/AugReaMarker/ROS_ArUco/ros_aruco/ros_aruco.h -I/opt/ros/hydro/include -I/opt/ros/hydro/include/opencv -I/usr/local/include/aruco CXX_DEFINES = -DROS_BUILD_SHARED_LIBS=1 -DROS_PACKAGE_NAME=\"ros_aruco\" -DROSCONSOLE_BACKEND_LOG4CXX diff --git a/MobileRobot/AugReaMarker/ROS_ArUco/build/ros_aruco/CMakeFiles/ros_aruco.dir/link.txt b/MobileRobot/AugReaMarker/ROS_ArUco/build/ros_aruco/CMakeFiles/ros_aruco.dir/link.txt index 7e41271cd4744600dbab2e446593fe708eabc8de..0357e4a90cd4a527ef729f2e75e86004d1581e75 100644 --- a/MobileRobot/AugReaMarker/ROS_ArUco/build/ros_aruco/CMakeFiles/ros_aruco.dir/link.txt +++ b/MobileRobot/AugReaMarker/ROS_ArUco/build/ros_aruco/CMakeFiles/ros_aruco.dir/link.txt @@ -1 +1 @@ -/usr/bin/c++ CMakeFiles/ros_aruco.dir/src/ros_aruco.cpp.o CMakeFiles/ros_aruco.dir/src/run.cpp.o -o ../../devel/lib/ros_aruco/ros_aruco -rdynamic -L/usr/local/lib /opt/ros/hydro/lib/libtf.so /opt/ros/hydro/lib/libtf2_ros.so /opt/ros/hydro/lib/libactionlib.so /opt/ros/hydro/lib/libtf2.so /opt/ros/hydro/lib/libimage_transport.so /opt/ros/hydro/lib/libmessage_filters.so -ltinyxml /opt/ros/hydro/lib/libclass_loader.so -lPocoFoundation -ldl /opt/ros/hydro/lib/libroscpp.so -lboost_signals-mt -lboost_filesystem-mt /opt/ros/hydro/lib/libxmlrpcpp.so /opt/ros/hydro/lib/libroslib.so /opt/ros/hydro/lib/libcv_bridge.so /opt/ros/hydro/lib/libopencv_videostab.so.2.4.9 /opt/ros/hydro/lib/libopencv_video.so.2.4.9 /opt/ros/hydro/lib/libopencv_superres.so.2.4.9 /opt/ros/hydro/lib/libopencv_stitching.so.2.4.9 /opt/ros/hydro/lib/libopencv_photo.so.2.4.9 /opt/ros/hydro/lib/libopencv_ocl.so.2.4.9 /opt/ros/hydro/lib/libopencv_objdetect.so.2.4.9 /opt/ros/hydro/lib/libopencv_nonfree.so.2.4.9 /opt/ros/hydro/lib/libopencv_ml.so.2.4.9 /opt/ros/hydro/lib/libopencv_legacy.so.2.4.9 /opt/ros/hydro/lib/libopencv_imgproc.so.2.4.9 /opt/ros/hydro/lib/libopencv_highgui.so.2.4.9 /opt/ros/hydro/lib/libopencv_gpu.so.2.4.9 /opt/ros/hydro/lib/libopencv_flann.so.2.4.9 /opt/ros/hydro/lib/libopencv_features2d.so.2.4.9 /opt/ros/hydro/lib/libopencv_core.so.2.4.9 /opt/ros/hydro/lib/libopencv_contrib.so.2.4.9 /opt/ros/hydro/lib/libopencv_calib3d.so.2.4.9 /opt/ros/hydro/lib/librosconsole.so /opt/ros/hydro/lib/librosconsole_log4cxx.so /opt/ros/hydro/lib/librosconsole_backend_interface.so -llog4cxx -lboost_regex-mt /opt/ros/hydro/lib/libroscpp_serialization.so /opt/ros/hydro/lib/librostime.so -lboost_date_time-mt -lboost_system-mt -lboost_thread-mt -lpthread /opt/ros/hydro/lib/libcpp_common.so /opt/ros/hydro/lib/libconsole_bridge.so /opt/ros/hydro/lib/libopencv_videostab.so.2.4.9 /opt/ros/hydro/lib/libopencv_video.so.2.4.9 /opt/ros/hydro/lib/libopencv_ts.a /opt/ros/hydro/lib/libopencv_superres.so.2.4.9 /opt/ros/hydro/lib/libopencv_stitching.so.2.4.9 /opt/ros/hydro/lib/libopencv_photo.so.2.4.9 /opt/ros/hydro/lib/libopencv_ocl.so.2.4.9 /opt/ros/hydro/lib/libopencv_objdetect.so.2.4.9 /opt/ros/hydro/lib/libopencv_nonfree.so.2.4.9 /opt/ros/hydro/lib/libopencv_ml.so.2.4.9 /opt/ros/hydro/lib/libopencv_legacy.so.2.4.9 /opt/ros/hydro/lib/libopencv_imgproc.so.2.4.9 /opt/ros/hydro/lib/libopencv_highgui.so.2.4.9 /opt/ros/hydro/lib/libopencv_gpu.so.2.4.9 /opt/ros/hydro/lib/libopencv_flann.so.2.4.9 /opt/ros/hydro/lib/libopencv_features2d.so.2.4.9 /opt/ros/hydro/lib/libopencv_core.so.2.4.9 /opt/ros/hydro/lib/libopencv_contrib.so.2.4.9 /opt/ros/hydro/lib/libopencv_calib3d.so.2.4.9 -laruco -ldl -lm -lpthread -lrt /opt/ros/hydro/lib/libopencv_nonfree.so.2.4.9 /opt/ros/hydro/lib/libopencv_ocl.so.2.4.9 /opt/ros/hydro/lib/libopencv_gpu.so.2.4.9 /opt/ros/hydro/lib/libopencv_photo.so.2.4.9 /opt/ros/hydro/lib/libopencv_objdetect.so.2.4.9 /opt/ros/hydro/lib/libopencv_legacy.so.2.4.9 /opt/ros/hydro/lib/libopencv_video.so.2.4.9 /opt/ros/hydro/lib/libopencv_ml.so.2.4.9 /opt/ros/hydro/lib/libopencv_calib3d.so.2.4.9 /opt/ros/hydro/lib/libopencv_features2d.so.2.4.9 /opt/ros/hydro/lib/libopencv_highgui.so.2.4.9 /opt/ros/hydro/lib/libopencv_imgproc.so.2.4.9 /opt/ros/hydro/lib/libopencv_flann.so.2.4.9 /opt/ros/hydro/lib/libopencv_core.so.2.4.9 -Wl,-rpath,/opt/ros/hydro/lib:/usr/local/lib +/usr/bin/c++ -std=c++0x CMakeFiles/ros_aruco.dir/src/ros_aruco.cpp.o CMakeFiles/ros_aruco.dir/src/run.cpp.o -o ../../devel/lib/ros_aruco/ros_aruco -rdynamic -L/usr/local/lib /opt/ros/hydro/lib/libtf.so /opt/ros/hydro/lib/libtf2_ros.so /opt/ros/hydro/lib/libactionlib.so /opt/ros/hydro/lib/libtf2.so /opt/ros/hydro/lib/libimage_transport.so /opt/ros/hydro/lib/libmessage_filters.so -ltinyxml /opt/ros/hydro/lib/libclass_loader.so -lPocoFoundation -ldl /opt/ros/hydro/lib/libroscpp.so -lboost_signals-mt -lboost_filesystem-mt /opt/ros/hydro/lib/libxmlrpcpp.so /opt/ros/hydro/lib/libroslib.so /opt/ros/hydro/lib/libcv_bridge.so /opt/ros/hydro/lib/libopencv_videostab.so.2.4.9 /opt/ros/hydro/lib/libopencv_video.so.2.4.9 /opt/ros/hydro/lib/libopencv_superres.so.2.4.9 /opt/ros/hydro/lib/libopencv_stitching.so.2.4.9 /opt/ros/hydro/lib/libopencv_photo.so.2.4.9 /opt/ros/hydro/lib/libopencv_ocl.so.2.4.9 /opt/ros/hydro/lib/libopencv_objdetect.so.2.4.9 /opt/ros/hydro/lib/libopencv_nonfree.so.2.4.9 /opt/ros/hydro/lib/libopencv_ml.so.2.4.9 /opt/ros/hydro/lib/libopencv_legacy.so.2.4.9 /opt/ros/hydro/lib/libopencv_imgproc.so.2.4.9 /opt/ros/hydro/lib/libopencv_highgui.so.2.4.9 /opt/ros/hydro/lib/libopencv_gpu.so.2.4.9 /opt/ros/hydro/lib/libopencv_flann.so.2.4.9 /opt/ros/hydro/lib/libopencv_features2d.so.2.4.9 /opt/ros/hydro/lib/libopencv_core.so.2.4.9 /opt/ros/hydro/lib/libopencv_contrib.so.2.4.9 /opt/ros/hydro/lib/libopencv_calib3d.so.2.4.9 /opt/ros/hydro/lib/librosconsole.so /opt/ros/hydro/lib/librosconsole_log4cxx.so /opt/ros/hydro/lib/librosconsole_backend_interface.so -llog4cxx -lboost_regex-mt /opt/ros/hydro/lib/libroscpp_serialization.so /opt/ros/hydro/lib/librostime.so -lboost_date_time-mt -lboost_system-mt -lboost_thread-mt -lpthread /opt/ros/hydro/lib/libcpp_common.so /opt/ros/hydro/lib/libconsole_bridge.so /opt/ros/hydro/lib/libopencv_videostab.so.2.4.9 /opt/ros/hydro/lib/libopencv_video.so.2.4.9 /opt/ros/hydro/lib/libopencv_ts.a /opt/ros/hydro/lib/libopencv_superres.so.2.4.9 /opt/ros/hydro/lib/libopencv_stitching.so.2.4.9 /opt/ros/hydro/lib/libopencv_photo.so.2.4.9 /opt/ros/hydro/lib/libopencv_ocl.so.2.4.9 /opt/ros/hydro/lib/libopencv_objdetect.so.2.4.9 /opt/ros/hydro/lib/libopencv_nonfree.so.2.4.9 /opt/ros/hydro/lib/libopencv_ml.so.2.4.9 /opt/ros/hydro/lib/libopencv_legacy.so.2.4.9 /opt/ros/hydro/lib/libopencv_imgproc.so.2.4.9 /opt/ros/hydro/lib/libopencv_highgui.so.2.4.9 /opt/ros/hydro/lib/libopencv_gpu.so.2.4.9 /opt/ros/hydro/lib/libopencv_flann.so.2.4.9 /opt/ros/hydro/lib/libopencv_features2d.so.2.4.9 /opt/ros/hydro/lib/libopencv_core.so.2.4.9 /opt/ros/hydro/lib/libopencv_contrib.so.2.4.9 /opt/ros/hydro/lib/libopencv_calib3d.so.2.4.9 -laruco -ldl -lm -lpthread -lrt /opt/ros/hydro/lib/libopencv_nonfree.so.2.4.9 /opt/ros/hydro/lib/libopencv_ocl.so.2.4.9 /opt/ros/hydro/lib/libopencv_gpu.so.2.4.9 /opt/ros/hydro/lib/libopencv_photo.so.2.4.9 /opt/ros/hydro/lib/libopencv_objdetect.so.2.4.9 /opt/ros/hydro/lib/libopencv_legacy.so.2.4.9 /opt/ros/hydro/lib/libopencv_video.so.2.4.9 /opt/ros/hydro/lib/libopencv_ml.so.2.4.9 /opt/ros/hydro/lib/libopencv_calib3d.so.2.4.9 /opt/ros/hydro/lib/libopencv_features2d.so.2.4.9 /opt/ros/hydro/lib/libopencv_highgui.so.2.4.9 /opt/ros/hydro/lib/libopencv_imgproc.so.2.4.9 /opt/ros/hydro/lib/libopencv_flann.so.2.4.9 /opt/ros/hydro/lib/libopencv_core.so.2.4.9 -Wl,-rpath,/opt/ros/hydro/lib:/usr/local/lib diff --git a/MobileRobot/AugReaMarker/ROS_ArUco/build/ros_aruco/CMakeFiles/ros_aruco.dir/src/ros_aruco.cpp.o b/MobileRobot/AugReaMarker/ROS_ArUco/build/ros_aruco/CMakeFiles/ros_aruco.dir/src/ros_aruco.cpp.o index dec31813742a48c860fade08348f0252f4891d1d..cb823190b62bb7649d754fcdf8b54a71e102abdc 100644 Binary files a/MobileRobot/AugReaMarker/ROS_ArUco/build/ros_aruco/CMakeFiles/ros_aruco.dir/src/ros_aruco.cpp.o and b/MobileRobot/AugReaMarker/ROS_ArUco/build/ros_aruco/CMakeFiles/ros_aruco.dir/src/ros_aruco.cpp.o differ diff --git a/MobileRobot/AugReaMarker/ROS_ArUco/build/ros_aruco/CMakeFiles/ros_aruco.dir/src/run.cpp.o b/MobileRobot/AugReaMarker/ROS_ArUco/build/ros_aruco/CMakeFiles/ros_aruco.dir/src/run.cpp.o index 7f9f12b55bc65f3907c6fae187c82d948499df83..d83dab231b310e912bb8e6abf3c480b8cde97cff 100644 Binary files a/MobileRobot/AugReaMarker/ROS_ArUco/build/ros_aruco/CMakeFiles/ros_aruco.dir/src/run.cpp.o and b/MobileRobot/AugReaMarker/ROS_ArUco/build/ros_aruco/CMakeFiles/ros_aruco.dir/src/run.cpp.o differ diff --git a/MobileRobot/AugReaMarker/ROS_ArUco/devel/lib/ros_aruco/ros_aruco b/MobileRobot/AugReaMarker/ROS_ArUco/devel/lib/ros_aruco/ros_aruco index 72d92810ae69652166e024d0a01e901ba12ebc88..967b9d61217705211de521fa55ab6828bbd44486 100755 Binary files a/MobileRobot/AugReaMarker/ROS_ArUco/devel/lib/ros_aruco/ros_aruco and b/MobileRobot/AugReaMarker/ROS_ArUco/devel/lib/ros_aruco/ros_aruco differ diff --git a/MobileRobot/AugReaMarker/ROS_ArUco/ros_aruco/CMakeLists.txt b/MobileRobot/AugReaMarker/ROS_ArUco/ros_aruco/CMakeLists.txt index acd2731ea6d12b84361bda75ce1afb6a03c073d5..37fb74cf00eea1e2f12521dad5f40dc12524644d 100644 --- a/MobileRobot/AugReaMarker/ROS_ArUco/ros_aruco/CMakeLists.txt +++ b/MobileRobot/AugReaMarker/ROS_ArUco/ros_aruco/CMakeLists.txt @@ -17,6 +17,7 @@ find_package(catkin REQUIRED COMPONENTS SET(CMAKE_MODULE_PATH ${ARUCO_PATH}/lib/cmake ) SET(ARUCO_INCLUDE_DIRS ${ARUCO_PATH}/include/aruco ) +set(CMAKE_CXX_FLAGS "-std=c++0x ${CMAKE_CXX_FLAGS}") ## System dependencies are found with CMake's conventions find_package(aruco REQUIRED ) diff --git a/MobileRobot/AugReaMarker/ROS_ArUco/ros_aruco/CMakeLists.txt~ b/MobileRobot/AugReaMarker/ROS_ArUco/ros_aruco/CMakeLists.txt~ index d922a79391e958b15d387f848ade9199ac08a90d..acd2731ea6d12b84361bda75ce1afb6a03c073d5 100644 --- a/MobileRobot/AugReaMarker/ROS_ArUco/ros_aruco/CMakeLists.txt~ +++ b/MobileRobot/AugReaMarker/ROS_ArUco/ros_aruco/CMakeLists.txt~ @@ -125,7 +125,7 @@ catkin_package( ## Specify additional locations of header files ## Your package locations should be listed before other locations # include_directories(include) -include_directories( +include_directories(ros_aruco include/ ros_aruco.h ${catkin_INCLUDE_DIRS} ${ARUCO_INCLUDE_DIRS} ) diff --git a/MobileRobot/AugReaMarker/ROS_ArUco/ros_aruco/include/ros_aruco.h b/MobileRobot/AugReaMarker/ROS_ArUco/ros_aruco/include/ros_aruco.h index ef8e4891311c3e52b3cc50717cc7daa22cfd1941..a70b83196566c50471b5e4c0aa99e00d09bdf2c4 100644 --- a/MobileRobot/AugReaMarker/ROS_ArUco/ros_aruco/include/ros_aruco.h +++ b/MobileRobot/AugReaMarker/ROS_ArUco/ros_aruco/include/ros_aruco.h @@ -85,15 +85,15 @@ private: static int ThePyrDownLevel; static float TheMarkerSize; - static double poseX,poseY,poseZ,orienX,orienY,orienZ,orienW; - - static bool update_images,stream; + void ContStart(); + static bool update_images,MarKerPoseObtained,found; bool readArguments ( int argc,char **argv ); static const string trackbarWindowName; void Controller(double Reference, double RobPose, double dt, int index); + //void Controller(double Reference[6], double RobPose[6], double dt); void dock(double VelX, double VelY, double VelZ, double omegaX, double omegaY, double omegaZ, double omegaW); //void dock(double speed[6]); @@ -134,23 +134,22 @@ public: static double control_signal; + static double prop_gain; static double integ_gain; static double deriv_gain; + static double zeroMin,zeroMax; double marpose[6]; double robpose[6]; -double getXobjPos(); -double getYobjPos(); -double getZobjPos(); - -double getXobjOrien(); -double getYobjOrien(); -double getZobjOrien(); -double getWobjOrien(); - -double getMarpose(); -double getRobPose(); - + /*double prev_error[6]; + double int_error[6]; + double curr_error[6]; + double diff[6]; + double p_term[6]; + double d_term[6]; + double i_term[6]; + double control_signal[6];*/ + }; diff --git a/MobileRobot/AugReaMarker/ROS_ArUco/ros_aruco/include/ros_aruco.h~ b/MobileRobot/AugReaMarker/ROS_ArUco/ros_aruco/include/ros_aruco.h~ index ef8e4891311c3e52b3cc50717cc7daa22cfd1941..7822fecd7db1b9628508a3a43f548ec14f116361 100644 --- a/MobileRobot/AugReaMarker/ROS_ArUco/ros_aruco/include/ros_aruco.h~ +++ b/MobileRobot/AugReaMarker/ROS_ArUco/ros_aruco/include/ros_aruco.h~ @@ -85,15 +85,15 @@ private: static int ThePyrDownLevel; static float TheMarkerSize; - static double poseX,poseY,poseZ,orienX,orienY,orienZ,orienW; - - static bool update_images,stream; + void ContStart(); + static bool update_images,MarKerPoseObtained,found; bool readArguments ( int argc,char **argv ); static const string trackbarWindowName; void Controller(double Reference, double RobPose, double dt, int index); + //void Controller(double Reference[6], double RobPose[6], double dt); void dock(double VelX, double VelY, double VelZ, double omegaX, double omegaY, double omegaZ, double omegaW); //void dock(double speed[6]); @@ -134,23 +134,22 @@ public: static double control_signal; + static double prop_gain; static double integ_gain; static double deriv_gain; + double marpose[6]; double robpose[6]; -double getXobjPos(); -double getYobjPos(); -double getZobjPos(); - -double getXobjOrien(); -double getYobjOrien(); -double getZobjOrien(); -double getWobjOrien(); - -double getMarpose(); -double getRobPose(); - + /*double prev_error[6]; + double int_error[6]; + double curr_error[6]; + double diff[6]; + double p_term[6]; + double d_term[6]; + double i_term[6]; + double control_signal[6];*/ + }; diff --git a/MobileRobot/AugReaMarker/ROS_ArUco/ros_aruco/src/ros_aruco.cpp b/MobileRobot/AugReaMarker/ROS_ArUco/ros_aruco/src/ros_aruco.cpp index b15640fe561bfd2fa0c3f12596376fd279b82a85..c85fd29678c3a470249681163cc4d2890ca65847 100644 --- a/MobileRobot/AugReaMarker/ROS_ArUco/ros_aruco/src/ros_aruco.cpp +++ b/MobileRobot/AugReaMarker/ROS_ArUco/ros_aruco/src/ros_aruco.cpp @@ -1,6 +1,7 @@ #include <iostream> #include <fstream> #include <sstream> +#include <array> #include <math.h> #include <unistd.h> @@ -55,19 +56,12 @@ int ImageConverter::ThePyrDownLevel = 0; bool ImageConverter::update_images = true; -bool ImageConverter::stream = false; +bool ImageConverter::MarKerPoseObtained = false; +bool ImageConverter::found = false; int ImageConverter::ThresParam1 = 0; int ImageConverter::ThresParam2 = 0; -double ImageConverter::poseX = 0; -double ImageConverter::poseY = 0; -double ImageConverter::poseZ = 0; - -double ImageConverter::orienX = 0; -double ImageConverter::orienY = 0; -double ImageConverter::orienZ = 0; -double ImageConverter::orienW = 0; double ImageConverter::prev_error; double ImageConverter::curr_error; @@ -77,12 +71,16 @@ double ImageConverter::diff; double ImageConverter::p_term = 0; double ImageConverter::i_term = 0; double ImageConverter::d_term = 0; +double ImageConverter::control_signal; double ImageConverter::prop_gain = 0.01; double ImageConverter::integ_gain = 0.01; double ImageConverter::deriv_gain = 0; -double ImageConverter::control_signal; +double ImageConverter::zeroMax = .0000000000000000001; + +double ImageConverter::zeroMin = -.0000000000000000001; + ImageConverter::ImageConverter() : it_(nh_) @@ -111,58 +109,6 @@ double ImageConverter::control_signal; { return img; } - -double ImageConverter::getXobjPos() -{ - return poseX; -} - - -double ImageConverter::getYobjPos() -{ - return poseY; -} - - -double ImageConverter::getZobjPos() -{ - return poseZ; -} - -double ImageConverter::getXobjOrien() -{ - return orienX; -} - - -double ImageConverter::getYobjOrien() -{ - return orienY; -} - - -double ImageConverter::getZobjOrien() -{ - return orienZ; -} - - -double ImageConverter::getWobjOrien() -{ - return orienW; -} - -double ImageConverter::getMarpose() -{ - return marpose[6]; -} - - -double ImageConverter::getRobPose() -{ - return robpose[6]; -} - void ImageConverter::cvTackBarEvents(int value,void* ptr) { ImageConverter* ic = (ImageConverter*)(ptr); @@ -272,9 +218,6 @@ void ImageConverter::ProgStart(int argc,char** argv) { cerr<<"Could not open video!!"<<endl; nh_.shutdown(); - } else - { - stream = true; } // Read first image to get the dimensions @@ -312,18 +255,26 @@ void ImageConverter::ProgStart(int argc,char** argv) float roll,yaw,pitch; float rollE,yawE,pitchE; - bool found = (TheMarkers.size()>0)?true:false; - - if (found) + if (TheMarkers.size()>0) { - x_t = -TheMarkers[0].Tvec.at<Vec3f>(0,0)[0]; + found = true; + ROS_INFO("MARKER FOUND!!! ... \n"); + } + else + { + found = false; + ROS_INFO("MARKER NOT FOUND ! \n"); + } + //bool found = (TheMarkers.size()>0)?true:false; + + if (ros::ok() && found) + { + x_t = -TheMarkers[0].Tvec.at<Vec3f>(0,0)[0]; y_t = TheMarkers[0].Tvec.at<Vec3f>(0,0)[1]; z_t = TheMarkers[0].Tvec.at<Vec3f>(0,0)[2]; //printf("\n X = %4.2f Y = %4.2f Z = %4.2f\n",x_t,y_t,z_t); - //printf("\n rotX = %4.2f rotY = %4.2f rotZ = %4.2f\n",rotX,rotY,rotZ); - cv::Mat R(3,3,cv::DataType<float>::type); // You need to apply cv::Rodrigues() in order to obatain angles wrt to camera coords cv::Rodrigues(TheMarkers[0].Rvec,R); @@ -364,19 +315,7 @@ void ImageConverter::ProgStart(int argc,char** argv) pitch = -atan2(R.at<float>(2,0), R.at<float>(2,1)); yaw = acos(R.at<float>(2,2)); roll = -atan2(R.at<float>(0,2), R.at<float>(1,2)); - - } else - { - // x_t = 0.0; - // y_t = 0.0; - // z_t = -10.0; - // yaw = 0.0; - // roll = 0.0; - // pitch = 0.0; - ROS_INFO("MARKER NOT FOUND \n!"); - } - // Marker rotation should be initially zero (just for convenience) float p_off = CV_PI; float r_off = CV_PI/2; @@ -384,9 +323,7 @@ void ImageConverter::ProgStart(int argc,char** argv) // See: http://en.wikipedia.org/wiki/Flight_dynamics - - if (ros::ok() && found && stream) - { + ros::Time time = ros::Time::now(); // Camera Frame --- transformCAM.setOrigin( tf::Vector3(.25, 0, .5) ); @@ -405,6 +342,18 @@ void ImageConverter::ProgStart(int argc,char** argv) "/camera", "marker")); + // Now publish the pose message, remember the offsets + msg.position.x = x_t; + msg.position.y = y_t; + msg.position.z = z_t; + + geometry_msgs::Quaternion p_quat = tf::createQuaternionMsgFromRollPitchYaw(roll-r_off, pitch+p_off, yaw-y_off); + msg.orientation = p_quat; + + pose_pub.publish(msg); + ros::spinOnce(); + + tf::StampedTransform ObjPose; tf::StampedTransform RobPose; @@ -421,7 +370,6 @@ void ImageConverter::ProgStart(int argc,char** argv) { ROS_WARN("%s",ex.what()); } - ROS_INFO("MARKER FOUND!!! ROBOT IS MOVING ... "); /*printf("\nMarker Pose in Global Coordinate : Xobj = %5.4f, Yobj = %5.4f, Zobj = %5.4f \n ", ObjPose.getOrigin().x(), ObjPose.getOrigin().y(), @@ -440,47 +388,36 @@ void ImageConverter::ProgStart(int argc,char** argv) marpose[0] = ObjPose.getOrigin().x(); marpose[1] = ObjPose.getOrigin().y(); marpose[2] = ObjPose.getOrigin().z(); - marpose[3] = ObjPose.getRotation().x(); marpose[4] = ObjPose.getRotation().y(); marpose[5] = ObjPose.getRotation().z(); marpose[6] = ObjPose.getRotation().w(); - getMarpose(); robpose[0] = RobPose.getOrigin().x(); robpose[1] = RobPose.getOrigin().y(); robpose[2] = RobPose.getOrigin().z(); - robpose[3] = RobPose.getRotation().x(); robpose[4] = RobPose.getRotation().y(); robpose[5] = RobPose.getRotation().z(); robpose[6] = RobPose.getRotation().w(); - getRobPose(); - - - - poseX = ObjPose.getOrigin().x(); - getXobjPos(); - - poseY = ObjPose.getOrigin().y(); - getYobjPos(); - - poseZ = ObjPose.getOrigin().z(); - getZobjPos(); - - orienX = ObjPose.getRotation().x(); - getXobjOrien(); - - orienY = ObjPose.getRotation().y(); - getYobjOrien(); - - orienZ = ObjPose.getRotation().z(); - getZobjOrien(); - - orienW = ObjPose.getRotation().w(); - getWobjOrien(); + for (int i = 0; i<7; ++i) + { + ROS_INFO_STREAM("ROBOT element " << i << " = " << robpose[i] << " . \n"); + ROS_INFO_STREAM("MARKER element " << i << " = " << marpose[i] << " . \n"); + + if (marpose[i] >= zeroMax || marpose[i] <= zeroMin) + { + MarKerPoseObtained = true; + ROS_INFO("MARKER POSE ACHIEVED, MOVE TO CONTROLLER ... ! \n"); + + } else + { + MarKerPoseObtained = false; + ROS_INFO("MARKER POSE HAS NOT ACHIEVED ! \n"); + } + } //printf( "\nAngles (deg.) with offset : roll = %5.2f pitch = %5.2f yaw = %5.2f \n", (roll-r_off)*(180.0/CV_PI), (pitch+p_off)*(180.0/CV_PI), (yaw-y_off)*(180.0/CV_PI)); @@ -496,17 +433,8 @@ void ImageConverter::ProgStart(int argc,char** argv) printf( "\nMarker distance (m.): x_d = %5.4f y_d = %5.4f z_d = %5.4f \n", x_t, y_t, z_t);*/ - // Now publish the pose message, remember the offsets - msg.position.x = x_t; - msg.position.y = y_t; - msg.position.z = z_t; - geometry_msgs::Quaternion p_quat = tf::createQuaternionMsgFromRollPitchYaw(roll-r_off, pitch+p_off, yaw-y_off); - msg.orientation = p_quat; - - pose_pub.publish(msg); - - ros::spinOnce(); + //ContStart(); } /*// Print other rectangles that contains no valid markers for (unsigned int i=0;i<MDetector.getCandidates().size();i++) { @@ -546,9 +474,22 @@ void ImageConverter::ProgStart(int argc,char** argv) } // ---- Controller part ----------- START ------- + +void ImageConverter::ContStart() +{ + ros::Rate rate(100); + + while (ros::ok() && keepMoving) + { + ros::spinOnce(); + rate.sleep(); + } + +} + void ImageConverter::robCB(const geometry_msgs::PoseStamped::ConstPtr& RobFB) { - ROS_INFO_STREAM(" Xrob = " << robpose[0] << " m. \n"); + /*ROS_INFO_STREAM(" Xrob = " << robpose[0] << " m. \n"); ROS_INFO_STREAM(" ObjX = " << marpose[0] << " m. \n"); ROS_INFO_STREAM(" Yrob = " << robpose[1] << " m. \n"); @@ -567,10 +508,64 @@ void ImageConverter::robCB(const geometry_msgs::PoseStamped::ConstPtr& RobFB) ROS_INFO_STREAM(" ObjOrienZ = " << marpose[5] << " rad. \n"); ROS_INFO_STREAM(" WorienRob = " << robpose[6] << " rad. \n"); - ROS_INFO_STREAM(" ObjOrienW = " << marpose[6] << " rad. \n"); + ROS_INFO_STREAM(" ObjOrienW = " << marpose[6] << " rad. \n");*/ + - for (int i = 0; i<7; i++) +if (MarKerPoseObtained && keepMoving) +{ + if ((robpose[0] >= marpose[0]) && + (robpose[1] >= marpose[1]) /*&& + (robpose[2] >= marpose[2])*/) + { + if (/*(robpose[3] >= marpose[3]) && + (robpose[4] >= marpose[4]) &&*/ + (robpose[5] >= marpose[5]) /*&& + (robpose[6] >= marpose[6])*/) + { + ROS_INFO(" Dock is completed! \n "); + keepMoving = false; + }/*else if (robpose[3] <= marpose[3]) + { + ROS_INFO(" Calculating control signal For ROLL! \n "); + Controller(marpose[3],robpose[3],.01,4); + + } else if (robpose[4] <= marpose[4]) + { + ROS_INFO(" Calculating control signal For PITCH! \n "); + Controller(marpose[4],robpose[4],.01,5); + + }*/ else if ((robpose[5] <= marpose[5])) + { + ROS_INFO(" Calculating control signal For YAW! \n "); + Controller(marpose[5],robpose[5],.01,6); + } /*else if ((robpose[6] <= marpose[6])) + { + ROS_INFO(" Calculating control signal For W! \n "); + Controller(marpose[6],robpose[6],.01,7); + }*/ + + + } else if ((robpose[0] <= marpose[0])) + { + ROS_INFO(" Calculating control signal For X-direction! \n "); + Controller(marpose[0],robpose[0],.01,1); + } else if ((robpose[1] <= marpose[1])) + { + ROS_INFO(" Calculating control signal For Y-direction! \n "); + Controller(marpose[1],robpose[1],.01,2); + } /*else if ((robpose[2] <= marpose[2])) + { + ROS_INFO(" Calculating control signal For Z-direction! \n "); + Controller(marpose[2],robpose[2],.01,3); + }*/ + + + + + + + /*for (int i = 0; i<7; i++) { if (marpose[i] >= robpose[i]) { @@ -579,10 +574,24 @@ void ImageConverter::robCB(const geometry_msgs::PoseStamped::ConstPtr& RobFB) { Controller(marpose[i],robpose[i],.1,i); } - } + }*/ + + /*std::array<double,7> MarkerPos {marpose[0],marpose[1],marpose[2],marpose[3],marpose[4],marpose[5],marpose[6]}; + std::array<double,7> RobotPos {robpose[0],robpose[1],robpose[2],robpose[3],robpose[4],robpose[5],robpose[6]}; + if (MarkerPos >= RobotPos) + { + ROS_INFO_STREAM("Dock is completed!"); + } else + { + Controller(marpose,robpose,.01); + }*/ + +} // end if; } + +//void ImageConverter::Controller(double Reference[i], double RobPose[i], double dt) void ImageConverter::Controller(double Reference, double RobPose, double dt, int index) { // e(t) = setpoint - actual value; @@ -590,8 +599,6 @@ void ImageConverter::Controller(double Reference, double RobPose, double dt, int // Integrated error int_error += curr_error * dt; - - /* // -- windup gaurd -- if (int_error < ) @@ -639,11 +646,8 @@ void ImageConverter::Controller(double Reference, double RobPose, double dt, int { dock(0, 0, 0, 0, 0, 0, control_signal); }*/ - - - - } + //void ImageConverter::dock(double speed[6]) void ImageConverter::dock(double VelX, double VelY, double VelZ, double omegaX, double omegaY, double omegaZ, double omegaW) { diff --git a/MobileRobot/AugReaMarker/ROS_ArUco/ros_aruco/src/ros_aruco.cpp~ b/MobileRobot/AugReaMarker/ROS_ArUco/ros_aruco/src/ros_aruco.cpp~ index 2d20a73763ceb289ea9111d75ca959a8560b8b1e..61c10d8d4c7f9cb465b26126d6de7df657eb7f78 100644 --- a/MobileRobot/AugReaMarker/ROS_ArUco/ros_aruco/src/ros_aruco.cpp~ +++ b/MobileRobot/AugReaMarker/ROS_ArUco/ros_aruco/src/ros_aruco.cpp~ @@ -1,6 +1,7 @@ #include <iostream> #include <fstream> #include <sstream> +#include <array> #include <math.h> #include <unistd.h> @@ -55,19 +56,12 @@ int ImageConverter::ThePyrDownLevel = 0; bool ImageConverter::update_images = true; -bool ImageConverter::stream = false; +bool ImageConverter::MarKerPoseObtained = false; +bool ImageConverter::found = false; int ImageConverter::ThresParam1 = 0; int ImageConverter::ThresParam2 = 0; -double ImageConverter::poseX = 0; -double ImageConverter::poseY = 0; -double ImageConverter::poseZ = 0; - -double ImageConverter::orienX = 0; -double ImageConverter::orienY = 0; -double ImageConverter::orienZ = 0; -double ImageConverter::orienW = 0; double ImageConverter::prev_error; double ImageConverter::curr_error; @@ -77,12 +71,16 @@ double ImageConverter::diff; double ImageConverter::p_term = 0; double ImageConverter::i_term = 0; double ImageConverter::d_term = 0; +double ImageConverter::control_signal; -double ImageConverter::prop_gain = 0.01; -double ImageConverter::integ_gain = 0.01; +double ImageConverter::prop_gain = 0.001; +double ImageConverter::integ_gain = 0.001; double ImageConverter::deriv_gain = 0; -double ImageConverter::control_signal; +double ImageConverter::zeroMax = .0000000000000000001; + +double ImageConverter::zeroMin = -.0000000000000000001; + ImageConverter::ImageConverter() : it_(nh_) @@ -111,58 +109,6 @@ double ImageConverter::control_signal; { return img; } - -double ImageConverter::getXobjPos() -{ - return poseX; -} - - -double ImageConverter::getYobjPos() -{ - return poseY; -} - - -double ImageConverter::getZobjPos() -{ - return poseZ; -} - -double ImageConverter::getXobjOrien() -{ - return orienX; -} - - -double ImageConverter::getYobjOrien() -{ - return orienY; -} - - -double ImageConverter::getZobjOrien() -{ - return orienZ; -} - - -double ImageConverter::getWobjOrien() -{ - return orienW; -} - -double ImageConverter::getMarpose() -{ - return marpose[6]; -} - - -double ImageConverter::getRobPose() -{ - return robpose[6]; -} - void ImageConverter::cvTackBarEvents(int value,void* ptr) { ImageConverter* ic = (ImageConverter*)(ptr); @@ -272,9 +218,6 @@ void ImageConverter::ProgStart(int argc,char** argv) { cerr<<"Could not open video!!"<<endl; nh_.shutdown(); - } else - { - stream = true; } // Read first image to get the dimensions @@ -312,18 +255,26 @@ void ImageConverter::ProgStart(int argc,char** argv) float roll,yaw,pitch; float rollE,yawE,pitchE; - bool found = (TheMarkers.size()>0)?true:false; - - if (found) + if (TheMarkers.size()>0) { - x_t = -TheMarkers[0].Tvec.at<Vec3f>(0,0)[0]; + found = true; + ROS_INFO("MARKER FOUND!!! ... \n"); + } + else + { + found = false; + ROS_INFO("MARKER NOT FOUND ! \n"); + } + //bool found = (TheMarkers.size()>0)?true:false; + + if (ros::ok() && found) + { + x_t = -TheMarkers[0].Tvec.at<Vec3f>(0,0)[0]; y_t = TheMarkers[0].Tvec.at<Vec3f>(0,0)[1]; z_t = TheMarkers[0].Tvec.at<Vec3f>(0,0)[2]; //printf("\n X = %4.2f Y = %4.2f Z = %4.2f\n",x_t,y_t,z_t); - //printf("\n rotX = %4.2f rotY = %4.2f rotZ = %4.2f\n",rotX,rotY,rotZ); - cv::Mat R(3,3,cv::DataType<float>::type); // You need to apply cv::Rodrigues() in order to obatain angles wrt to camera coords cv::Rodrigues(TheMarkers[0].Rvec,R); @@ -364,19 +315,7 @@ void ImageConverter::ProgStart(int argc,char** argv) pitch = -atan2(R.at<float>(2,0), R.at<float>(2,1)); yaw = acos(R.at<float>(2,2)); roll = -atan2(R.at<float>(0,2), R.at<float>(1,2)); - - } else - { - // x_t = 0.0; - // y_t = 0.0; - // z_t = -10.0; - // yaw = 0.0; - // roll = 0.0; - // pitch = 0.0; - ROS_INFO("MARKER NOT FOUND \n!"); - } - // Marker rotation should be initially zero (just for convenience) float p_off = CV_PI; float r_off = CV_PI/2; @@ -384,9 +323,7 @@ void ImageConverter::ProgStart(int argc,char** argv) // See: http://en.wikipedia.org/wiki/Flight_dynamics - - if (ros::ok() && found && stream) - { + ros::Time time = ros::Time::now(); // Camera Frame --- transformCAM.setOrigin( tf::Vector3(.25, 0, .5) ); @@ -405,6 +342,18 @@ void ImageConverter::ProgStart(int argc,char** argv) "/camera", "marker")); + // Now publish the pose message, remember the offsets + msg.position.x = x_t; + msg.position.y = y_t; + msg.position.z = z_t; + + geometry_msgs::Quaternion p_quat = tf::createQuaternionMsgFromRollPitchYaw(roll-r_off, pitch+p_off, yaw-y_off); + msg.orientation = p_quat; + + pose_pub.publish(msg); + ros::spinOnce(); + + tf::StampedTransform ObjPose; tf::StampedTransform RobPose; @@ -421,7 +370,6 @@ void ImageConverter::ProgStart(int argc,char** argv) { ROS_WARN("%s",ex.what()); } - ROS_INFO("MARKER FOUND!!! ROBOT IS MOVING ... "); /*printf("\nMarker Pose in Global Coordinate : Xobj = %5.4f, Yobj = %5.4f, Zobj = %5.4f \n ", ObjPose.getOrigin().x(), ObjPose.getOrigin().y(), @@ -440,47 +388,36 @@ void ImageConverter::ProgStart(int argc,char** argv) marpose[0] = ObjPose.getOrigin().x(); marpose[1] = ObjPose.getOrigin().y(); marpose[2] = ObjPose.getOrigin().z(); - marpose[3] = ObjPose.getRotation().x(); marpose[4] = ObjPose.getRotation().y(); marpose[5] = ObjPose.getRotation().z(); marpose[6] = ObjPose.getRotation().w(); - getMarpose(); robpose[0] = RobPose.getOrigin().x(); robpose[1] = RobPose.getOrigin().y(); robpose[2] = RobPose.getOrigin().z(); - robpose[3] = RobPose.getRotation().x(); robpose[4] = RobPose.getRotation().y(); robpose[5] = RobPose.getRotation().z(); robpose[6] = RobPose.getRotation().w(); - getRobPose(); - - - - poseX = ObjPose.getOrigin().x(); - getXobjPos(); - - poseY = ObjPose.getOrigin().y(); - getYobjPos(); - - poseZ = ObjPose.getOrigin().z(); - getZobjPos(); - - orienX = ObjPose.getRotation().x(); - getXobjOrien(); - - orienY = ObjPose.getRotation().y(); - getYobjOrien(); - - orienZ = ObjPose.getRotation().z(); - getZobjOrien(); - - orienW = ObjPose.getRotation().w(); - getWobjOrien(); + for (int i = 0; i<7; ++i) + { + ROS_INFO_STREAM("ROBOT element " << i << " = " << robpose[i] << " . \n"); + ROS_INFO_STREAM("MARKER element " << i << " = " << marpose[i] << " . \n"); + + if (marpose[i] >= zeroMax || marpose[i] <= zeroMin) + { + MarKerPoseObtained = true; + ROS_INFO("MARKER POSE ACHIEVED, MOVE TO CONTROLLER ... ! \n"); + + } else + { + MarKerPoseObtained = false; + ROS_INFO("MARKER POSE HAS NOT ACHIEVED ! \n"); + } + } //printf( "\nAngles (deg.) with offset : roll = %5.2f pitch = %5.2f yaw = %5.2f \n", (roll-r_off)*(180.0/CV_PI), (pitch+p_off)*(180.0/CV_PI), (yaw-y_off)*(180.0/CV_PI)); @@ -496,17 +433,8 @@ void ImageConverter::ProgStart(int argc,char** argv) printf( "\nMarker distance (m.): x_d = %5.4f y_d = %5.4f z_d = %5.4f \n", x_t, y_t, z_t);*/ - // Now publish the pose message, remember the offsets - msg.position.x = x_t; - msg.position.y = y_t; - msg.position.z = z_t; - geometry_msgs::Quaternion p_quat = tf::createQuaternionMsgFromRollPitchYaw(roll-r_off, pitch+p_off, yaw-y_off); - msg.orientation = p_quat; - - pose_pub.publish(msg); - - ros::spinOnce(); + //ContStart(); } /*// Print other rectangles that contains no valid markers for (unsigned int i=0;i<MDetector.getCandidates().size();i++) { @@ -546,9 +474,22 @@ void ImageConverter::ProgStart(int argc,char** argv) } // ---- Controller part ----------- START ------- + +void ImageConverter::ContStart() +{ + ros::Rate rate(100); + + while (ros::ok() && keepMoving) + { + ros::spinOnce(); + rate.sleep(); + } + +} + void ImageConverter::robCB(const geometry_msgs::PoseStamped::ConstPtr& RobFB) { - ROS_INFO_STREAM(" Xrob = " << robpose[0] << " m. \n"); + /*ROS_INFO_STREAM(" Xrob = " << robpose[0] << " m. \n"); ROS_INFO_STREAM(" ObjX = " << marpose[0] << " m. \n"); ROS_INFO_STREAM(" Yrob = " << robpose[1] << " m. \n"); @@ -567,22 +508,90 @@ void ImageConverter::robCB(const geometry_msgs::PoseStamped::ConstPtr& RobFB) ROS_INFO_STREAM(" ObjOrienZ = " << marpose[5] << " rad. \n"); ROS_INFO_STREAM(" WorienRob = " << robpose[6] << " rad. \n"); - ROS_INFO_STREAM(" ObjOrienW = " << marpose[6] << " rad. \n"); + ROS_INFO_STREAM(" ObjOrienW = " << marpose[6] << " rad. \n");*/ + - for (int i = 0; i<7; i++) +if (MarKerPoseObtained && keepMoving) +{ + if ((robpose[0] >= marpose[0]) && + (robpose[1] >= marpose[1]) /*&& + (robpose[2] >= marpose[2])*/) + { + if (/*(robpose[3] >= marpose[3]) && + (robpose[4] >= marpose[4]) &&*/ + (robpose[5] >= marpose[5]) /*&& + (robpose[6] >= marpose[6])*/) + { + ROS_INFO(" Dock is completed! \n "); + keepMoving = false; + }/*else if (robpose[3] <= marpose[3]) + { + ROS_INFO(" Calculating control signal For ROLL! \n "); + Controller(marpose[3],robpose[3],.01,4); + + } else if (robpose[4] <= marpose[4]) + { + ROS_INFO(" Calculating control signal For PITCH! \n "); + Controller(marpose[4],robpose[4],.01,5); + + }*/ else if ((robpose[5] <= marpose[5])) + { + ROS_INFO(" Calculating control signal For YAW! \n "); + Controller(marpose[5],robpose[5],.01,6); + } /*else if ((robpose[6] <= marpose[6])) + { + ROS_INFO(" Calculating control signal For W! \n "); + Controller(marpose[6],robpose[6],.01,7); + }*/ + + + } else if ((robpose[0] <= marpose[0])) + { + ROS_INFO(" Calculating control signal For X-direction! \n "); + Controller(marpose[0],robpose[0],.01,1); + } else if ((robpose[1] <= marpose[1])) + { + ROS_INFO(" Calculating control signal For Y-direction! \n "); + Controller(marpose[1],robpose[1],.01,2); + } /*else if ((robpose[2] <= marpose[2])) + { + ROS_INFO(" Calculating control signal For Z-direction! \n "); + Controller(marpose[2],robpose[2],.01,3); + }*/ + + + + + + + /*for (int i = 0; i<7; i++) { if (marpose[i] >= robpose[i]) { - ROS_INFO_STREAM("The " << i << " th. element of marker = " << marpose[i] << " and robot = " << robpose[i] << "are matched! \n" ); + ROS_INFO_STREAM("The " << i << " th. element of marker = " << marpose[i] << " and robot = " << robpose[i] << " are matched! \n" ); } else { Controller(marpose[i],robpose[i],.1,i); } - } + }*/ + + /*std::array<double,7> MarkerPos {marpose[0],marpose[1],marpose[2],marpose[3],marpose[4],marpose[5],marpose[6]}; + std::array<double,7> RobotPos {robpose[0],robpose[1],robpose[2],robpose[3],robpose[4],robpose[5],robpose[6]}; + if (MarkerPos >= RobotPos) + { + ROS_INFO_STREAM("Dock is completed!"); + } else + { + Controller(marpose,robpose,.01); + }*/ + +} // end if; } + +//void ImageConverter::Controller(double Reference[i], double RobPose[i], double dt) void ImageConverter::Controller(double Reference, double RobPose, double dt, int index) { // e(t) = setpoint - actual value; @@ -590,8 +599,6 @@ void ImageConverter::Controller(double Reference, double RobPose, double dt, int // Integrated error int_error += curr_error * dt; - - /* // -- windup gaurd -- if (int_error < ) @@ -639,11 +646,8 @@ void ImageConverter::Controller(double Reference, double RobPose, double dt, int { dock(0, 0, 0, 0, 0, 0, control_signal); }*/ - - - - } + //void ImageConverter::dock(double speed[6]) void ImageConverter::dock(double VelX, double VelY, double VelZ, double omegaX, double omegaY, double omegaZ, double omegaW) { diff --git a/MobileRobot/ObjectTrack/a.out b/MobileRobot/ObjectTrack/a.out index 2dae1d3d2f62538391e9b5575c19e11e04244d58..042b114a2a126dbd727d9c9ca4d602ea294684bb 100755 Binary files a/MobileRobot/ObjectTrack/a.out and b/MobileRobot/ObjectTrack/a.out differ diff --git a/copy_2_robot.txt b/copy_2_robot.txt new file mode 100644 index 0000000000000000000000000000000000000000..5fd823facf81d605e3244f97992eccc68b02b750 --- /dev/null +++ b/copy_2_robot.txt @@ -0,0 +1,8 @@ + ---- How to copy a file from prace to robot via ssh connection ---------- + + 1. copy a normal file : + $ scp /home/faridalijani/thesis/MobileRobot/CameraCalibration/build/bin/Android_calibrated_data.yml robot@192.168.0.146:Farid/ROS_ArUco + + 2. copy a whole folder : + $ scp -r ROS_ArUco/ robot@192.168.0.146:Farid/ +