• How to build the Robotics Library from source code on Windows


    The Robotics Library is an open source C++ library for robot kinematics, motion planning and control.

    The official website provides a Windows installer. But it's release only and has no debug information. To better debug into the library, we need to build it from the source code.

    There's an official building instructions including its source code and all 3rd parties' download and building steps. But that description is for VS 2010 x64 release build, if building into VS 2008 win32 debug version, there're some extra work to do. This article describes all the required steps.

    Step-by-step guide

    The library can be built in many VS versions (2008, 2010, 2012, .. etc) and flavors (debug/release, win32/x64 bit). This article uses VS 2008 win32 debug version as an example. The process for other flavors (e.g VS 2012 x64 release) are similar.

     Part 1: Preparation

    1. Create a temporary folder c: emp, type command "subst S: c: emp". This makes the code path in pdb files starts with a virtual logic drive "S:" so it's easier to debug the robotics library code in the future.
    2. Download the required third parties following the official building instructions, extract them to different folders in S:3p. Here we only build the core library, so in a minimum we need Eigen, Boost, LibXml2, Coin3D and CGAL. If we want to build the demo programs then we need more 3ps like Qt, SOLID, .. etc.
    3. Download the source code of the robotics library, extract it to S:source. Here is what my folder structure looks like after doing all these.
    4. Install CMake ≥ 2.8.11. Here I install CMake 3.0.
    5. Start "Visual Studio 2008 Command Prompt". type the following command to allow multi-core compilation support.
            set VCBUILD_DEFAULT_OPTIONS=/M%NUMBER_OF_PROCESSORS%
            set CL=/MP

    Part 2: Build the 3rd parties

    1. Boost:
      1. change directory to the boost folder. execute the following command:
          bootstrap.bat
      2. execute the following command:
        b2 toolset=msvc-9.0 install address-model=32 --build-type=complete --prefix="C:Program Files (x86)Boost"
      3. add C:Program Files (x86)Boostlib to the system's PATH variable.
      4. execute the following command:
        set BOOST_ROOT=%ProgramFiles(x86)%Boost
    2. Eigen:
           change directory to the Eigen folder and execute the following command:
             mkdir Default
      cd Default
      cmake -G "Visual Studio 9 2008" -D CMAKE_INSTALL_PREFIX="C:Program Files (x86)eigen" ..
      cmake --build --config Debug --target INSTALL
    3. LibXml2: 
      1. change directory to the subdirectory "win32" and execute 
        cscript configure.js compiler=msvc debug=yes iconv=no prefix="C:Program Files (x86)libxml2"
      2. edit the file "config.msvc" in that folder, find the line PREFIX=C:Program Files (x86)libxml2, change it to PREFIX="C:Program Files (x86)libxml2". (use double quote to enclose the path).
      3. execute the following command to build the library
        nmake /f Makefile.msvc
      4. change directory to the folder "bin.msvc", execute the following command to embed the manifest into the generated dll
        mt.exe -manifest libxml2.dll.manifest -outputresource:libxml2.dll;2
      5. change director to "win32", execute teh following command to install the library to c:Program Files (x86)
        nmake /f Makefile.msvc install
      6. add the C:Program Files (x86)libxml2in to the system's PATH variable
    4. Coin3D:
      1. open the Visual Studio solution file buildmsvc9coin3.sln. Select the desired configuration (here are the dll-debug and lib-debug) and build. It'll report "coin3 docs" project built fails (possibly due to lack of doxygen), which is OK.
      2. create a folder "c:Program Files (x86)coin".
      3. create a temporary folder named like "c: empinstall". Note this temp folder's full path should have no white space. We'll firstly install Coin3D to it and then copy all the files to "c:Program Files (x86)coin".
      4. change directory to the buildmsvc9 folder, type the following command
           set COINDIR=c:	empinstall
           ..miscinstall-sdk.bat dll debug msvc9 coin3
        xcopy /s %COINDIR% "%programfiles(x86)%coin" 
    5. CGAL:
      1. change directory to the CGAL folder, open the CMakeLists.txt, remove the following line:
        list (INSERT CGAL_ESSENTIAL_3RD_PARTY_LIBRARIES 0 GMP MPFR)
      2. execute the following command
        mkdir Default
        cd Default
        cmake -G "Visual Studio 9 2008" -D CMAKE_INSTALL_PREFIX="C:Program Files (x86)cgal" -D WITH_CGAL_ImageIO=OFF -D WITH_CGAL_Qt3=OFF -D WITH_CGAL_Qt4=OFF -D WITH_GMP=OFF -D WITH_MPFR=OFF ..
        cmake --build . --config Debug --target INSTALL

    Part 3: Build the Robotics Library

    The building instructions builds the library in command line, while I meet some problem when using it. Here are the steps of how to build it with CMake-gui and VS IDE.

    1. change directory to the robotics library folder, open the CMakeLists.txt. Change the following options to "FALSE" because we don't want to build the demos and tests.

      option(BUILD_DEMOS "Build demos" FALSE)
      option(BUILD_EXTRAS "Build extras" FALSE)
      option(BUILD_RL_MATH "Build RL::MATH" TRUE)
      option(BUILD_RL_UTIL "Build RL::UTIL" TRUE)
      option(BUILD_RL_XML "Build RL::XML" TRUE)
      option(BUILD_TESTS "Build tests" FALSE)
       

    2. open CMake-gui, specify the source directory as "S:source l-0.6.2" and build directory as "S:source l-0.6.2uild". click "Configure", select "Visual Studio 9 2008" as the generator, keeping the default option of "Use default native compilers'.


    3. It'll prompt "LIBXML2_INCLUDE_DIRS" can't be found, specify it as "C:Program Files (x86)libxml2includelibxml2". Also, add an entry "BOOST_ROOT", specifying its value as "C:Program Files (x86)Boost".


    4. Click "Configure", there'll be no error any more. Click "Configure" again so there's no red item. Click "Generate" to generate the solution files.
    5. Open the "build l.sln" in VS2008. Find these 8 projects: rlhal, rlkin, rlmath, rlmdl, rlplan, rlsg, rlutil, rlxml. Change their default pdb files name to "$(ProjectName)d.pdb" as following:
       

    6. Build the solution.
    7. Copy the pdb files to the installed folderxcopy /s  libdebug*.pdb "c:Program Files (x86) llib"
    8. Change directory to the "build" folder. Execute the following commands to copy the header files, library files and pdb files to "c:Program Files (x86) l"
      cmake --build . --config Debug --target INSTALL
      xcopy /s  libdebug*.pdb "c:Program Files (x86) llib"
    Note:
    • If building in release, replace the "debug", "Debug" command options to "release", "Release".
    • If building in x64, start the "Visual Studio x64 Win64 Command Prompt". And replace the installation folder from "c:Program Files (x86)" to "c:Program Files"
    • If building in other VS versions, replace the tool set and visual studio version string. E.g., for VS 2012 x64 version, replace "msvc-9.0" with "msvc-11.0", replace "Visual Studio 9 2008" with "Visual Studio 11 Win64". A complete list of CMake 3.0 VS generator string can be found here.
    • See the official building instructions for more examples on 64 bit release build instructions.

    Part 4: Package the library

    The built Robotics Library files and its 3rd parties are in "c:Program Files (x86)", they don't have to be there. And we can copy all their lib files to one place so the application referencing will be easier.

    Copy the following content to a batch file and execute it to put all the files (header, lib, dll) into a similar folder structure as the Robotics Library's official Windows installation.

    ====================================================================

    set RL_ROOT=%programfiles(x86)%

    REM copy the header files
    xcopy /s %RL_ROOT%Boostincludeoost-1_55 %RL_ROOT% linclude
    xcopy /s %RL_ROOT%cgalinclude %RL_ROOT% linclude
    mkdir %RL_ROOT% lincludecoin
    xcopy /s %RL_ROOT%coininclude %RL_ROOT% lincludecoin
    mkdir %RL_ROOT% lincludeEigen
    xcopy /s %RL_ROOT%eigenincludeeigen3Eigen %RL_ROOT% lincludeEigen
    xcopy /s %RL_ROOT%libxml2includelibxml2 %RL_ROOT% linclude

    REM copy the lib files
    xcopy /s %RL_ROOT%Boostlib %RL_ROOT% llib
    xcopy /s %RL_ROOT%cgallib %RL_ROOT% llib
    xcopy /s %RL_ROOT%coinlib %RL_ROOT% llib
    xcopy /s %RL_ROOT%libxml2lib %RL_ROOT% llib

    REM copy the dll files
    mkdir %RL_ROOT% lin
    xcopy /s %RL_ROOT%cgalin %RL_ROOT% lin
    xcopy /s %RL_ROOT%coinin %RL_ROOT% lin
    xcopy /s %RL_ROOT%libxml2in %RL_ROOT% lin

    REM remove the old files
    rmdir /s /q %RL_ROOT%Boost
    rmdir /s /q %RL_ROOT%cgal
    rmdir /s /q %RL_ROOT%coin
    rmdir /s /q %RL_ROOT%eigen
    rmdir /s /q %RL_ROOT%libxml2

    Part 5: Test the library

    1. Create a win32 console application, copy below content to the main .cpp file.
      #include <iostream>
      #include <rl/math/Transform.h>
      #include <rl/math/Unit.h>
      #include <rl/mdl/Kinematic.h>
      #include <rl/mdl/Model.h>
      #include <rl/mdl/XmlFactory.h>
      
      int
      main(int argc, char** argv)
      {	
      	rl::mdl::XmlFactory factory;
      	rl::mdl::Kinematic * kinematics = dynamic_cast<rl::mdl::Kinematic *>(factory.create("C:\Program Files (x86)\rl-0.6.2\share\rl\examples\rlmdl\unimation-puma560.xml"));
      	rl::math::Vector q(6);
      	q << 10, 10, -20, 30, 50, -10;
      	q *= rl::math::DEG2RAD;
      	kinematics->setPosition(q);
      	kinematics->forwardPosition();
      	rl::math::Transform t = kinematics->getOperationalPosition(0);
      	rl::math::Vector3 position = t.translation();
      	rl::math::Vector3 orientation = t.rotation().eulerAngles(2, 1, 0).reverse();
      	std::cout << "Joint configuration in degrees: " << q.transpose() * rl::math::RAD2DEG << std::endl;
      	std::cout << "End-effector position: [m] " << position.transpose() << " orientation [deg] " << orientation.transpose() * rl::math::RAD2DEG << std::endl;
      	return 0;
      }
      

        

    2. Set header file search path to "%RL_ROOT% linclude"
    3. Add "rlmdld.lib rlxmld.lib rlmathd.lib libxml2.lib" as library dependencies. Set library file search path to "%RL_ROOT% llib"
    4. Add "EIGEN_DONT_ALIGN" to "C++"–> "Preprocessor" --> "Preprocessor Definitions." (this is to prevent the Eigen issue on 32 bit platforms)
    5. Build the application, copy libxml2.dll to the exe folder. Run the application, you'll get the following result:

    Reference

    http://www.roboticslibrary.org/tutorials/build-windows

  • 相关阅读:
    IOS开发-UIDynamic(物理仿真)简单使用
    IOS开发---视频录制
    利用阿里云服务器免费体验word press博客、个人网站
    Next Cloud通过修改数据库表,达到替换文件而不改变分享的链接地址的效果,以及自定义分享链接地址
    非华为笔记本如何实现多屏协同和一碰互传以及一些问题的解决方法
    如何申请XShell和XFtp的免费家庭学生版本
    PicGo配合Typora怎么配置Chevereto图床,PicGo的Chevereto图床配置
    Ubuntu无法正常引导,进不去Ubuntu,安装Ubuntu20和Window10双系统后,
    搭建自己的Chevereto免费图床—写博客更加得心应手了!
    如何搭建自己的本地服务器,Web服务器
  • 原文地址:https://www.cnblogs.com/kaige/p/how_to_build_the_robotics_library_from_source_code_on_windows.html
Copyright © 2020-2023  润新知