I have tried both MathJax and KaTex. It seems that MathJax works seamlessly with my current website.

KaTex

  • Xu Cheng provides a nice comparison between MathJax and KaTex . However, it is not the clear for beginners like me to configure it correctly within Jekyll.
  • WillDrevo provides a more detailed instruction on how to using KaTex with Jekyll. This doesn’t work for me as well maybe because of the file structure under
    1
    ./public/
    
    folder and nothing changes after I placed the
    1
    .js
    
    and
    1
    .css
    
    files as required.

MathJax

The experiences on MathJax is less painful compared with KaTex. Gaston Sanchez lists every steps in adding MathJax to Jekyll but unfortunately it doesn’t work for me as well. In this end, this thread solves the problem by simply adding the following line to

1
_layouts/default.html

1
<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>

in the section of

1
body
. And I can easily type a beautiful functions in my blog.

\[ \frac{Hello}{World^{2}} \]

Paper

Author: Raúl Mur-Artal and Juan D. Tardós

Title: Probabilistic Semi-Dense Mapping from Highly Accurate Feature-Based Monocular SLAM

How to run ORB-SLAM in Indigo

Simply remove line

1
<depend package="opencv2"/>

from manifest.xml and still compile the package using

1
rosmake
. The reason for it is because the opencv2 package doesn’t exist in ROS Indigo.

Code in Depth

ROS

  • Extract configuration paths under package using package API

    1
    ros::package::getPath("<pkg name>")+"/"+"<sub dir>"
    

OpenCV

  • Avoid changing parameters in each compilation, using OpenCV yml parser

1
cv::FileStorage fs(<path>.c_str(), cv::FileStorage::READ);
The format of the configuration file is below:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
%YAML:1.0
# Camera Parameters. Adjust them!
# Camera calibration parameters (OpenCV)
Camera.fx: 609.2855
Camera.fy: 609.3422
Camera.cx: 351.4274
Camera.cy: 237.7324

# Camera distortion paremeters (OpenCV) --
Camera.k1: -0.3492
Camera.k2: 0.1363
Camera.p1: 0.0
Camera.p2: 0.0

# Camera frames per second
Camera.fps: 30.0

...
...

# Constant Velocity Motion Model (0 - disabled, 1 - enabled [recommended])
UseMotionModel: 1

and the parameters can be parsed in runtime. Another option is using parameter parser in ROS.

  • How to convert
    1
    g2o::SE3Quat
    
    /
    1
    g2o::Sim3
    
    to Eigen matrix to
    1
    cv::Mat
    

Conversion between

1
g2o
format and
1
OpenCV

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
cv::Mat Converter::toCvMat(const g2o::SE3Quat &SE3)
{
    Eigen::Matrix<double,4,4> eigMat = SE3.to_homogeneous_matrix();
    return toCvMat(eigMat);
}
cv::Mat Converter::toCvMat(const Eigen::Matrix<double,3,1> &m)
{
    cv::Mat cvMat(3,1,CV_32F);
    for(int i=0;i<3;i++)
            cvMat.at<float>(i)=m(i);

    return cvMat.clone();
}
cv::Mat Converter::toCvMat(const g2o::Sim3 &Sim3)
{
    Eigen::Matrix3d eigR = Sim3.rotation().toRotationMatrix();
    Eigen::Vector3d eigt = Sim3.translation();
    double s = Sim3.scale();
    return toCvSE3(s*eigR,eigt);
}

To be continue …

Even though as a PhD candidate who should be focused on fundamental research and theoretical contributions, myself, is more interested in technique and implementing the ideas into real codes. The word Tek-ode comes from Tek-nology and code-ing.

What it about?

Most of the posts will be focused on some of my own experience when I developing ROS package for object recognition, pose estimation and path planning. During my work, I am also familiar with some of optimisation packages in SLAM such as Bundle Adjustment, G2O and most of the Structure-from-Motion packages. Some of related theoretical but simple posts will be here.

Thank you for your reading!