Skip to content

Installing robot_localization in PAL Ferrum Environment (ROS Melodic)

Code Repository: EKF Talos

1. Create a Catkin Workspace

mkdir -p ~/robot_localization/src
cd ~/robot_localization
catkin_make

2. Clone robot_localization

cd ~/robot_localization/src
git clone -b melodic-devel https://github.com/cra-ros-pkg/robot_localization.git

3. Create a Catkin Workspace

mkdir -p ~/robot_localization/src
cd ~/robot_localization
catkin_make

4. Clone robot_localization

cd ~/robot_localization/src
git clone -b melodic-devel https://github.com/cra-ros-pkg/robot_localization.git

5. Clone Geographic Info Packages

These provide geographic_msgs and geodesy.

cd ~/robot_localization/src
git clone https://github.com/ros-geographic-info/geographic_info.git

6. Install Missing ROS Packages

sudo apt-get install ros-melodic-uuid-msgs
sudo apt-get install ros-melodic-unique-id

7. Install GeographicLib

If apt-get install libgeographic-dev does not work, build it from source:

cd /tmp
git clone https://github.com/geographiclib/geographiclib.git
cd geographiclib
mkdir build && cd build
cmake ..
make -j$(nproc)
sudo make install

Note: After make install, the library is installed under /usr/local and the sources in /tmp can be removed.


8. Build the Workspace

cd ~/robot_localization
catkin_make
source ~/robot_localization/devel/setup.bash

Config

⚙️ Config Overview

🔹 Frames

map_frame: world
odom_frame: odom
base_link_frame: base_link
world_frame: world
publish_tf: true
Defines how coordinate frames are connected.
- map_frame / world_frame: global reference
- odom_frame: local drifting odometry
- base_link_frame: robot body (TALOS torso)
- publish_tf: publishes TF between frames


🔹 OptiTrack Input

pose0: /opti_track/world_base
pose0_config: [true, true, true, true, true, true, false, false, false, false, false, false, false, false, false]
pose0_queue_size: 5
pose0_differential: false
pose0_relative: false
pose0_rejection_threshold: 2.0
pose0_nodelay: false
pose0_rejection_threshold: 100000000000000000000000000.0
OptiTrack provides absolute position and orientation of the robot in the world frame.


🔹 IMU Input

imu0: /base_imu_hainer
imu0_config: [
  false, false, false,    # Position
  true,  true,  true,     # Orientation
  true,  true,  true,     # Linear velocity
  false, false, false,    # Angular velocity
  true,  true,  true      # Linear acceleration
]

imu0_nodelay: false
imu0_differential: false
imu0_relative: true
imu0_queue_size: 5

imu0_pose_rejection_threshold: 100.0
imu0_twist_rejection_threshold: 100.0
imu0_linear_acceleration_rejection_threshold: 100.0
imu0_remove_gravitational_acceleration: true
gravitational_acceleration: 9.81
IMU data provides orientation, linear velocity, and linear acceleration.


🔹 Process Noise Covariance

process_noise_covariance: [
  0.05, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       # x
  0, 0.05, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       # y
  0, 0, 0.06, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       # z
  0, 0, 0, 0.03, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       # roll
  0, 0, 0, 0, 0.03, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       # pitch
  0, 0, 0, 0, 0, 0.06, 0, 0, 0, 0, 0, 0, 0, 0, 0,       # yaw
  0, 0, 0, 0, 0, 0, 0.00025, 0, 0, 0, 0, 0, 0, 0, 0,    # dx
  0, 0, 0, 0, 0, 0, 0, 0.00000025, 0, 0, 0, 0, 0, 0, 0, # dy
  0, 0, 0, 0, 0, 0, 0, 0, 0.000004, 0, 0, 0, 0, 0, 0,   # dz
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0,     # droll
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0002, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.001, 0, 0,      # ddx
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00001
]

How to Run

python PublisherWorldBase.py

python hainer_imu.py

roslaunch robot_localization talos_ekf_opti_imu.launch

You should now see:
- A new topic: `talos/odometry/filtered`