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/localand the sources in/tmpcan be removed.
8. Build the Workspace
cd ~/robot_localization
catkin_make
source ~/robot_localization/devel/setup.bash
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
-
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
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
🔹 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`