Skip to content
Snippets Groups Projects
Commit bab21cb5 authored by Angel Santamaria-Navarro's avatar Angel Santamaria-Navarro
Browse files

Update README.md. Ready to be merged.

parent 59a14958
No related branches found
No related tags found
1 merge request!107Update README.md.
This commit is part of merge request !107. Comments created here will be created in the context of that merge request.
...@@ -39,317 +39,250 @@ Dependencies ...@@ -39,317 +39,250 @@ Dependencies
#### Eigen #### Eigen
[Eigen](http://eigen.tuxfamily.org). Linear algebra, header library. Eigen 3.2 is also a depencency of ROS-Hydro. In case you don't have ROS in your machine, you can install Eigen by typing: [Eigen](http://eigen.tuxfamily.org). Linear algebra, header library. Eigen 3.2 is also a depencency of ROS-Hydro. In case you don't have ROS in your machine, you can install Eigen by typing:
```terminal
$ sudo apt-get install libeigen3-dev $ sudo apt-get install libeigen3-dev
```
#### Ceres (5 steps) #### Ceres (5 steps)
[Ceres](http://www.ceres-solver.org/) is an optimization library. Currently, this dependency is optional, so the build procedure of Wolf skips part of compilation in case this dependency is not found on the system. **Installation** is desctibed at [Ceres site](http://www.ceres-solver.org/building.html). However we report here an alternative step by step procedure to install Ceres. [Ceres](http://www.ceres-solver.org/) is an optimization library. Currently, this dependency is optional, so the build procedure of Wolf skips part of compilation in case this dependency is not found on the system. **Installation** is desctibed at [Ceres site](http://www.ceres-solver.org/building.html). However we report here an alternative step by step procedure to install Ceres.
**(1)** Skip this step if Cmake 2.8.0+ and Eigen3.0+ are already installed. Otherwise install them with *apt-get*. **(1)** Skip this step if Cmake 2.8.0+ and Eigen3.0+ are already installed. Otherwise install them with *apt-get*.
**(2) GFLAGS**
- Git clone the source:
```terminal
$ git clone [https://github.com/gflags/gflags.git](https://github.com/gflags/gflags.git)
```
- Build and install with:
```terminal
$ cd gflags
$ mkdir build
$ cd build
$ cmake -DCMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -fPIC" -DGFLAGS_NAMESPACE="google" ..
$ make
$ sudo make install
```
libgflags.a will be installed at **/usr/local/lib** **(2) GFLAGS**
**(3) GLOG** - Git clone the source:
- Git clone the source: $ git clone [https://github.com/gflags/gflags.git](https://github.com/gflags/gflags.git)
- Build and install with:
$ cd gflags
$ mkdir build
$ cd build
$ cmake -DCMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -fPIC" -DGFLAGS_NAMESPACE="google" ..
$ make
$ sudo make install
libgflags.a will be installed at **/usr/local/lib**
```terminal **(3) GLOG**
$ git clone [https://github.com/google/glog.git](https://github.com/google/glog.git)
```
- Build and install with: - Git clone the source:
```terminal $ git clone [https://github.com/google/glog.git](https://github.com/google/glog.git)
$ cd glog
$ ./configure --with-gflags=/usr/local/ - Build and install with:
$ make
$ sudo make install
```
libglog.so will be installed at **/usr/local/lib** $ cd glog
$ ./configure --with-gflags=/usr/local/
$ make
$ sudo make install
libglog.so will be installed at **/usr/local/lib**
- Tourbleshooting: - Tourbleshooting:
If the `make` command fails with the error: `/bin/bash: aclocal-1.14: command not found`, install Glog with the following commands: If the `make` command fails with the error: `/bin/bash: aclocal-1.14: command not found`, install Glog with the following commands:
```terminal $ cd glog
$ cd glog $ sudo apt-get install autoconf
$ sudo apt-get install autoconf $ autoreconf --force --install
$ autoreconf --force --install $ ./configure --with-gflags=/usr/local/
$ ./configure --with-gflags=/usr/local/ $ make
$ make $ sudo make install
$ sudo make install
``` **(4) SUITESPARSE**
**(4) SUITESPARSE**
- Easy way!:
```terminal - Easy way!:
$ sudo apt-get install libsuitesparse-dev
```
**(5) CERES** $ sudo apt-get install libsuitesparse-dev
- Git clone the source: **(5) CERES**
- Git clone the source:
```terminal $ git clone [https://ceres-solver.googlesource.com/ceres-solver](https://ceres-solver.googlesource.com/ceres-solver)
$ git clone [https://ceres-solver.googlesource.com/ceres-solver](https://ceres-solver.googlesource.com/ceres-solver)
```
- Build and install with: - Build and install with:
```terminal $ cd ceres-solver
$ cd ceres-solver $ mkdir build
$ mkdir build $ cd build
$ cd build $ cmake -DCMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -fPIC" ..
$ cmake -DCMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -fPIC" .. $ make
$ make $ sudo make install
$ sudo make install
``` libceres.a will be installed at **/usr/local/lib** and headers at **/usr/local/include/ceres**
libceres.a will be installed at **/usr/local/lib** and headers at **/usr/local/include/ceres**
#### Yaml-cpp #### Yaml-cpp
Wolf uses YAML files for configuration and for saving and loading workspaces. To obtain it run: Wolf uses YAML files for configuration and for saving and loading workspaces. To obtain it run:
- Ubuntu: - Ubuntu:
```terminal
$ sudo apt-get install libyaml-cpp-dev
```
- Mac: $ sudo apt-get install libyaml-cpp-dev
- Mac:
```terminal $ brew install yaml-cpp
$ brew install yaml-cpp
```
We are shipping the CMAKE file `FindYamlCpp.cmake` together with Wolf. Find it at `[wolf]/cmake_modules/FindYamlCpp.cmake` We are shipping the CMAKE file `FindYamlCpp.cmake` together with Wolf. Find it at `[wolf]/cmake_modules/FindYamlCpp.cmake`
#### Optional: Laser Scan Utils (Install only if you want to use IRI's laser scan utils) #### Optional: Laser Scan Utils (Install only if you want to use IRI's laser scan utils)
**(1)** Git clone the source: **(1)** Git clone the source:
```terminal $ git clone [https://gitlab.iri.upc.edu/mobile_robotics/laser_scan_utils.git](https://gitlab.iri.upc.edu/mobile_robotics/laser_scan_utils.git)
$ git clone [https://gitlab.iri.upc.edu/mobile_robotics/laser_scan_utils.git](https://gitlab.iri.upc.edu/mobile_robotics/laser_scan_utils.git)
```
**(2)** Build and install: **(2)** Build and install:
```terminal
$ cd laser_scan_utils/trunk/build
$ cmake ..
$ make
$ sudo make install
```
$ cd laser_scan_utils/trunk/build
$ cmake ..
$ make
$ sudo make install
#### Optional: Raw GPS Utils (Install only if you want to use IRI's raw gps utils) #### Optional: Raw GPS Utils (Install only if you want to use IRI's raw gps utils)
**(1)** Git clone the source: **(1)** Git clone the source:
```terminal
$ git clone [https://github.com/pt07/raw_gps_utils.git](https://github.com/pt07/raw_gps_utils.git) $ git clone [https://github.com/pt07/raw_gps_utils.git](https://github.com/pt07/raw_gps_utils.git)
```
**(2)** Build and install:
**(2)** Build and install:
```terminal
$ cd raw_gps_utils/build $ cd raw_gps_utils/build
$ cmake .. $ cmake ..
$ make $ make
$ sudo make install $ sudo make install
```
Download and build Download and build
------------------ ------------------
#### Wolf C++ Library #### Wolf C++ Library
**Download:** **Download:**
```terminal
$ git clone [https://gitlab.iri.upc.edu/mobile_robotics/wolf.git](https://gitlab.iri.upc.edu/mobile_robotics/wolf.git) $ git clone [https://gitlab.iri.upc.edu/mobile_robotics/wolf.git](https://gitlab.iri.upc.edu/mobile_robotics/wolf.git)
```
**Build:**
**Build:**
```terminal
$ cd wolf $ cd wolf
$ mkdir build $ mkdir build
$ cd build $ cd build
$ cmake .. $ cmake ..
$ make $ make
$ sudo make install //optional in case you want to install wolf library $ sudo make install //optional in case you want to install wolf library
```
**Set the WOLF_ROOT environment variable**
**Set the WOLF_ROOT environment variable**
We need a platform-independent way to specify where is the WOLF project, so that code can locate relevant files at run-time. We need a platform-independent way to specify where is the WOLF project, so that code can locate relevant files at run-time.
For example, if we want to use YAML files for configuring sensors, `YAML::LoadFile(filename)` needs an absolute path to a `filename`. This name is platform-specific, and many times user-specific. For example, if we want to use YAML files for configuring sensors, `YAML::LoadFile(filename)` needs an absolute path to a `filename`. This name is platform-specific, and many times user-specific.
Usually, these files are out of the WOLF project. But for testing purposes, some of these files exist within the WOLF directories. Usually, these files are out of the WOLF project. But for testing purposes, some of these files exist within the WOLF directories.
Proceed as follows: Proceed as follows:
1. To run from __Terminal__ (the default), you need to create an environment variable WOLF_ROOT pointing to where the wolf project is. **(1)** To run from __Terminal__ (the default), you need to create an environment variable WOLF_ROOT pointing to where the wolf project is.
Edit file `~/.bashrc`, or `~/.bash_profile`, and add these lines: Edit file `~/.bashrc`, or `~/.bash_profile`, and add this line: `export WOLF_ROOT="/abs/path/to/wolf" `
```
export WOLF_ROOT="/abs/path/to/wolf"
```
Then you need to source the file to get effect, Then you need to source the file to get effect,
```
source ~/.bash_profile // or ~/.bashrc, of course source ~/.bash_profile // or ~/.bashrc, of course
```
2. If you are using Eclipse or other __GUIs__ and you want this environment variable to be accessed by them, edit the file `/etc/environment` (you need to use `sudo`) and add this line: **(2)** If you are using Eclipse or other __GUIs__ and you want this environment variable to be accessed by them, edit the file `/etc/environment` (you need to use `sudo`) and add this line: `WOLF_ROOT="/abs/path/to/wolf"`
``` Then reboot your machine.
WOLF_ROOT="/abs/path/to/wolf"
```
Then reboot your machine.
Alternatively, you can set up the environment variables in your GUIs only. Follow these guidelines: Alternatively, you can set up the environment variables in your GUIs only. Follow these guidelines:
- If you run your application from __eclipse__, do: - If you run your application from __eclipse__, do:
- Menu Run > Run configurations... - Menu Run > Run configurations...
- Add, or edit, a run configuration for the executable you want to run - Add, or edit, a run configuration for the executable you want to run
- Click on tab 'Environment' - Click on tab 'Environment'
- Add a variable named `WOLF_ROOT`, with value `/abs/path/to/wolf` - Add a variable named `WOLF_ROOT`, with value `/abs/path/to/wolf`
- If you run from __QtCreator__ - If you run from __QtCreator__
- Click on Left bar > Projects > Tab 'Build' - Click on Left bar > Projects > Tab 'Build'
- Under 'Build Environment', click 'Details' - Under 'Build Environment', click 'Details'
- Add variable `WOLF_ROOT` with value `/abs/path/to/wolf` - Add variable `WOLF_ROOT` with value `/abs/path/to/wolf`
- Click on Tab 'Run' - Click on Tab 'Run'
- Select your Run configuration - Select your Run configuration
- Under 'Run Environment', make sure it says 'Use Build Environment' - Under 'Run Environment', make sure it says 'Use Build Environment'
- If not, click on 'Details' - If not, click on 'Details'
- Under 'Base environment for this run configuration', select 'Build Environment' - Under 'Base environment for this run configuration', select 'Build Environment'
#### Wolf ROS Node #### Wolf ROS Node
- Git clone the source (inside your ROS workspace): - Git clone the source (inside your ROS workspace):
```terminal
$ git clone [https://github.com/IRI-MobileRobotics/wolf_ros.git](https://github.com/IRI-MobileRobotics/wolf_ros.git) $ git clone [https://github.com/IRI-MobileRobotics/wolf_ros.git](https://github.com/IRI-MobileRobotics/wolf_ros.git)
```
Using the `catkin_tools` package Using the `catkin_tools` package
-------------------------------- --------------------------------
**(1)** Install `catkin_tools` : **(1)** Install `catkin_tools` :
[`installation webpage.`](https://catkin-tools.readthedocs.io/en/latest/installing.html) [`installation webpage.`](https://catkin-tools.readthedocs.io/en/latest/installing.html)
. Installing on Ubuntu with `apt-get` - Installing on Ubuntu with `apt-get`
```terminal
$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu `lsb_release -sc` main" > /etc/apt/sources.list.d/ros-latest.list' $ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu `lsb_release -sc` main" > /etc/apt/sources.list.d/ros-latest.list'
$ wget http://packages.ros.org/ros.key -O - | sudo apt-key add - $ wget http://packages.ros.org/ros.key -O - | sudo apt-key add -
$ sudo apt-get update $ sudo apt-get update
$ sudo apt-get install python-catkin-tools $ sudo apt-get install python-catkin-tools
```
- Installing with [`pip`](https://pip.pypa.io/en/stable/installing/)
. Installing with [`pip`](https://pip.pypa.io/en/stable/installing/)
```terminal
$ sudo pip install -U catkin_tools $ sudo pip install -U catkin_tools
```
**(2)** Create a `catkin workspace` :
**(2)** Create a `catkin workspace` :
```terminal
$ cd $ cd
$ mkdir -p wolf_ws/src $ mkdir -p wolf_ws/src
$ cd wolf_ws/src $ cd wolf_ws/src
$ catkin_init_workspace $ catkin_init_workspace
$ cd .. $ cd ..
$ catkin_make $ catkin_make
```
**(3)** Setup your `bash_rc`: **(3)** Setup your `bash_rc`:
Add at the end of the ~/.bashrc file with the following command: Add at the end of the ~/.bashrc file with the following command:
```terminal $ echo "source ~/wolf_ws/devel/setup.bash" >> ~/.bashrc
echo "source ~/wolf_ws/devel/setup.bash" >> ~/.bashrc
```
Source your bash: Source your bash:
```terminal
source ~/.bashrc source ~/.bashrc
```
**(3)** Download `Ceres` :
**(3)** Download `Ceres` : In the previously created directory `~/my_workspace_directory/wolf_ws/src/` clone `Ceres` & `wolf`.
In the previously created directory `~/my_workspace_directory/wolf_ws/src/` clone `Ceres` & `wolf`.
```terminal
$ git clone [https://github.com/artivis/ceres_solver.git](https://github.com/artivis/ceres_solver.git) $ git clone [https://github.com/artivis/ceres_solver.git](https://github.com/artivis/ceres_solver.git)
```
**(4)** Download `wolf` : **(4)** Download `wolf` :
```terminal
$ git clone [https://gitlab.iri.upc.edu/mobile_robotics/wolf.git](https://gitlab.iri.upc.edu/mobile_robotics/wolf.git) $ git clone [https://gitlab.iri.upc.edu/mobile_robotics/wolf.git](https://gitlab.iri.upc.edu/mobile_robotics/wolf.git)
```
At this point you might need to switch to the `catkin_build` branch of the wolf project. At this point you might need to switch to the `catkin_build` branch of the wolf project.
```terminal
$ cd wolf $ cd wolf
$ git checkout catkin_build $ git checkout catkin_build
```
(optional) Download `wolf_ros` : (optional) Download `wolf_ros` :
```terminal
$ git clone [https://github.com/IRI-MobileRobotics/Wolf_ros.git](https://github.com/IRI-MobileRobotics/Wolf_ros.git) $ git clone [https://github.com/IRI-MobileRobotics/Wolf_ros.git](https://github.com/IRI-MobileRobotics/Wolf_ros.git)
```
**(5)** Let's Compile ! **(5)** Let's Compile !
The command below can be launch from any sub-directory in `~/my_workspace_directory/wolf_ws/`. The command below can be launch from any sub-directory in `~/my_workspace_directory/wolf_ws/`.
```terminal
$ catkin build $ catkin build
```
**(6)** Run tests: **(6)** Run tests:
```terminal
$ catkin run_tests $ catkin run_tests
```
Inspiring Links Inspiring Links
--------------- ---------------
...@@ -369,53 +302,43 @@ Kcachegrind is a graphical frontend for profiling your program and optimizing yo ...@@ -369,53 +302,43 @@ Kcachegrind is a graphical frontend for profiling your program and optimizing yo
- Ubuntu: - Ubuntu:
Get the programs with Get the programs with
```terminal
$ sudo apt-get install valgrind kcachegrind $ sudo apt-get install valgrind kcachegrind
```
- Mac OSX - Mac OSX
In Mac, you can use qcachegrind instead. To get it through Homebrew, type In Mac, you can use qcachegrind instead. To get it through Homebrew, type
```terminal
$ brew install valgrind qcachegrind $ brew install valgrind qcachegrind
```
I don't know if these packages are available through MacPorts. Try
```terminal I don't know if these packages are available through MacPorts. Try
$ ports search --name valgrind $ ports search --name valgrind
$ ports search --name qcachegrind $ ports search --name qcachegrind
```
If they are available, just do If they are available, just do
```terminal
$ sudo port install valgrind qcachegrind $ sudo port install valgrind qcachegrind
```
#### Do the profiling and watch the reports #### Do the profiling and watch the reports
Type in your `wolf/bin/` directory: Type in your `wolf/bin/` directory:
```terminal
$ cd bin/ $ cd bin/
$ valgrind --tool=callgrind ./my_program <my_prg_params> $ valgrind --tool=callgrind ./my_program <my_prg_params>
```
this produces a log report called `callgrind.out.XXXX`, where XXXX is a number. Then type this produces a log report called `callgrind.out.XXXX`, where XXXX is a number. Then type
- Ubuntu - Ubuntu
```terminal ```shell
$ kcachegrind callgrind.out.XXXX $ kcachegrind callgrind.out.XXXX
``` ```
- Mac OSX - Mac OSX
```terminal ```shell
$ qcachegrind callgrind.out.XXXX $ qcachegrind callgrind.out.XXXX
``` ```
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment