Fusing Vision and Odometry
for Accurate Indoor Robot Localization
Bastian Bischoff, Duy Nguyen-Tuong, Felix Streichert, Marlon Ewert
Robert Bosch GmbH, Corporate Research
Robert-Bosch-Str. 2, 71701 Schwieberdingen, Germany
Alois Knoll
TU Munich, Robotics and Embedded Systems
Boltzmannstr. 3, 85748 Munich, Germany
Abstract—For service robotics, localization is an essential
component required in many applications, e.g. indoor robot
navigation. Today, accurate localization relies mostly on high-end
devices, such as A.R.T. DTrack, VICON systems or laser scanners.
These systems are often expensive and, thus, require substantial
investments. In this paper, our focus is on the development of
a localization method using low-priced devices, such as cameras, while being sufficiently accurate in tracking performance.
Vision data contains much information and potentially yields
high tracking accuracy. However, due to high computational
requirements vision-based localization can only be performed at
a low frequency. In order to speed up the visual localization and
increase accuracy, we combine vision information with robots
odometry using a Kalman-Filter. The resulting approach enables
sufficiently accurate tracking performance (errors in the range
of few cm) at a frequency of about 35Hz. To evaluate the
proposed method, we compare our tracking performance with the
high precision A.R.T. DTrack localization as ground truth. The
evaluations on real robot show that our low-priced localization
approach is competitive for indoor robot localization tasks.
I. INTRODUCTION
Localization is employed to estimate the position and orientation of a mobile robot given a map of the surroundings. There
has been a lot of research activities in this field, as localization
is a crucial component for many robot applications, such as
navigation and autonomous driving [1], [2], [3]. Typically,
localization methods require accurate sensor information, for
example, from laser scanners for outdoor applications [3] or
using infrared-based systems such as DTrack and VICON
for indoor navigation [4]. Localization needs to be performed
accurately at a high frequency. DTrack, for example, is able
to track the mobile robot at a rate of 60Hz with an accuracy
of 1mm. However, the major drawback of such infrared-based
systems is the limited tracking area (e.g. 3×3m2 for DTrack)


The problem with using separate SLAM package like OKVIS is the license as most
of them are GPLv3


[ ![Very Hungry Caterpillar™ Shirt: World of Eric Carle™+ Little Goodall
by...](//i.etsystatic.com/6018612/r/il/7591e4/3868173454/il_570xN.3868173454_gxfr.jpg)
](////cryptomnesia.rssing.com/chan-1183730/article16627.html#c1183730a16627i1139077293)


[ Remove ADS ](//www.rssing.com/account.php?r=27)


#  [ robot localization weird bahavior when playing bag
](//question3152.rssing.com/chan-47151955/article432-live.html)


I am trying to use `robot_localization` package to fuse GPS and IMU to
localize a robot. First, I am just trying to run the package using a provided
`test1.bag` file. This bag file contains wheel odometry, GPS and IMU data.
Published topics: * /fix [sensor_msgs/NavSatFix] 1 publisher *
/husky_velocity_controller/odom [nav_msgs/Odometry] 1 publisher * /rosout
[rosgraph_msgs/Log] 1 publisher * /imu/data [sensor_msgs/Imu] 1 publisher *
/rosout_agg [rosgraph_msgs/Log] 1 publisher * /clock [rosgraph_msgs/Clock] 1
publisher Subscribed topics: * /rosout [rosgraph_msgs/Log] 1 subscriber When I
run my launch file (attached below), `navsat_transform_node` doesn't look like
outputting correct GPS data on `/odometry/gps` topic. Here is a sample message
and position x, y, z are always 0. \--- header: seq: 34 stamp: secs:
1432235513 nsecs: 236048936 frame_id: "map" child_frame_id: '' pose: pose:
position: x: 0.0 y: 0.0 z: 0.0 orientation: x: 0.0 y: 0.0 z: 0.0 w: 1.0
covariance: [0.8894928039375595, -0.43224622199958357, 0.003407529530502812,
0.0, 0.0, 0.0, -0.43224622199958346, 3.1603611292875122,
-0.018528617597497184, 0.0, 0.0, 0.0, 0.003407529530502812,
-0.018528617597497184, 0.8101460667749296, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] twist:
twist: linear: x: 0.0 y: 0.0 z: 0.0 angular: x: 0.0 y: 0.0 z: 0.0 covariance:
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0] \--- I am guessing it has something to do with
the warning message? ![image description](/upfiles/15366855064377583.png) Here
is my launch file:  Here is my .YAML file: ekf_se_odom: frequency: 30
sensor_timeout: 0.1 two_d_mode: false transform_time_offset: 0.0
transform_timeout: 0.0 print_diagnostics: true debug: false map_frame: map
odom_frame: odom base_link_frame: base_link world_frame: odom odom0:
/husky_velocity_controller/odom odom0_config: [false, false, false, false,
false, false, true, true, true, false, false, true, false, false, false]
odom0_queue_size: 10 odom0_nodelay: true odom0_differential: false
odom0_relative: false imu0: imu/data imu0_config: [false, false, false, true,
true, false, false, false, false, true, true, true, true, true, true]
imu0_nodelay: false imu0_differential: false imu0_relative: false
imu0_queue_size: 10 imu0_remove_gravitational_acceleration: true use_control:
false process_noise_covariance: ... initial_estimate_covariance: ...
ekf_se_map: frequency: 30 sensor_timeout: 0.1 two_d_mode: false
transform_time_offset: 0.0 transform_timeout: 0.0 print_diagnostics: true
debug: false map_frame: map odom_frame: odom base_link_frame: base_link
world_frame: map odom0: /husky_velocity_controller/odom odom0_config: [false,
false, false, false, false, false, true, true, true, false, false, true,


###  IV-B  State transition model


You can’t perform that action at this time.


[ Sign up for free ](/join?source=comment-repo) **to join this conversation on
GitHub** . Already have an account? [ Sign in to comment
](/login?return_to=https%3A%2F%2Fgithub.com%2Fintrolab%2Frtabmap_ros%2Fissues%2F857)


April 4, 2018, 12:13 am


Two remarks are in order regarding the interaction between the two layers.
Firstly, it is reasonable to expect that different sources will have different
sampling frequencies and the second layer must be capable of handling such
mismatch. Secondly, when multiple absolute position sources are considered,
each might provide data in a different reference frame. For the fusion to work
correctly, a calibration process to estimate the roto-translation between such
references is necessary. We solve this issue by collecting raw data from the
different sources in a first mapping experiment. The data can then be post-
processed to extract the trajectory segments in which both sources provide
reliable measurements and the corresponding trajectories get aligned by
minimizing the point-to-point mean squared error. The minimization can be
performed in closed form by means of the method by Horn  [ [ 10
](https://arxiv.org/html/2403.13452v1#bib.bib10) ]  .


[ Sign up
](/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-
name%3E%2F%3Crepo-
name%3E%2Fvoltron%2Fissues_fragments%2Fissue_layout&source=header-
repo&source_repo=introlab%2Frtabmap_ros)


[ snap_core22 ](/facontidavide/PlotJuggler/tree/main/snap_core22
"snap_core22")

|


[ plotjuggler.ico ](/facontidavide/PlotJuggler/blob/main/plotjuggler.ico
"plotjuggler.ico")

|


I am trying to localize using GPS+IMU only. For now, I am running `test1.bag`
included in `robot_localization/test` folder. My configuration file:
ekf_se_odom: frequency: 30 sensor_timeout: 0.1 two_d_mode: false
transform_time_offset: 0.0 transform_timeout: 0.0 print_diagnostics: true
debug: false map_frame: map odom_frame: odom base_link_frame: base_link
world_frame: odom odom0: odometry/wheel odom0_config: [false, false, false,
false, false, false, false, false, false, false, false, false, false, false,
false] odom0_queue_size: 10 odom0_nodelay: true odom0_differential: false
odom0_relative: false imu0: imu/data imu0_config: [false, false, false, true,
true, true, false, false, false, true, true, true, true, true, true]
imu0_nodelay: false imu0_differential: false imu0_relative: false
imu0_queue_size: 10 imu0_remove_gravitational_acceleration: true use_control:
false process_noise_covariance: [1e-3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1e-3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1e-3, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0.3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0.1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0.1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.03, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0.3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.3,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.03, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0.03, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.03, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.03] initial_estimate_covariance:
[1e-9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1e-9, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 1e-9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1.0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 1e-9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 1.0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 1.0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1.0] ekf_se_map: frequency: 30 sensor_timeout: 0.1 two_d_mode: false
transform_time_offset: 0.0 transform_timeout: 0.0 print_diagnostics: true
debug: false map_frame: map odom_frame: odom base_link_frame: base_link
world_frame: map odom0: odometry/wheel odom0_config: [false, false, false,
false, false, false, false, false, false, false, false, false, false, false,
false] odom0_queue_size: 10 odom0_nodelay: true odom0_differential: false
odom0_relative: false odom1: odometry/gps odom1_config: [true, true, true,
false, false, false, false, false, false, false, false, false, false, false,
false] odom1_queue_size: 10 odom1_nodelay: true odom1_differential: false


[ ](//www.rssing.com/index.php)


0
5
10
time (s)
angle (deg)
Fig. 3. For experiment 1, the goal was to drive a square of 150cm edge length with translation only. The left plot shows the robots x, y position, the right
plot shows the angle θ over time. Due to mechanical uncertainties of the robot, the square (black solid line) is somewhat rotated. The KVO localization is
represented by the blue solid line, the green crosses show the vision pose estimates, odometry is the dashed (magenta) line.
0
Ground Truth KVO Vision Odometry
0 50 100 150
0
50
100
150
x−position (cm)
y−position (cm)
0 10 20 30 40 50 60 −50
0
50
100
150
200
250
300
350
time (s)
angle (deg)
Fig. 4. For experiment 2, the goal was to follow a square-trajectory with 150cm edge length with additional rotation in the corners. The left plot shows the
ground truth position (black solid line), as well as the position estimates of the localization methods KVO, vision and odometry. The right plot displays the
angle over time.
0
Ground Truth KVO Vision Odometry
−50 0 50 100 −50
0
50
100
150
x−position (cm)
y−position (cm)


August 15, 2018, 4:05 pm


Member


[ Sign in
](/login?return_to=https%3A%2F%2Fgithub.com%2Fintrolab%2Frtabmap_ros%2Fissues%2F857)


For the imu callback in OdometryROS, the ` bufferedData_ ` will be set when
the first image is received:


[ contributors.txt ](/facontidavide/PlotJuggler/blob/main/contributors.txt
"contributors.txt")

|


[ _≪_ Previous: navSat with hectorMapping for outdoor navigation
](//question3152.rssing.com/chan-47151955/all_p22.html#c47151955a427 "Previous
Article")


  Windows Binary installer

This installer does **not** include ROS plugins.

**Windows Installer** : [ PlotJuggler-Windows-3.9.0-installer
](https://github.com/facontidavide/PlotJuggler/releases/download/3.9.0/PlotJuggler-
Windows-3.9.0-installer.exe)


#  [ robot_localization with cartographer and amcl
](//question3152.rssing.com/chan-47151955/article436-live.html)


[ docs ](/facontidavide/PlotJuggler/tree/main/docs "docs")

|

|


[ LICENSE.md ](/facontidavide/PlotJuggler/blob/main/LICENSE.md "LICENSE.md")

|


All reactions


* [ GitHub Sponsors  Fund open source developers  ](/sponsors)


[ ↂ
](////arrests130.rssing.com/chan-8670761/article2736.html#c8670761a2736i331208640
"CALIFORNIA: DUI arrests by Chico Police March 2019")


Clear


[ ](//www.rssing.com/index.php?zw=2123 "Home") [ $ ](javascript:; "MoMoney")


edited


To see all available qualifiers, see our [ documentation
](https://docs.github.com/search-github/github-code-search/understanding-
github-code-search-syntax) .


The final validation experiments aim to assess the effect of losing both
position measures, a severe but not uncommon circumstance in real-world
deployments of autonomous vehicles. To simulate this scenario, both the GNSS
and Cartographer fusion are disabled from  t  =  220    s  𝑡  220  𝑠
t=220~{}s  italic_t = 220 italic_s  , leaving the algorithm running with
proprioceptive inputs only for  130    s  130  𝑠  130~{}s  130 italic_s  .
The trajectory estimated by the filter fed with both inputs was employed as
ground truth. Figure [ 8  ](https://arxiv.org/html/2403.13452v1#S5.F8 "Figure
8 ‣ V-C Loss of all absolute pose sources ‣ V VALIDATION RESULTS ‣ Mobile
Robot Localization: a Modular, Odometry-Improving Approach") shows the values
of the estimated radii and bias. Notice how the loss of position measurements
(vertical dashed line) stops their estimation since we assume their evolution
to be static.


RSSing.com


[ LICENSE.md ](/facontidavide/PlotJuggler/blob/main/LICENSE.md "LICENSE.md")

|

|


![Class 10 Sanskrit Grammar Book Solutions सन्धिः](//www.learncbse.in/wp-
content/uploads/2017/08/NCERT-Solutions-for-Class-10th-Sanskrit-
Chapter-1-सन्धि-1.jpg)


###  Footer navigation


[ ](javascript:; "Like") 0


Another thing I tried is to use the robot_localization package for noetic. (I
read somewhere that I needed to use this package for sensor fusion??)


    * [ All features ](/features)
    * [ Documentation  ](https://docs.github.com)
    * [ GitHub Skills  ](https://skills.github.com/)
    * [ Blog  ](https://github.blog)


[ _≫_ Next: Kalman Filter implementation for a drone. Help confirming my
sensor inputs are correct.
](//question3152.rssing.com/chan-47151955/all_p22.html#c47151955a425 "Next
Article")


  Data sources (file and streaming)

  * Load CSV files.
  * Load [ ULog ](https://dev.px4.io/v1.9.0/en/log/ulog_file_format.html) (PX4).
  * Subscribe to many different streaming sources: MQTT, WebSockets, ZeroMQ, UDP, etc.
  * Understand data formats such as JSON, CBOR, BSON, Message Pack, etc.
  * Well integrated with [ ROS ](https://www.ros.org/) : open _rosbags_ and/or subscribe to ROS _topics_ (both ROS1 and ROS2).
  * Supports the [ Lab Streaming Layer ](https://labstreaminglayer.readthedocs.io/info/intro.html) , that is used by [ many devices ](https://labstreaminglayer.readthedocs.io/info/supported_devices.html) .
  * Easily add your custom data source and/or formats...

[ ![](/facontidavide/PlotJuggler/raw/main/docs/data_sources.svg)
](/facontidavide/PlotJuggler/blob/main/docs/data_sources.svg)


* Open Source


![Noise Industries FxFactory Pro 3.0.2 \[MAC\]](//www.techwench.com/wp-
content/uploads/2010/11/Noise-Industries-FxFactory-Pro-2.jpg)


![Murder in Australia:
2010](//2.bp.blogspot.com/-zEjZIawSSso/UMBtH81fykI/AAAAAAAAAMU/PNsllPLf124/s640/hunterian.jpg)


[ Search ](javascript:;)


[ ](javascript:; "Ouch") 0


The second layer of the proposed localization architecture consists of a
filter based on the Extended Kalman Filter framework. Under this extremely
popular framework, a model is employed to predict the evolution of the state
between iterations and the prediction is subsequently corrected by integrating
measures. The applied correction is proportional to the error between measured
values and measurement predictions, obtained through an observation model from
the predicted state. In the proposed approach, and contrary to  [ [ 9
](https://arxiv.org/html/2403.13452v1#bib.bib9) ]  , we advocate for vehicle-
specific models. This enables the use of formulations that are better
tailored: the more accurate the state transition model is the more robust the
localization will be to failures in the absolute localization error sources.


vision generally lead to a low tracking frequency. Another
drawback of vision is the time-delay problem, i.e. since it
takes time to compute a pose estimation from a camera picture,
the resulting estimation corresponds to a robot’s pose in the
past. In practice, the resulting time-delay can deteriorate the
localization performance. In this work, we employ a standard
off-the-shelf monovision camera. For visual localization, artificial black-and-white markers are placed on the ceiling to
achieve high robustness and tracking accuracy. The markers
are squares with 10cm edge length. The 10×10cm2 square is
divided into a 4×4 black-and-white pattern, resulting in 16456
possible markers. The positions and orientations of the markers
in the world-frame are measured beforehand. Subsequently,
transformations between robot’s pose relative to the markers
and pose in the global world-frame can be made.
We use the ARToolKit library [11] to track the visual
markers. Here, 30 markers are employed to cover an area
of about 15 m2. The tool searches for the black boarders of
markers in the camera picture. A detected marker is reduced
to a 16 × 16 pixel image and can then be compared to the
set of known patterns. Since the marker dimensions are fixed,
the pose of the marker in the camera frame can be calculated.
For localization, we invert this transformation to get the pose
of the robot in the marker frame. This pose is subsequently
transformed to a global pose estimation of the robot in the
world-frame. Accordingly, every marker in the camera field of
view gives an estimation of the robot pose. We take the mean
of all these pose estimations to average out the noise.
III. KALMAN-FILTERED VISION AND ODOMETRY
In this section, we describe a method to fuse the information
of vision and odometry for localization using a Kalman-Filter.
The approach unifies the strengths of both methods, i.e. the
high tracking frequency of odometry and the accuracy of
vision.
A. Kalman-Filter
Kalman-Filters are a widely used method to estimate a state
st given noisy measurements from different sensors, for more
348
details see [12]. Here, the belief state ˆst ∼ N (μt, Σt) at time
t is represented as a normal distribution. The system is given
by the equations


  Provide feedback

We read every piece of feedback, and take your input very seriously.

Include my email address so I can be contacted

Cancel  Submit feedback


#  [ IMU orientation mismatch with RVIZ
](//question3152.rssing.com/chan-47151955/article422-live.html)


[ Remove ADS ](//www.rssing.com/account.php?r=27)


[ requirements.txt ](/facontidavide/PlotJuggler/blob/main/requirements.txt
"requirements.txt")

|


[ plotjuggler.svg ](/facontidavide/PlotJuggler/blob/main/plotjuggler.svg
"plotjuggler.svg")

|


[ vcpkg.json ](/facontidavide/PlotJuggler/blob/main/vcpkg.json "vcpkg.json")

|


[ _≪_ Previous: robot localization weird bahavior when playing bag
](//question3152.rssing.com/chan-47151955/all_p22.html#c47151955a432 "Previous
Article")


[ Browse latest ](//question3152.rssing.com/chan-47151955/index-latest.php) [
View live ](//question3152.rssing.com/chan-47151955/article421-live.html)


  History

[ 2,273 Commits  ](/facontidavide/PlotJuggler/commits/main/)

[ ](/facontidavide/PlotJuggler/commits/main/)


[ _≪_ Previous: robot_localization covariance grows too big
](//question3152.rssing.com/chan-47151955/all_p22.html#c47151955a437 "Previous
Article")


[ ](//www.rssing.com/index.php?zw=2123 "Home") [ $ ](javascript:; "MoMoney")


[ ](javascript:; "Like") 0


[ ](javascript:; "Share Article") [
](//www.rssing.com/contact.php?r=o6&u=%2F%2Fquestion3152.rssing.com%2Fchan-47151955%2Farticle422-live.html
"Article Support")


Cancel  Submit feedback


[ ![Have you seen Michael Wines? Burien man has been missing since
Saturday,...](//b-townblog.com/wp-
content/uploads/2024/04/michael-3shoe.jpg?_t=1712879471)
](////normandy480.rssing.com/chan-74604448/article56.html#c74604448a56i1857302427)


Pick a username


  * [ Login  ](//www.rssing.com/account.php?a=lgi&t=%2F%2Fquestion3152.rssing.com%2Fchan-47151955%2Fall_p22.html)
    * [ Account ](//www.rssing.com/account.php)
    * [ Sign Up ](//www.rssing.com/account.php?a=reg&t=%2F%2Fquestion3152.rssing.com%2Fchan-47151955%2Fall_p22.html)


I'm working on some projects and it occurred to me that I've never seen any
documents where people specify their robot base odometry drift to benchmark
what a typical amount of drift would be and what's the point where I can say I
have "good" odometry. For instance, when I move my base in a 20 meter
perimeter square, in forward direction I have about 20cm drift (1%) and in the
lateral direction, I have about 50cm (2.5%) drift on a differential drive
base. Can anyone share here their specification or documentation of others?


[ plotjuggler.ico ](/facontidavide/PlotJuggler/blob/main/plotjuggler.ico
"plotjuggler.ico")

|

|


Basic setup


[ docs ](/facontidavide/PlotJuggler/tree/main/docs "docs")

|


###  [ Murder in Australia: 2010
](////murder540.rssing.com/chan-6412619/article1.html#c6412619a1i1155785771)


**[ matlabbe ](/matlabbe) ** commented  Dec 21, 2022  •


[ ](javascript:; "Ouch") 0


[ _≫_ Next: Confused with setup for robot_localization
](//question3152.rssing.com/chan-47151955/all_p22.html#c47151955a424 "Next
Article")


Proprioceptive sensors measure the internal state of the vehicle, like IMUs
and encoders.


[ ![People's Blog • First Pictures of the Eclipse ! !
!](//thepeoplescube.com/red/download/file.php?id=57243&sid=d61d4527be50ef499d8f3761aad83688)
](////satire6144.rssing.com/chan-78334822/article122.html#c78334822a122i1295535114)


[ package.xml ](/facontidavide/PlotJuggler/blob/main/package.xml
"package.xml")

|

|


For the vision localization, the markers are placed on a
grid with 70cm edge length and all markers have the same
orientation. This results in 2-3 markers in the camera frame
for most of the time. For the localization task, we have
hard environment conditions. The lamps on the ceiling are
turned on, which increases the difficulty of correct marker
detection. Our robot has been used for several years, hence
mechanical wear and tear becomes noticeable. The robot
also has a high, unsymmetrical setup which displaces the
center of mass unfavorably. This leads to inaccurate odometry
information. In some cases, vision pose estimates are faulty
because a marker has been confused with another marker, or a
structure on the ceiling has been interpreted as visual marker
by mistake. Such faulty vision pose estimation are detected
using the state uncertainty of the Kalman-Filter. If the position
or orientation of the vision estimation is outside of the 2σ
region, as described in Section III-B, the estimation is assumed
to be corrupted and ignored. For the Kalman-Filter, the noise
matrices Rt and Qt for pose estimation are set beforehand.
We assume x and y errors to be independent with standard
deviations of 10cm in each direction for vision estimation,
and a standard deviation of 5cm for odometry estimation. The
standard deviation of the angle is set to 1.5◦ for vision and
0.75◦ for odometry.
The first experiment is shown in Figure 3. The left figure
shows the resulting x, y-trajectory when the robot drives a
square with 150cm edge length, starting from the left bottom corner. As seen from the figures, the actual trajectory
(black line, measured by DTrack) is not a perfect square
due to mechanical uncertainties described previously. These
uncertainties deteriorate the odometry localization resulting
in a suboptimal tracking performance (magenta dashed line).
While the odometry localization largely deviates from the
actual positions, visual (green crosses) and KVO (blue line)
localization can track the robot sufficiently well. However,
the tracking frequency of vision is much lower as given in
Table I. The right plot in Figure 3 shows the corresponding
robot’s orientation in degree over time. As shown by the
results, the KVO localization is close to the ground truth in
position, as well as in orientation. The KVO estimation returns
in some trajectory parts a “zig-zag” pattern. The reason for


[ 0  ](javascript:; "Show Rating")


[ cmake ](/facontidavide/PlotJuggler/tree/main/cmake "cmake")

|

|


Some works in the literature solve this issue by predicting the measurement as
usual and inserting it as a virtual measurement  [ [ 17
](https://arxiv.org/html/2403.13452v1#bib.bib17) ]  or by dividing the
estimation problem into multiple sub-filters  [ [ 18
](https://arxiv.org/html/2403.13452v1#bib.bib18) ]  . The former approach,
however, induces an artificial convergence of the unobservable states
covariances. The latter, while being theoretically sounder, cannot consider
cross-correlations between the states of different filters and its
implementation is inevitably complex. We opt for a different approach, which
applies the prediction steps of the EKF to the full state, while the
correction step is applied only to the observable states. Although one of the
model uncertainty states would theoretically be observable even without
position measures, we choose to correct just the wheel speeds. Indeed if, as
an example, we opted to estimate the IMU bias as well, the measurement model
in ( [ 6  ](https://arxiv.org/html/2403.13452v1#S4.E6 "6 ‣ IV-C Measurement
model ‣ IV ARCHITECTURE SPECIALIZATION FOR YAPE ‣ Mobile Robot Localization: a
Modular, Odometry-Improving Approach") ) would become


[ ](javascript:; "Share Article") [
](//www.rssing.com/contact.php?r=o6&u=%2F%2Fquestion3152.rssing.com%2Fchan-47151955%2Farticle439-live.html
"Article Support")


I am using cartographer_ros along with amcl and an imu and wheel odometry for
localization. Robot_localization seems ideal for this. I modified the sources
for cartographer and amcl so that they publish poses and do not broadcast
transforms. I used the following robot_localization setup and it seems to be
working well, but I am not sure it is entirely correct. If someone would be
kind enough to look it over, I would sure appreciate that. I am particularly
interested to know whether I set the frame ID and child frames correctly for
the inputs from amcl and cartographer (frame ID = map, child ID =
base_footprint) robot_localization ukf instance 1, continuous inputs, 2D mode
is true, neither of the inputs is set to differential.  odom0 is from the
wheel encoders, reporting vx and vYaw (vy = 0), 2D mode, with frame id= odom,
child frame is base_footprint  [false, false, false,  false, false, false,
true, true, false,  false, false, true,  false, false, false]  imu0 is from
the IMU, reporting vYaw, frame ID is imu_link  [false, false, false, true,
true, true,  false, false, false, true, true, true,  true, false, false]
robot_localization ukf instance 2 brings in amcl and cartographer (and
eventually GPS)  pose0 is from amcl, with a frame ID = map, it is set to
differential.  [true, true, false,  true, true, true,  false, false, false,
false, false, false, false, false, false]  odom0 is from cartographer, the
frame ID is map, the child is base_footprint  [true, true, false, true, true,
false, false, false, false, false, false, true, false, false, false]


[ datasamples ](/facontidavide/PlotJuggler/tree/main/datasamples
"datasamples")

|


|  C  =  [  0  0  0  R  R  T  −  R  L  T  ω  R  T  ω  L  T  1  0  0  0  1  0
0  0  0  0  0  0  0  1  0  0  0  ]  .  𝐶  matrix  0  0  0  subscript  𝑅  𝑅  𝑇
subscript  𝑅  𝐿  𝑇  subscript  𝜔  𝑅  𝑇  subscript  𝜔  𝐿  𝑇  1  0  0  0  1  0
0  0  0  0  0  0  0  1  0  0  0
C=\begin{bmatrix}0&0&0&\frac{R_{R}}{T}&-\frac{R_{L}}{T}&\frac{\omega_{R}}{T}&%
\frac{\omega_{L}}{T}&1\\\ 0&0&0&1&0&0&0&0\\\ 0&0&0&0&1&0&0&0\end{bmatrix}.
italic_C = [ start_ARG start_ROW start_CELL 0 end_CELL start_CELL 0 end_CELL
start_CELL 0 end_CELL start_CELL divide start_ARG italic_R start_POSTSUBSCRIPT
italic_R end_POSTSUBSCRIPT end_ARG start_ARG italic_T end_ARG end_CELL
start_CELL - divide start_ARG italic_R start_POSTSUBSCRIPT italic_L
end_POSTSUBSCRIPT end_ARG start_ARG italic_T end_ARG end_CELL start_CELL
divide start_ARG italic_ω start_POSTSUBSCRIPT italic_R end_POSTSUBSCRIPT
end_ARG start_ARG italic_T end_ARG end_CELL start_CELL divide start_ARG
italic_ω start_POSTSUBSCRIPT italic_L end_POSTSUBSCRIPT end_ARG start_ARG
italic_T end_ARG end_CELL start_CELL 1 end_CELL end_ROW start_ROW start_CELL 0
end_CELL start_CELL 0 end_CELL start_CELL 0 end_CELL start_CELL 1 end_CELL
start_CELL 0 end_CELL start_CELL 0 end_CELL start_CELL 0 end_CELL start_CELL 0
end_CELL end_ROW start_ROW start_CELL 0 end_CELL start_CELL 0 end_CELL
start_CELL 0 end_CELL start_CELL 0 end_CELL start_CELL 1 end_CELL start_CELL 0
end_CELL start_CELL 0 end_CELL start_CELL 0 end_CELL end_ROW end_ARG ] .  |  |
(7)
---|---|---|---

The  3  ×  3  3  3  3\times 3  3 × 3  null block will cause the first three
columns of the observability matrix  𝒪  =  [  C  C    A  …  C    A  7  ]  T
𝒪  superscript  matrix  𝐶  𝐶  𝐴  …  𝐶  superscript  𝐴  7  𝑇
\mathcal{O}=\begin{bmatrix}C&CA&\dots&CA^{7}\end{bmatrix}^{T}  caligraphic_O =
[ start_ARG start_ROW start_CELL italic_C end_CELL start_CELL italic_C
italic_A end_CELL start_CELL … end_CELL start_CELL italic_C italic_A
start_POSTSUPERSCRIPT 7 end_POSTSUPERSCRIPT end_CELL end_ROW end_ARG ]
start_POSTSUPERSCRIPT italic_T end_POSTSUPERSCRIPT  to be zero-valued as well.
As a matter of fact, the number of linearly independent rows would be  rank  𝒪
=  3  rank  𝒪  3  \operatorname*{rank}\mathcal{O}=3  roman_rank caligraphic_O
= 3  : the observable state is reduced to the two wheel speeds and one between
the radii and the yaw rate bias.


April 11, 2024, 5:07 am


This Section details how the architecture principles outlined in Section [ II
](https://arxiv.org/html/2403.13452v1#S2 "II LOCALIZATION ARCHITECTURE ‣
Mobile Robot Localization: a Modular, Odometry-Improving Approach") translate
in a practical implementation on the Yape AMR.


|  y  ^  k  g    n    s    s  =  [  X  k  \+  d    cos    (  ψ  k  \+  α
)  Y  k  \+  d    sin    (  ψ  k  \+  α  )  ]  .  superscript  subscript  ^
𝑦  𝑘  𝑔  𝑛  𝑠  𝑠  matrix  subscript  𝑋  𝑘  𝑑  subscript  𝜓  𝑘  𝛼  subscript  𝑌
𝑘  𝑑  subscript  𝜓  𝑘  𝛼
\hat{y}_{k}^{gnss}=\begin{bmatrix}X_{k}+d\cos(\psi_{k}+\alpha)\\\
Y_{k}+d\sin(\psi_{k}+\alpha)\end{bmatrix}.  over^ start_ARG italic_y end_ARG
start_POSTSUBSCRIPT italic_k end_POSTSUBSCRIPT start_POSTSUPERSCRIPT italic_g
italic_n italic_s italic_s end_POSTSUPERSCRIPT = [ start_ARG start_ROW
start_CELL italic_X start_POSTSUBSCRIPT italic_k end_POSTSUBSCRIPT + italic_d
roman_cos ( italic_ψ start_POSTSUBSCRIPT italic_k end_POSTSUBSCRIPT + italic_α
) end_CELL end_ROW start_ROW start_CELL italic_Y start_POSTSUBSCRIPT italic_k
end_POSTSUBSCRIPT + italic_d roman_sin ( italic_ψ start_POSTSUBSCRIPT italic_k
end_POSTSUBSCRIPT + italic_α ) end_CELL end_ROW end_ARG ] .  |  |  (5)
---|---|---|---

Finally, the IMU yaw rate measurement prediction needs to be computed from
both wheel speeds, both radii as well as the bias:


Could anyone help me on how to properly feed the IMU data. Also is there
anyway that the IMU data is being used?? like a visualiser?


[ ](javascript:; "Like") 0


[ ![Highlights - Bringing young people to the forefront of EU policy making
-...](//www.europarl.europa.eu/resources/library/images/20200115PHT70307/20200115PHT70307-ms.jpg)
](////europees185.rssing.com/chan-78228109/article559.html#c78228109a559i1335926349)


  Resources

Readme


[ datasamples ](/facontidavide/PlotJuggler/tree/main/datasamples
"datasamples")

|

|


[ X ](javascript:;) Mark channel Not-Safe-For-Work?  [ cancel ](javascript:;)
[ confirm ](javascript:;) NSFW Votes:  (  0  votes)


Resources


[ ![People's Blog • First Pictures of the Eclipse ! !
!](//thepeoplescube.com/red/download/file.php?id=57243&sid=3721c68912ad1a7b63f4cf1eafba9b41)
](////satire3490.rssing.com/chan-77006292/article253.html#c77006292a253i838655542)


[ cmake ](/facontidavide/PlotJuggler/tree/main/cmake "cmake")

|


soccer robots,” in IEEE International Conference on Robotics and
Automation, 2007, pp. 2623–2628.
[7] S. Se, D. Lowe, and J. Little, “Mobile robot localization and mapping
with uncertainty using scale-invariant visual landmarks,” International
Journal of Robotics Research, vol. 21, pp. 735–758, 2002.
[8] A. Ramisa, A. Tapus, D. Aldavert, R. Toledo, and R. Lopez De Mantaras,
“Robust vision-based robot localization using combinations of local
feature region detectors,” Auton. Robots, vol. 27, no. 4, pp. 373–385,
Nov. 2009.
[9] J. M. Porta, J. J. Verbeek, and B. J. A. Krose, “Active appearance-based ¨
robot localization using stereo vision,” Auton. Robots, vol. 18, no. 1, pp.
59–80, Jan. 2005.
[10] P. Fernandez, S. Oh, G. Mariottini, and F. Dellaert, “Learning visibility
of landmarks for vision-based localization,” in icra, Ankara, AL, 2010,
accepted.
[11] H. Kato and M. Billinghurst, “Marker tracking and hmd calibration for a
video-based augmented reality conferencing system,” in Proceedings of
the 2nd IEEE and ACM International Workshop on Augmented Reality,
1999, pp. 85–94.
[12] S. Thrun, W. Burgard, and D. Fox, Probabilistic Robotics, ser. Intelligent
robotics and autonomous agents. The MIT Press, Aug. 2005.
352


Explore


The remainder of this paper is structured as follows. Section [ II
](https://arxiv.org/html/2403.13452v1#S2 "II LOCALIZATION ARCHITECTURE ‣
Mobile Robot Localization: a Modular, Odometry-Improving Approach") discusses
the core principles of the proposed localization architecture. Next, Section [
III  ](https://arxiv.org/html/2403.13452v1#S3 "III EXPERIMENTAL SETUP ‣ Mobile
Robot Localization: a Modular, Odometry-Improving Approach") will present the
robotic platform used to develop and validate the proposed algorithm. The
implementation of the architecture for the specific experimental platform is
detailed in [ IV  ](https://arxiv.org/html/2403.13452v1#S4 "IV ARCHITECTURE
SPECIALIZATION FOR YAPE ‣ Mobile Robot Localization: a Modular, Odometry-
Improving Approach") and the experimental results are reported in Section [ V
](https://arxiv.org/html/2403.13452v1#S5 "V VALIDATION RESULTS ‣ Mobile Robot
Localization: a Modular, Odometry-Improving Approach") .


I used GPS and IMU to localize my robot with `robot_localization`. After I
recorded my data, which includes topics `Imu`, `NavSatFix` and
`TwistWithCovarianceStamped`, I played the bag and launch the nodes. The bag
is available at [here](https://drive.google.com/open?id=1eWlI-
HZNObzHEJd82FHVk-2koPGhWmuh) The launch files are as following: \- Top level:
[gps_imu_localization_bag.launch](https://github.com/seanNCTU/answer_ros/blob/master/robot_localization/launch/gps_imu_localization_bag.launch)
\- robot_localization: \- ekf_node:
[wam_v_ekf.launch](https://github.com/seanNCTU/answer_ros/blob/master/robot_localization/launch/wam_v_ekf.launch)
\- nav_sat_transform_node:
[wam_v_navsat.launch](https://github.com/seanNCTU/answer_ros/blob/master/robot_localization/launch/wam_v_navsat.launch)
The parameter files for my robot are: \- ekf:
[wam_v_ekf.yaml](https://github.com/seanNCTU/answer_ros/blob/master/robot_localization/config/wam_v_ekf.yaml)
\- nav_sat:
[wam_v_navsat](https://github.com/seanNCTU/answer_ros/blob/master/robot_localization/config/wam_v_navsat.yaml)
After I launched the file several times, I notices that the results are not
always the same, sometimes the result seems good[Fig. 1], while sometimes the
result were very terrible[Fig. 2]. [Fig. 1](/upfiles/15355490726149153.jpg)
[Fig. 2](/upfiles/15355491077533439.jpg) It really confused me that with the
same topics and the same parameters, I got the different results. Notice also
that the direction of oscillation of Fig. 2 is from northeast to southwest,
which northeast is the direction from the origin of UTM to my position,
a,k,a., Taiwan.


![Hustisya para kay Randy Echanis](//www.pinoyweekly.org/wp-
content/uploads/2020/08/PW-randy-echanis-featured.jpg)


###  [ Kerala Christian Convention Maramon 2018 Songs Lyrics
](////kerala860.rssing.com/chan-63836988/article296.html#c63836988a296i25562831)


Absolute pose (or position) sources provide the robot’s position and,
optionally, orientation with respect to a fixed reference frame.


aware of vehicle-specific motion models,


[ takahiko-hasegawa-hdjp ](/takahiko-hasegawa-hdjp) opened this issue  Dec 18,
2022  · 7 comments


#  Provide feedback


Saved searches


[ COMPILE.md ](/facontidavide/PlotJuggler/blob/main/COMPILE.md "COMPILE.md")

|


[ README.md ](/facontidavide/PlotJuggler/blob/main/README.md "README.md")

|


Member


![Refer to caption](x5.png) Figure 5:  Position (top) and yaw (bottom) error
distribution of filter estimate with respect to Cartographer. The X axis
refers to the fused position inputs (GNSS, Cartographer or both).  ![Refer to
caption](x6.png) Figure 6:  Position error distribution of filter estimate
with respect to GNSS. The X axis refers to the fused position inputs (GNSS,
Cartographer or both).


Hello everyone, I am using the [robot
localization](http://wiki.ros.org/robot_localization) package to fuse together
data from wheel odometry and imu. For my robot, the imu frame is placed at
0.5m on top of the base_link (it is placed flat, paralleled to the ground
plane on my robot). When I visualize the imu data in rviz, i see that it does
not match the frame that I have broadcasted. This is shown in the image below
with the larger frame representing the orientation of the imu (UM7) sensor. It
is shown that it is on an angle however the imu is placed flat. Can someone
explain why this happens? ![image description](/upfiles/15338428133342698.png)
This is what I am using to launch the IMU and broadcase the imu transform


[ Claim  ](javascript:; "Claim Chan")


The presented analysis focuses on the robustness of the localization solution
to the loss of absolute position measurements and the effect of model
uncertainty estimation. The first set of experiments proves the robustness of
the algorithm to the loss of one of the two absolute pose measurements, either
the GNSS or Cartographer. The second analysis presents the effect of model
uncertainty estimation with position measurement available. The last set of
experiments combines the previous two, by assessing the performance when all
position measures are lost and evaluating the impact of estimating model
uncertainties under such circumstances.


[ 3rdparty ](/facontidavide/PlotJuggler/tree/main/3rdparty "3rdparty")

|

|


    * [ DevSecOps  ](https://resources.github.com/devops/fundamentals/devsecops/)

Resources

    * [ Learning Pathways  ](https://resources.github.com/learn/pathways/)
    * [ White papers, Ebooks, Webinars  ](https://resources.github.com/)
    * [ Customer Stories ](/customer-stories)
    * [ Partners  ](https://partner.github.com/)

  * Open Source

    * [ GitHub Sponsors  Fund open source developers  ](/sponsors)

    * [ The ReadME Project  GitHub community articles  ](/readme)

Repositories

    * [ Topics ](/topics)
    * [ Trending ](/trending)
    * [ Collections ](/collections)

  * [ Pricing ](/pricing)

Search or jump to...


[ COMPILE.md ](/facontidavide/PlotJuggler/blob/main/COMPILE.md "COMPILE.md")

|

|


Do you recommend using [ robot_localization
](http://docs.ros.org/en/noetic/api/robot_localization/html/index.html) for
imu fusion? If i understand this correctly, IMU data is only used for initial
pose within rtabmap?

---

All reactions


  1. [ I  INTRODUCTION  ](https://arxiv.org/html/2403.13452v1#S1 "I INTRODUCTION ‣ Mobile Robot Localization: a Modular, Odometry-Improving Approach")
  2. [ II  LOCALIZATION ARCHITECTURE  ](https://arxiv.org/html/2403.13452v1#S2 "II LOCALIZATION ARCHITECTURE ‣ Mobile Robot Localization: a Modular, Odometry-Improving Approach")
  3. [ III  EXPERIMENTAL SETUP  ](https://arxiv.org/html/2403.13452v1#S3 "III EXPERIMENTAL SETUP ‣ Mobile Robot Localization: a Modular, Odometry-Improving Approach")
  4. [ IV  ARCHITECTURE SPECIALIZATION FOR YAPE  ](https://arxiv.org/html/2403.13452v1#S4 "IV ARCHITECTURE SPECIALIZATION FOR YAPE ‣ Mobile Robot Localization: a Modular, Odometry-Improving Approach")
    1. [ IV-A  Localization sources  ](https://arxiv.org/html/2403.13452v1#S4.SS1 "IV-A Localization sources ‣ IV ARCHITECTURE SPECIALIZATION FOR YAPE ‣ Mobile Robot Localization: a Modular, Odometry-Improving Approach")
    2. [ IV-B  State transition model  ](https://arxiv.org/html/2403.13452v1#S4.SS2 "IV-B State transition model ‣ IV ARCHITECTURE SPECIALIZATION FOR YAPE ‣ Mobile Robot Localization: a Modular, Odometry-Improving Approach")
    3. [ IV-C  Measurement model  ](https://arxiv.org/html/2403.13452v1#S4.SS3 "IV-C Measurement model ‣ IV ARCHITECTURE SPECIALIZATION FOR YAPE ‣ Mobile Robot Localization: a Modular, Odometry-Improving Approach")
    4. [ IV-D  Dealing with multi-rate and unavailable measures  ](https://arxiv.org/html/2403.13452v1#S4.SS4 "IV-D Dealing with multi-rate and unavailable measures ‣ IV ARCHITECTURE SPECIALIZATION FOR YAPE ‣ Mobile Robot Localization: a Modular, Odometry-Improving Approach")
  5. [ V  VALIDATION RESULTS  ](https://arxiv.org/html/2403.13452v1#S5 "V VALIDATION RESULTS ‣ Mobile Robot Localization: a Modular, Odometry-Improving Approach")
    1. [ V-A  Loss of one absolute pose source  ](https://arxiv.org/html/2403.13452v1#S5.SS1 "V-A Loss of one absolute pose source ‣ V VALIDATION RESULTS ‣ Mobile Robot Localization: a Modular, Odometry-Improving Approach")
    2. [ V-B  Model uncertainties estimation  ](https://arxiv.org/html/2403.13452v1#S5.SS2 "V-B Model uncertainties estimation ‣ V VALIDATION RESULTS ‣ Mobile Robot Localization: a Modular, Odometry-Improving Approach")
    3. [ V-C  Loss of all absolute pose sources  ](https://arxiv.org/html/2403.13452v1#S5.SS3 "V-C Loss of all absolute pose sources ‣ V VALIDATION RESULTS ‣ Mobile Robot Localization: a Modular, Odometry-Improving Approach")
  6. [ VI  CONCLUSIONS  ](https://arxiv.org/html/2403.13452v1#S6 "VI CONCLUSIONS ‣ Mobile Robot Localization: a Modular, Odometry-Improving Approach")


[ ](javascript:; "Share Article") [
](//www.rssing.com/contact.php?r=o6&u=%2F%2Fquestion3152.rssing.com%2Fchan-47151955%2Farticle438-live.html
"Article Support")


April 8, 2024, 8:41 am


[ Plotjuggler.rc ](/facontidavide/PlotJuggler/blob/main/Plotjuggler.rc
"Plotjuggler.rc")

|

|


−5 0 5 10 15 20 25 30
0
50
100
150
200
250
300
350
time (s)
angle (deg)
Fig. 5. Experiment 3 shows a circle trajectory with simultaneous translation and rotation. The left figure shows the robot position, while the right figure displays
the robot angle over time.
351
0
Ground Truth KVO Vision Odometry
−50 0 50 100 150
−50
0
50
100
150
x−position (cm)
y−position (cm)
area without visual markers
0 10 20 30 40 −100
−50
0
50
100
150
200
250
300
350
time (s)
angle (deg)
Fig. 6. Experiment 4 is a complex trajectory with simultaneous translation and rotation. The position of the robot is shown on the left, the angle over time on
the right. In the left figure, the dotted square shows the area without visual markers. In this area, KVO localization relies on the odometry only.
TABLE I


[ ](javascript:; "Share Article") [
](//www.rssing.com/contact.php?r=o6&u=%2F%2Fquestion3152.rssing.com%2Fchan-47151955%2Farticle437-live.html
"Article Support")


#  [ Robot_localization result is unpredictable
](//question3152.rssing.com/chan-47151955/article428-live.html)


In general, three categories can be identified:


[ ↂ
](////downloadhub26.rssing.com/chan-63389705/article159.html#c63389705a159i1981662480
"Good Will Hunting 1997 Dual Audio 720p BRRip \[Hindi – English\] ESubs")


Since Cartographer and encoder measurements map directly to state variables
the predicted measures  y  ^  ^  𝑦  \hat{y}  over^ start_ARG italic_y end_ARG
will be


[ ](javascript:; "Ouch") 0


  * [ Terms ](https://docs.github.com/site-policy/github-terms/github-terms-of-service)
  * [ Privacy ](https://docs.github.com/site-policy/privacy-policies/github-privacy-statement)
  * [ Security ](/security)
  * [ Status ](https://www.githubstatus.com/)
  * [ Docs ](https://docs.github.com/)
  * [ Contact ](https://support.github.com?tags=dotcom-footer)
  * Manage cookies
  * Do not share my personal information


[ CHANGELOG.rst ](/facontidavide/PlotJuggler/blob/main/CHANGELOG.rst
"CHANGELOG.rst")

|

|


Above changes resulted in OdometryROS::callbackIMU function to be called
everytime the imu topic is being fed to the system(rosbag data).


Include my email address so I can be contacted


[ _≪_ Previous: Robot Localization Package: Transform was unavailable for the
time requested. Using latest instead.
](//question3152.rssing.com/chan-47151955/all_p22.html#c47151955a438 "Previous
Article")


      <param name="imu0_remove_gravitational_acceleration" value="$(arg imu_remove_gravitational_acceleration)"/>

      <param name="print_diagnostics" value="true"/>

      <!-- ======== ADVANCED PARAMETERS ======== -->
      <param name="odom0_queue_size" value="5"/>
      <param name="imu0_queue_size" value="50"/>

      <!-- The values are ordered as x, y, z, roll, pitch, yaw, vx, vy, vz,
           vroll, vpitch, vyaw, ax, ay, az. -->
      <rosparam param="process_noise_covariance">[0.005, 0,    0,    0,    0,    0,    0,     0,     0,    0,    0,    0,    0,    0,    0,
                                                  0,    0.005, 0,    0,    0,    0,    0,     0,     0,    0,    0,    0,    0,    0,    0,
                                                  0,    0,    0.006, 0,    0,    0,    0,     0,     0,    0,    0,    0,    0,    0,    0,
                                                  0,    0,    0,    0.003, 0,    0,    0,     0,     0,    0,    0,    0,    0,    0,    0,
                                                  0,    0,    0,    0,    0.003, 0,    0,     0,     0,    0,    0,    0,    0,    0,    0,
                                                  0,    0,    0,    0,    0,    0.006, 0,     0,     0,    0,    0,    0,    0,    0,    0,
                                                  0,    0,    0,    0,    0,    0,    0.0025, 0,     0,    0,    0,    0,    0,    0,    0,
                                                  0,    0,    0,    0,    0,    0,    0,     0.0025, 0,    0,    0,    0,    0,    0,    0,
                                                  0,    0,    0,    0,    0,    0,    0,     0,     0.004, 0,    0,    0,    0,    0,    0,
                                                  0,    0,    0,    0,    0,    0,    0,     0,     0,    0.001, 0,    0,    0,    0,    0,
                                                  0,    0,    0,    0,    0,    0,    0,     0,     0,    0,    0.001, 0,    0,    0,    0,
                                                  0,    0,    0,    0,    0,    0,    0,     0,     0,    0,    0,    0.002, 0,    0,    0,
                                                  0,    0,    0,    0,    0,    0,    0,     0,     0,    0,    0,    0,    0.001, 0,    0,
                                                  0,    0,    0,    0,    0,    0,    0,     0,     0,    0,    0,    0,    0,    0.001, 0,
                                                  0,    0,    0,    0,    0,    0,    0,     0,     0,    0,    0,    0,    0,    0,    0.0015]</rosparam>

      <!-- The values are ordered as x, y,
           z, roll, pitch, yaw, vx, vy, vz, vroll, vpitch, vyaw, ax, ay, az. -->
           <rosparam param="initial_estimate_covariance">[1e-9, 0,    0,    0,    0,    0,    0,    0,    0,    0,     0,     0,     0,    0,    0,
                                                          0,    1e-9, 0,    0,    0,    0,    0,    0,    0,    0,     0,     0,     0,    0,    0,
                                                          0,    0,    1e-9, 0,    0,    0,    0,    0,    0,    0,     0,     0,     0,    0,    0,
                                                          0,    0,    0,    1e-9, 0,    0,    0,    0,    0,    0,     0,     0,     0,    0,    0,
                                                          0,    0,    0,    0,    1e-9, 0,    0,    0,    0,    0,     0,     0,     0,    0,    0,
                                                          0,    0,    0,    0,    0,    1e-9, 0,    0,    0,    0,     0,     0,     0,    0,    0,
                                                          0,    0,    0,    0,    0,    0,    1e-9, 0,    0,    0,     0,     0,     0,    0,    0,
                                                          0,    0,    0,    0,    0,    0,    0,    1e-9, 0,    0,     0,     0,     0,    0,    0,
                                                          0,    0,    0,    0,    0,    0,    0,    0,    1e-9, 0,     0,     0,     0,    0,    0,
                                                          0,    0,    0,    0,    0,    0,    0,    0,    0,    1e-9,  0,     0,     0,    0,    0,
                                                          0,    0,    0,    0,    0,    0,    0,    0,    0,    0,     1e-9,  0,     0,    0,    0,


[ Sign in
](/login?return_to=https%3A%2F%2Fgithub.com%2Fintrolab%2Frtabmap_ros%2Fissues%2F857)


###  V-B  Model uncertainties estimation


New issue


No milestone


[ ](https://github.com "GitHub") © 2024 GitHub, Inc.


end_POSTSUPERSCRIPT start_POSTSUBSCRIPT italic_k end_POSTSUBSCRIPT end_ARG
start_ARG 2 end_ARG roman_sin italic_ψ start_POSTSUBSCRIPT italic_k
end_POSTSUBSCRIPT italic_T start_POSTSUBSCRIPT italic_s end_POSTSUBSCRIPT
end_CELL end_ROW start_ROW start_CELL italic_ψ start_POSTSUBSCRIPT italic_k
end_POSTSUBSCRIPT + divide start_ARG italic_ω start_POSTSUPERSCRIPT italic_R
end_POSTSUPERSCRIPT start_POSTSUBSCRIPT italic_k end_POSTSUBSCRIPT italic_R
start_POSTSUPERSCRIPT italic_R end_POSTSUPERSCRIPT start_POSTSUBSCRIPT
italic_k end_POSTSUBSCRIPT - italic_ω start_POSTSUPERSCRIPT italic_L
end_POSTSUPERSCRIPT start_POSTSUBSCRIPT italic_k end_POSTSUBSCRIPT italic_R
start_POSTSUPERSCRIPT italic_L end_POSTSUPERSCRIPT start_POSTSUBSCRIPT
italic_k end_POSTSUBSCRIPT end_ARG start_ARG italic_T end_ARG italic_T
start_POSTSUBSCRIPT italic_s end_POSTSUBSCRIPT end_CELL end_ROW start_ROW
start_CELL italic_ω start_POSTSUPERSCRIPT italic_R end_POSTSUPERSCRIPT
start_POSTSUBSCRIPT italic_k end_POSTSUBSCRIPT end_CELL end_ROW start_ROW
start_CELL italic_ω start_POSTSUPERSCRIPT italic_L end_POSTSUPERSCRIPT
start_POSTSUBSCRIPT italic_k end_POSTSUBSCRIPT end_CELL end_ROW start_ROW
start_CELL italic_R start_POSTSUPERSCRIPT italic_R end_POSTSUPERSCRIPT
start_POSTSUBSCRIPT italic_k end_POSTSUBSCRIPT end_CELL end_ROW start_ROW
start_CELL italic_R start_POSTSUPERSCRIPT italic_L end_POSTSUPERSCRIPT
start_POSTSUBSCRIPT italic_k end_POSTSUBSCRIPT end_CELL end_ROW start_ROW
start_CELL italic_b start_POSTSUBSCRIPT italic_k end_POSTSUBSCRIPT end_CELL
end_ROW end_ARG ]  |  |  (2)
---|---|---|---

where  T  s  subscript  𝑇  𝑠  T_{s}  italic_T start_POSTSUBSCRIPT italic_s
end_POSTSUBSCRIPT  is the sampling time and  T  𝑇  T  italic_T  the vehicle’s
track width. Note that in our formulation  u  k  =  ∅  subscript  𝑢  𝑘
u_{k}=\emptyset  italic_u start_POSTSUBSCRIPT italic_k end_POSTSUBSCRIPT = ∅
: we include all sensor data as outputs.


  Footer

[ ](https://github.com "GitHub") © 2024 GitHub, Inc.


The effect of the estimation is clearly visible in Figure [ 9a
](https://arxiv.org/html/2403.13452v1#S5.F9.sf1 "9a ‣ Figure 9 ‣ V-C Loss of
all absolute pose sources ‣ V VALIDATION RESULTS ‣ Mobile Robot Localization:
a Modular, Odometry-Improving Approach") , which depicts the trajectories
after the measurement loss occurs (black dot). With the model uncertainties
estimated until such moment, the resulting model is much more accurate and
enables to maintain significantly lower errors and minimize odometrical drift,
as visible in Figure [ 9b  ](https://arxiv.org/html/2403.13452v1#S5.F9.sf2 "9b
‣ Figure 9 ‣ V-C Loss of all absolute pose sources ‣ V VALIDATION RESULTS ‣
Mobile Robot Localization: a Modular, Odometry-Improving Approach") , which
reports the time series of the filter output with respect to Cartographer’s
pose. Notice how, after more than two minutes of navigation and  ≈  70    m
absent  70  𝑚  \approx 70~{}m  ≈ 70 italic_m  traveled the cumulated drift
reduces from  5.3    m  5.3  𝑚  5.3~{}m  5.3 italic_m  to  0.35    m  0.35
𝑚  0.35~{}m  0.35 italic_m  in terms of position error and from  7    deg  7
degree  7~{}\deg  7 roman_deg  to less than  2    deg  2  degree  2~{}\deg  2
roman_deg  in terms of yaw error.


[ ](javascript:; "Share Article") [
](//www.rssing.com/contact.php?r=o6&u=%2F%2Fquestion3152.rssing.com%2Fchan-47151955%2Farticle436-live.html
"Article Support")


[ Dockerfile ](/facontidavide/PlotJuggler/blob/main/Dockerfile "Dockerfile")

|

|


Hi, I'm learning more about the kalman filter and I thought I'd write a simple
implementation for position tracking based on the details at this
[link](http://campar.in.tum.de/Chair/KalmanFilter) and this
[link](http://nbviewer.jupyter.org/github/balzer82/Kalman/blob/master/Kalman-
Filter-CA-Ball.ipynb?create=1) However, The filter estimates and the real
sensor readings are far off. I'm using a Matrice 100 drone and subscribing to
the following messages to populate my state estimate: /dji_sdk/imu ( publishes
imu data) /dji_sdk/velocity ( publishes velocity) /dji_sdk/local_position (
publishes local position in Cartesian coordinates) My state estimate is a 9 x
1 vector tracking position, velocity and acceleration x


[ ](javascript:; "Share Article") [
](//www.rssing.com/contact.php?r=o6&u=%2F%2Fquestion3152.rssing.com%2Fchan-47151955%2Farticle431-live.html
"Article Support")


  Stars

[ **4k** stars ](/facontidavide/PlotJuggler/stargazers)


  Tutorials

To learn how to use PlotJuggler, check the tutorials here:

Tutorial 1  |  Tutorial 2  |  Tutorial 3
---|---|---
[ ![](/facontidavide/PlotJuggler/raw/main/docs/tutorial_1.png)
](https://slides.com/davidefaconti/introduction-to-plotjuggler) |  [
![](/facontidavide/PlotJuggler/raw/main/docs/tutorial_2.png)
](https://slides.com/davidefaconti/plotjuggler-data) |  [
![](/facontidavide/PlotJuggler/raw/main/docs/tutorial_3.png)
](https://slides.com/davidefaconti/plotjuggler-transforms)


[ _≪_ Previous: IMU orientation mismatch with RVIZ
](//question3152.rssing.com/chan-47151955/all_p22.html#c47151955a422 "Previous
Article")


θ. The belief state ˆst ∼ N (μt,Σt) of the Kalman-Filter returns
the estimation of the robot’s pose with a mean μt and variance
Σt. Using the Kalman-Filter, the operations predict and update
need to be defined. Here, the matrices At,Bt in equation (2) are
set to identity. With the odometry information, pose changes
(Δx,Δy,Δθ) can be calculated using the equation (1). This
pose change ut = (Δxt,Δyt,Δθt) – computed from odometry
information – is subsequently employed for the Kalman-Filter
prediction. For the update operation in equation (3) on the
other hand, the vision-based localization from Section II-B
gives global pose estimates zt, the matrix Ct is set to identity.
Using the KVO localization, the predict operation of the
Kalman-Filter is executed when a new odometry pose estimation is available. Thus, the estimation of the robot’s state can
Algorithm 1 The KVO algorithm
μ, Σ  belief state mean and variance
R, Q  noise of odometry and vision
buffer  buffer of last predictions
function ON NEW LOCALIZATION INFO
if is odometry u then  predict
u = (Δx,Δy,Δθ)
μ ← μ +u
Σ ← Σ+R
PUT U IN BUFFER( )
else if is vision z then  update
ALIGN Z WITH BUFFER DATA( )
Compute σθ and σxy
if σθ or σxy is smaller than 2 then
K ← Σ+ (Σ+Q)
−1
μ ← μ +K ·(z− μ)
Σ ← (I −K)·Σ
end if
end if
end function
be performed at a high frequency, as the odometry estimation
is fast. The update step of the Kalman-Filter is executed when
a new pose estimation is obtained from the visual localization.
The update step is employed to correct the estimations done by
the odometry. As shown by the results in Section IV, the update
steps of KVO can be performed at much lower frequency than


[ ](javascript:; "Ouch") 0


You signed in with another tab or window. [ Reload ]() to refresh your
session.  You signed out in another tab or window. [ Reload ]() to refresh
your session.  You switched accounts on another tab or window. [ Reload ]() to
refresh your session.  Dismiss alert


August 21, 2018, 7:38 am


![Who Is Junior Pope?| Biography| Profile| History Of Nollywood Actor “Pope
Obumneme Odonwodo” Popularly known as “Junior
Pope”](//i2.wp.com/austinemedia.com/wp-
content/uploads/2017/05/jp2.jpg?resize=642%2C361)


In practice, this approach results in the model uncertainty states remaining
constant, while the position states get updated in an odometrical fashion.
Notice that the covariance of the unobservable states grows during these
“open-loop” periods, since the state covariance prediction step is applied to
the full state.


No one assigned


###  [ Robert Lyn Nelson - "Faces of Africa"
](////brokerage105.rssing.com/chan-6647811/article3361.html#c6647811a3361i1214292647)


Hi, I have a bag file which has IMU, GPS and wheel odometry and I'm trying to
fuse it through robot_localization. I have followed everything as per the
document. the ekf node is working fine but there is no output on the topic
odometry/gps. I am manually tuning the covariance values for all the three
sensors. For this I have a small code which runs above the bag file and just
adds up the values in covariance matrix. Please find the attached launch file
and config file . Also, I am pasting few messages for IMU, GOS and odometry
IMU: header: seq: 122 stamp: secs: 1531127130 nsecs: 412077068 frame_id:
"imu_link" orientation: x: 0.01904296875 y: -0.0274047851562 z:
-0.852172851562 w: 0.522216796875 orientation_covariance: [24.0, 0.0, 0.0,
0.0, 24.0, 0.0, 0.0, 0.0, 24.0] angular_velocity: x: 2.375 y: -0.875 z: 2.75
angular_velocity_covariance: [24.0, 0.0, 0.0, 0.0, 24.0, 0.0, 0.0, 0.0, 24.0]
linear_acceleration: x: -0.270000010729 y: 1.48000001907 z: -1.27999997139
linear_acceleration_covariance: [24.0, 0.0, 0.0, 0.0, 24.0, 0.0, 0.0, 0.0,
24.0] \--- header: seq: 123 stamp: secs: 1531127130 nsecs: 530077068 frame_id:
"imu_link" orientation: x: 0.0189208984375 y: -0.0271606445312 z:
-0.852966308594 w: 0.520935058594 orientation_covariance: [24.0, 0.0, 0.0,
0.0, 24.0, 0.0, 0.0, 0.0, 24.0] angular_velocity: x: 1.25 y: -3.125 z: -0.375
angular_velocity_covariance: [24.0, 0.0, 0.0, 0.0, 24.0, 0.0, 0.0, 0.0, 24.0]
linear_acceleration: x: -0.819999992847 y: 0.689999997616 z: -2.44000005722
linear_acceleration_covariance: [24.0, 0.0, 0.0, 0.0, 24.0, 0.0, 0.0, 0.0,
24.0] GPS: header: seq: 8 stamp: secs: 1531127123 nsecs: 87058067 frame_id:
"gps_link" status: status: 0 service: 1 latitude: 50.72745 longitude: 7.087071
altitude: 110.3 position_covariance: [0.01, 0.0, 0.0, 0.0, 0.01, 0.0, 0.0,
0.0, 0.01] position_covariance_type: 1 \--- header: seq: 9 stamp: secs:
1531127124 nsecs: 89728116 frame_id: "gps_link" status: status: 0 service: 1
latitude: 50.7274498333 longitude: 7.087071 altitude: 110.3
position_covariance: [0.01, 0.0, 0.0, 0.0, 0.01, 0.0, 0.0, 0.0, 0.01]
position_covariance_type: 1 \--- header: seq: 10 stamp: secs: 1531127125
nsecs: 81310987 frame_id: "gps_link" status: status: 0 service: 1 latitude:
50.7274498333 longitude: 7.087071 altitude: 110.3 position_covariance: [0.01,
0.0, 0.0, 0.0, 0.01, 0.0, 0.0, 0.0, 0.01] position_covariance_type: 1 wheel
odometry: header: seq: 632 stamp: secs: 1531127147 nsecs: 65554528 frame_id:
"odom" child_frame_id: "base_link" pose: pose: position: x: 8.1543953277 y:
-7.6454593772 z: 0.0 orientation: x: 0.0 y: 0.0 z: -0.657809962921 w:
0.753183943457 covariance: [0.375, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.375, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.375, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.375, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.375, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.375] twist: twist:
linear: x: 0.896675902811 y: 0.0 z: 0.0 angular: x: 0.0 y: 0.0 z:
0.0266669413475 covariance: [0.01, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.01, 0.0,


I am using RTABMAP-ros with our own rosbag data to estimate the trajectory
using visual data.
As the trajectory output in our environment isn't too great, i am trying to
use our IMU data to to feed into rtabmap.


###  [ Very Hungry Caterpillar™ Shirt: World of Eric Carle™+ Little Goodall
by...
](////cryptomnesia.rssing.com/chan-1183730/article16627.html#c1183730a16627i1139077293)


[ _≫_ Next: What amount of odometry drift would be considered having an
accurate base?
](//question3152.rssing.com/chan-47151955/all_p22.html#c47151955a433 "Next
Article")


#  Using IMU data to improve the trajectory  #857


###  [ 19 Reader-Favourite March Purchases — From Steals To Splurges
](////refinery1042.rssing.com/chan-72297680/article18978.html#c72297680a18978i1490871663)


[ ](javascript:;) Switch Editions?
[ Cancel ](javascript:;)


[ ](javascript:; "Like") 0


On rtabmap I added:


![Robert Lyn Nelson -
](//www.artbrokerage.com/art/nelsonrobert/_images/nelsonrobert_58879_2.jpg)


August 21, 2018, 8:27 am


But no luck.


  * [ Home  ](//www.rssing.com/index.php)
    * [ About Us ](//www.rssing.com/about.php)
    * [ Catalog ](//www.rssing.com/catalog.php)
  * [ Search  ](//www.rssing.com/search.php)
  * [ Register RSS  ](//www.rssing.com/register.php)
  * [ Embed RSS  ](//www.rssing.com/embed.php)
    * [ FAQ ](//www.rssing.com/embed.php?a=whe)
    * [ Get Embed Code ](//www.rssing.com/embed.php)
    * [ Example: Default CSS ](//www.rssing.com/embed.php?a=ex1)
    * [ Example: Custom CSS ](//www.rssing.com/embed.php?a=ex2)
    * [ Example: Custom CSS per Embedding ](//www.rssing.com/embed.php?a=ex3)
  * [ Super RSS  ](//www.rssing.com/super.php)
    * [ Usage ](//www.rssing.com/super.php)
    * [ View Latest ](//www.rssing.com/super.php?a=l)
    * [ Create ](//www.rssing.com/super.php?a=crt)


Im running a simulation in Gazebo combining the odomery data (coming from the
differential drive plugin) and the imu data (from GazeboRosImuSensor plugin).
Im quite new to ROS and im totally confused with the ENU and NED frames ..
This is what I did 1)placed the IMU in its neutral position 2)setup a static
transform broadcaster which broadcasts my base_link to odom frame here i made
the rotation. I have rolled it by 180 and yaw by 90 . this is the code snippet
in my launch file  I tested the IMU and it shows correct accelerations as
shown ( http://docs.ros.org/lunar/api/robot_l... ) This is my paramter config
file for the robot_localization package odom0_config: [false, false, false,
false, false, false, true, true, false, false, false, true, false, false,
false] imu0_config: [false, false, false, false, false, true, false, false,
false, false, false, true, true, true, false] odom0_queue_size: 2
imu0_queue_size: 5 odom0_nodelay: false imu0_nodelay: false
odom0_differential: false imu0_differential: false odom0_relative: false
imu0_relative: false The problem is that the filtered odometry data is moving
at 90 degees to original raw odometry data ![image
description](https://answers.ros.org/question/287438/robot_localization-non-
uniform-inaccurate-odometry/)


###  [ Class 10 Sanskrit Grammar Book Solutions सन्धिः
](////learn4804.rssing.com/chan-65098560/article5050.html#c65098560a5050i1047598914)


July 27, 2018, 9:17 am


[ ](javascript:; "Ouch") 0


###  [ People's Blog • First Pictures of the Eclipse ! ! !
](////satire6144.rssing.com/chan-78334822/article122.html#c78334822a122i1295535114)


  * [ Notifications ](/login?return_to=%2Fros-planning%2Fmoveit2)
  * [ Fork  471  ](/login?return_to=%2Fros-planning%2Fmoveit2)
  * [ Star  906  ](/login?return_to=%2Fros-planning%2Fmoveit2)


Topic  |  |  Replies  |  Views  |  Activity
---|---|---|---|---
[ KUKA LBR ROS2, MoveIt2, Gazebo Integration
](https://discourse.ros.org/t/kuka-lbr-ros2-moveit2-gazebo-integration/22622)


**[ ShotaAk ](/ShotaAk) ** commented  Dec 17, 2020


1. FollowJointTrajectory Controller Interface


    * [ Topics ](/topics)
    * [ Trending ](/trending)
    * [ Collections ](/collections)


1 Like


> The ros2_control resource manager should prevent that.


**[ ShotaAk ](/ShotaAk) ** commented  Sep 25, 2020  •


The ros2_control resource manager should prevent that.


* _joints_ : Names of all the joints that are being addressed by this interface.


[ release ](https://discourse.ros.org/tag/release)


[ ros-planning ](/ros-planning) /  **[ moveit2 ](/ros-planning/moveit2) **
Public


Pick a username


To see all available qualifiers, see our [ documentation
](https://docs.github.com/search-github/github-code-search/understanding-
github-code-search-syntax) .


* [ GitHub Sponsors  Fund open source developers  ](/sponsors)


Sorry, something went wrong.


All reactions


[ Foxy Releaseについて  rt-net/crane_plus#26  ](/rt-net/crane_plus/issues/26)


Resources


#  [ Ros2_control unsmooth motion ](/t/ros2-control-unsmooth-motion/24301)


* _command_joint_ : The single joint, controlling the actual state of the gripper. This is the only value that is sent to the controller. Has to be one of the joints above. If not specified, the first entry in _joints_ will be used instead.


[ ![@JafarAbdi](https://avatars.githubusercontent.com/u/16278108?s=40&v=4)
](/JafarAbdi)


Servo can have a different controller and that should not affect things.

---

All reactions


> MoveIt2, which interfaces the same controller, runs smooth up to 200Hz. The
> motion is unsmooth beyond 200Hz. It seems they are using [ ruckig
> ](https://github.com/pantor/ruckig) to smoothen the trajectories.


* _action_ns_ : The action namespace for the controller. (See debugging information below for important notes).


I rather propose to generate the full or at least longer trajectory and then
sent it using client. [ @gavanderhoorn ](/u/gavanderhoorn) explained you why
this causes issues otherwise.


> I am trying to send a sinusoidal motion to the first joint, all other joint
> positions are set to zero. Therefore, at each step, I send a trajectory `
> control_msgs::action::FollowJointTrajectory ` with a **single** point, using
> an action client. I feel like the robot has not reached the target position,
> when the new command arrives.


[ Previous ](../urdf_srdf/urdf_srdf_tutorial.html "URDF and SRDF") [ Next
](../perception_pipeline/perception_pipeline_tutorial.html "Perception
Pipeline Tutorial")


Hey people,


Contributor  Author


MoveIt2, which interfaces the same controller, runs smooth up to 200Hz. The
motion is unsmooth beyond 200Hz. It seems they are using [ ruckig
](https://github.com/pantor/ruckig) to smoothen the trajectories.


  * [ Tutorials ](../../tutorials/tutorials.html)
  * [ Examples ](../examples.html)
    * [ MoveGroup - ROS Wrappers in C++ ](../examples.html#movegroup-ros-wrappers-in-c)
    * [ Using MoveIt Directly Through the C++ API ](../examples.html#using-moveit-directly-through-the-c-api)
    * [ Integration with a New Robot ](../examples.html#integration-with-a-new-robot)
      * [ MoveIt Setup Assistant ](../setup_assistant/setup_assistant_tutorial.html)
      * [ URDF and SRDF ](../urdf_srdf/urdf_srdf_tutorial.html)
      * Low Level Controllers
        * MoveIt Controller Manager
        * MoveIt Controller Interfaces
        * Optional Allowed Trajectory Execution Duration Parameters
        * Debugging Information
        * Remapping /joint_states topic
        * Trajectory Execution Manager Options
        * Example Controller Manager
        * Simulation
        * Controller Switching and Namespaces
        * Controllers for Multiple Nodes
      * [ Perception Pipeline Tutorial ](../perception_pipeline/perception_pipeline_tutorial.html)
      * [ Hand-Eye Calibration ](../hand_eye_calibration/hand_eye_calibration_tutorial.html)
      * [ IKFast Kinematics Solver ](../ikfast/ikfast_tutorial.html)
      * [ TRAC-IK Kinematics Solver ](../trac_ik/trac_ik_tutorial.html)
    * [ Configuration ](../examples.html#configuration)
    * [ Miscellaneous ](../examples.html#miscellaneous)
  * [ Concepts ](../../concepts/concepts.html)
  * [ How-To Guides ](../../how_to_guides/how_to_guides.html)
  * [ API Documentation ](../../api/api.html)
  * [ Contributing ](../../how_to_contribute/how_to_contribute.html)


[ mhubii  ](https://discourse.ros.org/u/mhubii) February 11, 2022, 1:43pm  5


Sorry, something went wrong.


**[ AndyZe ](/AndyZe) ** commented  Apr 14, 2022


###  Footer navigation


Jump to bottom


> Should I use ` position_controllers/JointGroupPositionController ` instead?


Explore


features)
    * [ Concepts ](../../doc/index.html


**[ ShotaAk ](/ShotaAk) ** commented  Sep 17, 2020


[ destogl  ](https://discourse.ros.org/u/destogl) February 11, 2022, 12:52pm
2


Email Address


Member


##  Remapping /joint_states topic  


The parameters are:


Thank you very much for your help, and apologies again.


hi [ @gavanderhoorn ](/u/gavanderhoorn) , apologies for posting it here. I
wasn’t aware of this.


Cancel  Create saved search


##  Trajectory Execution Manager Options  


2. A launch file. This launch file must load the ` moveit_controllers  ` yaml file and specify the ` moveit_simple_controller_manager/MoveItSimpleControllerManager  ` . After these yaml files are loaded, they are passed as parameters to the Move Group node. [ Example Move Group launch file ](https://github.com/ros-planning/moveit_resources/blob/ros2/panda_moveit_config/launch/demo.launch.py) .


1 Like


[
![@henningkayser](https://avatars.githubusercontent.com/u/4572766?s=40&u=57f5385857b3a63598148847abc2b35f2cfe2765&v=4)
](/henningkayser) [ henningkayser ](/henningkayser) closed this as [ completed
](/ros-
planning/moveit2/issues?q=is%3Aissue+is%3Aclosed+archived%3Afalse+reason%3Acompleted)
in [ #361 ](/ros-planning/moveit2/pull/361) Mar 25, 2021


    <node pkg="moveit_ros_move_group" type="move_group" name="any_name" output="screen">
      <remap from="joint_states" to="robot/joint_states"/>
    </node>


[
![@henningkayser](https://avatars.githubusercontent.com/u/4572766?s=80&u=57f5385857b3a63598148847abc2b35f2cfe2765&v=4)
](/henningkayser)


* _default_ : The default controller is the primary controller chosen by MoveIt for communicating with a particular set of joints.


[ Sign up for free ](/join?source=comment-repo) **to join this conversation on
GitHub** . Already have an account? [ Sign in to comment
](/login?return_to=https%3A%2F%2Fgithub.com%2Fros-
planning%2Fmoveit2%2Fissues%2F283)


You signed in with another tab or window. [ Reload ]() to refresh your
session.  You signed out in another tab or window. [ Reload ]() to refresh
your session.  You switched accounts on another tab or window. [ Reload ]() to
refresh your session.  Dismiss alert


I'm trying to use new ros2_control API in our robot (CRANE+V2, [
https://github.com/rt-net/crane_plus ](https://github.com/rt-net/crane_plus)
).
Is there any migration guide for new API?
(It seem the ` joint_command_handle ` , ` joint_state_handle ` and `
robot_hardware ` in ` hardware_interface ` are deleted.)

---

All reactions


Password


#  Use new ros2_control interfaces  #283


[
![@AndyZe](https://avatars.githubusercontent.com/u/11284393?s=80&u=24eb488e02f9d9ce574f09c9025fa15d8f3814e6&v=4)
](/AndyZe)


**[ destogl ](/destogl) ** commented  Dec 12, 2020


© Copyright 2024, PickNik Robotics.


[ ros_control ](https://discourse.ros.org/tag/ros_control) , [ ros2
](https://discourse.ros.org/tag/ros2)


api-documentation)
    * [ Features ](../../doc/index.html


[ Sign up for free ](/join?source=comment-repo) **to join this conversation on
GitHub** . Already have an account? [ Sign in to comment
](/login?return_to=https%3A%2F%2Fgithub.com%2Fros-
planning%2Fmoveit2%2Fissues%2F1182)


>   * ` execution_duration_monitoring  ` : when false, will not throw error is
> trajectory takes longer than expected to complete at the low-level
> controller side
>
>   * ` allowed_goal_duration_margin  ` : Allow more than the expected
> execution time before triggering a trajectory cancel (applied after scaling)
>
>   * ` allowed_start_tolerance  ` : Allowed joint-value tolerance for
> validation that trajectory’s first point matches current robot state. If set
> to zero will skip waiting for robot to stop after execution
>
>


  * [ ](../../../index.html)
  * [ Examples ](../examples.html)
  * Low Level Controllers
  * [ Edit on GitHub ](https://github.com/ros-planning/moveit2_tutorials/blob/humble/doc/examples/controller_configuration/controller_configuration_tutorial.rst)


[ gavanderhoorn  ](https://discourse.ros.org/u/gavanderhoorn) February 11,
2022, 1:36pm  4


* 👍  2 reactions


#  How to specify a controller to use when executing a trajectory through the
MoveGroup ROS interface?  #1182


Copy link


handling-of-errors-that-happen-during-read-and-write-calls)
      * [ Mock Components ](mock_components_userdoc.html)
  * [ ros2_controllers ](../../../ros2_controllers/doc/controllers_index.html)
  * [ Demos ](../../../ros2_control_demos/doc/index.html)
  * [ Command Line Interface ](../../ros2controlcli/doc/userdoc.html)
  * [ Simulator Integrations ](../../../simulators/simulators.html)
  * [ Migration Guides ](../../../migration/migration.html)
  * [ Supported Robots ](../../../supported_robots/supported_robots.html)
  * [ Resources ](../../../resources/resources.html)
  * [ Contributing ](../../../contributing/contributing.html)
  * [ Project Ideas for GSoC 2024 ](../../../project_ideas.html)
  * [ Acknowledgements ](../../../acknowledgements/acknowledgements.html)

__ [ ROS2_Control: Rolling ](../../../../index.html)

  * [ ](../../../../index.html)
  * [ ros2_control ](../../doc/index.html)
  * [ Hardware Components ](hardware_components_userdoc.html)
  * Different update rates for Hardware Components
  * [ Edit on GitHub ](https://github.com/ros-controls/ros2_control/blob/master/hardware_interface/doc/different_update_rates_userdoc.rst)

* * *

**You're reading the documentation for a development version. For the latest
released version, please have a look at[ Iron
](../../../../../iron/doc/ros2_control/hardware_interface/doc/different_update_rates_userdoc.html)
. **


Sorry, something went wrong.


hi [ @destogl ](/u/destogl) , thanks for the prompt response. Just to clarify,
it is very possible that I use the ros2_control horribly wrong.


New issue


[ MoveIt  ](/c/moveit/13)


    * [ All features ](/features)
    * [ Documentation  ](https://docs.github.com)
    * [ GitHub Skills  ](https://skills.github.com/)
    * [ Blog  ](https://github.blog)


Merged


**[ destogl ](/destogl) ** commented  Jan 5, 2021  •


**[ ShotaAk ](/ShotaAk) ** commented  Jan 6, 2021


Open


    * [ CI/CD & Automation ](/solutions/ci-cd/)
    * [ DevOps ](/solutions/devops/)
    * [ DevSecOps  ](https://resources.github.com/devops/fundamentals/devsecops/)


Already on GitHub? [ Sign in ](/login?return_to=%2Fros-
planning%2Fmoveit2%2Fissues%2Fnew%2Fchoose) to your account


Yeah, this is a thing… If you are using this, then the update rate of
ros2_control_node does not have any influence on execution. At which frequency
is running your hardware? I would guess probably something around 200Hz. So
when you chose higher frequency JTC is interpolation for it, but you are not
communicating faster to the hardware.


#  Low Level Controllers  


we have now fixed the API for Foxy and you can start to handle this. If you
need any help just ping me or [ @bmagyar ](https://github.com/bmagyar)

---

All reactions


You signed in with another tab or window. [ Reload ]() to refresh your
session.  You signed out in another tab or window. [ Reload ]() to refresh
your session.  You switched accounts on another tab or window. [ Reload ]() to
refresh your session.  Dismiss alert


[ General  ](/c/general/8)


[ release ](https://discourse.ros.org/tag/release) , [ ros2
](https://discourse.ros.org/tag/ros2) , [ ros_control
](https://discourse.ros.org/tag/ros_control) , [ foxy
](https://discourse.ros.org/tag/foxy)


If using the Move Group or MoveItCpp, a MoveItControllerManager (MICM) can be
used to manage controller switching. The MICM can parse the joint names in any
command coming from MoveIt and activate the appropriate controllers. For
example, it can automatically switch between controlling two manipulators in a
single joint group at once to a single manipulator. To use a MICM, just set `
moveit_manage_controllers  =  true  ` in the launch file. [ Example MICM
launch file ](https://github.com/ros-
planning/moveit_resources/blob/ros2/panda_moveit_config/launch/demo.launch.py)
. Frankly, the MICM is a candidate to be deprecated soon and we do not
recommend its use.


* _name_ : The name of the controller. (See debugging information below for important notes).


[ Temporarily freeze ros2_control branches in workspace  #284  ](/ros-
planning/moveit2/pull/284)


>         if (first_write_pass_ || (time - last_write_time_ ) >
> desired_hw_update_period_)
>         {
>           first_write_pass_ = false;
>           //   declaration in *.hpp file --> rclcpp::Time last_write_time_ ;
>           last_write_time_ = time;
>           // hardware comms and operations
>           ...
>         }
>         ...
>     }
>

Note

The approach to get the desired update period value from the URDF and assign
it to the variable ` desired_hw_update_period_  ` is the same as in the
previous section (  step 1  and  step 2  ) but with a different parameter
name.

[ Previous ](writing_new_hardware_component.html "Writing a Hardware
Component") [ Next  ](mock_components_userdoc.html "Mock Components")

* * *

© Copyright 2024, ros2_control Development Team.

Built with [ Sphinx ](https://www.sphinx-doc.org/) using a [ theme
](https://github.com/readthedocs/sphinx_rtd_theme) provided by [ Read the Docs
](https://readthedocs.org) .

Other Versions  v: master

Releases

     [ Iron (latest) ](../../../../../iron/doc/ros2_control/hardware_interface/doc/different_update_rates_userdoc.html)

     [ Humble ](../../../../../humble/doc/ros2_control/hardware_interface/doc/different_update_rates_userdoc.html)

     [ Galactic (EOL) ](../../../../../galactic/index.html)


  By measuring elapsed time  

Another way to decide if hardware communication should be executed in the `
read(const  rclcpp::Time  & time,  const  rclcpp::Duration  & period)  `
and/or ` write(const  rclcpp::Time  & time,  const  rclcpp::Duration  &
period)  ` implementations is to measure elapsed time since last pass:

  1. In your ` on_activate  ` specific implementation reset the flags that indicate that this is the first pass of the ` read  ` and ` write  ` methods

>
>     hardware_interface::CallbackReturn MySystemHardware::on_activate(
>       const rclcpp_lifecycle::State & /*previous_state*/)
>     {
>         //   declaration in *.hpp file --> bool first_read_pass_,
> first_write_pass_ = true ;
>         first_read_pass_ = first_write_pass_ = true;
>         ...
>     }
>

  2. In your ` read(const  rclcpp::Time  & time,  const  rclcpp::Duration  & period)  ` and/or ` write(const  rclcpp::Time  & time,  const  rclcpp::Duration  & period)  ` specific implementations decide if you should interfere with your hardware

> >     hardware_interface::return_type MySystemHardware::read(const
> rclcpp::Time & time, const rclcpp::Duration & period)
>     {
>         if (first_read_pass_ || (time - last_read_time_ ) >
> desired_hw_update_period_)
>         {
>           first_read_pass_ = false;
>           //   declaration in *.hpp file --> rclcpp::Time last_read_time_ ;
>           last_read_time_ = time;
>           // hardware comms and operations
>           ...
>         }
>         ...
>     }
>
>     hardware_interface::return_type MySystemHardware::write(const
> rclcpp::Time & time, const rclcpp::Duration & period)
>     {


  * [ Code  ](/ros-planning/moveit2)
  * [ Issues  245  ](/ros-planning/moveit2/issues)
  * [ Pull requests  42  ](/ros-planning/moveit2/pulls)
  * [ Discussions  ](/ros-planning/moveit2/discussions)
  * [ Actions  ](/ros-planning/moveit2/actions)
  * [ Projects  1  ](/ros-planning/moveit2/projects)
  * [ Security  ](/ros-planning/moveit2/security)
  * [ Insights  ](/ros-planning/moveit2/pulse)


Or you can make a subscriber with the correct topic name and then ensure that
the starting robot state for your move group corresponds to a correct joints
angle by using the call back of this subscriber.


Toggle navigation


[ ![@destogl](https://avatars.githubusercontent.com/u/1918204?s=52&v=4)
](/destogl) [
![@bmagyar](https://avatars.githubusercontent.com/u/3524577?s=52&v=4)
](/bmagyar) [
![@henningkayser](https://avatars.githubusercontent.com/u/4572766?s=52&v=4)
](/henningkayser) [
![@JafarAbdi](https://avatars.githubusercontent.com/u/16278108?s=52&v=4)
](/JafarAbdi) [
![@yongxf](https://avatars.githubusercontent.com/u/18318195?s=52&v=4)
](/yongxf) [
![@ShotaAk](https://avatars.githubusercontent.com/u/18494952?s=52&v=4)
](/ShotaAk)


Projects


The build has failed.


> blocking calls in ` read ` and ` write ` methods


Hey guys, the current version is functional to a limited extent but the
upcoming changes may break API/ABI multiple times, hence the recommendation to
stick to a fixed version for the time being. I'll make sure to update you when
we reach a stable version.

---

All reactions


**[ henningkayser ](/henningkayser) ** commented  Sep 25, 2020


* _parallel_ : When this is set, _joints_ should be of size 2, and the command will be the sum of the two joints.


Copy link


[
![@JafarAbdi](https://avatars.githubusercontent.com/u/16278108?s=40&u=e2772099cfb31f3e0d03dfc8237aac48213b1924&v=4)
](/JafarAbdi) [ JafarAbdi ](/JafarAbdi) self-assigned this  Sep 22, 2020


|  12  |  5129  |  March 16, 2021
[ New release of ros_control 0.19.3 and ros_controllers 0.18.0
](https://discourse.ros.org/t/new-release-of-ros-control-0-19-3-and-ros-
controllers-0-18-0/16888)


All reactions


Sorry, something went wrong.


Contributor


> The ` joint_trajectory_controller/JointTrajectoryController ` is used for
> control. When sending joint positions via an action client, the resulting
> motion is unsmooth.


[
![@schornakj](https://avatars.githubusercontent.com/u/14431472?s=40&u=fcccfc4fa3bebac047c907adad078dc822f22ccc&v=4)
](/schornakj) [ schornakj ](/schornakj) mentioned this issue  Apr 14, 2022


    * [ Actions  Automate any workflow  ](/features/actions)
    * [ Packages  Host and manage packages  ](/features/packages)
    * [ Security  Find and fix vulnerabilities  ](/features/security)
    * [ Codespaces  Instant dev environments  ](/features/codespaces)
    * [ Copilot  Write better code with AI  ](/features/copilot)
    * [ Code review  Manage code changes  ](/features/code-review)
    * [ Issues  Plan and track work  ](/features/issues)
    * [ Discussions  Collaborate outside of code  ](/features/discussions)


FYI Ruckig isn’t being used for MoveIt smoothing unless you went out of your
way to specify it.


Labels


![](https://sea2.discourse-
cdn.com/business7/user_avatar/discourse.ros.org/mhubii/48/5381_2.png) mhubii:


Open


What do you mean when you say "prevent"? I should expand a bit on what I
posted earlier to be clearer:


**[ ShotaAk ](/ShotaAk) ** commented  Sep 25, 2020


* _type_ : The type of action being used (here GripperCommand).


<param name="moveit_controller_manager" value="moveit_ros_control_interface::MoveItMultiControllerManager" />


[ Use fake_components::GenericSystem from ros2_control  #361  ](/ros-
planning/moveit2/pull/361)


I went through the same issue. joint_command_handle.hpp cannot be found in
moveit2.

---

All reactions


To see all available qualifiers, see our [ documentation
](https://docs.github.com/search-github/github-code-search/understanding-
github-code-search-syntax) .


Explore


[ ros2 ](https://discourse.ros.org/tag/ros2) , [ ros-industrial
](https://discourse.ros.org/tag/ros-industrial) , [ ros2_control
](https://discourse.ros.org/tag/ros2_control)


Sorry, something went wrong.


[ @bmagyar ](https://github.com/bmagyar) Thanks. It looks like there will be
more updates than just joint handle.


All reactions


Query


{{ message }}


[
![@ShotaAk](https://avatars.githubusercontent.com/u/18494952?s=40&u=a667bf5de7c93b116f1a71ad9a7b8619e58213f0&v=4)
](/ShotaAk) [ ShotaAk ](/ShotaAk) added the [ bug ](/ros-
planning/moveit2/labels/bug) Something isn't working  label  Sep 17, 2020


L178)
calls in [ hardware_interface(s) ](https://github.com/ros-
controls/ros2_control/blob/master/hardware_interface/include/hardware_interface/system_interface.hpp)
. To achieve different update rates for your hardware component you can use
the following steps:

  1. Add parameters of main control loop update rate and desired update rate for your hardware component

>
>     <?xml version="1.0"?>
>     <robot xmlns:xacro="http://www.ros.org/wiki/xacro">
>
>       <xacro:macro name="system_interface" params="name
> main_loop_update_rate desired_hw_update_rate">
>
>         <ros2_control name="${name}" type="system">
>           <hardware>
>               <plugin>my_system_interface/MySystemHardware</plugin>
>               <param
> name="main_loop_update_rate">${main_loop_update_rate}</param>
>               <param
> name="desired_hw_update_rate">${desired_hw_update_rate}</param>
>           </hardware>
>           ...
>         </ros2_control>
>
>       </xacro:macro>
>
>     </robot>
>

  2. In you ` on_init()  ` specific implementation fetch the desired parameters

>
>     namespace my_system_interface
>     {
>     hardware_interface::CallbackReturn MySystemHardware::on_init(
>       const hardware_interface::HardwareInfo & info)
>     {
>       if (


###  Steps to reproduce


#  Use new ros2_control interfaces  #283


yes, or the velocity variant.


Cancel  Submit feedback


    In file included from /home/shotaak/moveit_ws/src/fake_joint/fake_joint_driver/src/fake_joint_driver_node.cpp:10:
    /home/shotaak/moveit_ws/src/fake_joint/fake_joint_driver/include/fake_joint_driver/fake_joint_driver.h:12:10: fatal error: hardware_interface/joint_command_handle.hpp: No such file or directory
       12 | #include <hardware_interface/joint_command_handle.hpp>
          |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    compilation terminated.


(TODO: update for ROS2)


#  Search code, repositories, users, issues, pull requests...


When you are mentioning 200Hz, what do you mean by that? Is this frequency of
the ros2_control update loop? If so, could it be that your hardware is using
blocking calls in ` read ` and ` write ` methods and this slows down the
trajectory execution?


[ ](https://github.com/)


There are several options for tuning the behavior and safety checks of the
execution pipeline in MoveIt. In your ` moveit_config  ` package edit the `
trajectory_execution.launch.xml  ` file to change the following parameters:


If the controllers aren't switched automatically before handling the
trajectory **and I want to successfully execute a trajectory using the joint
trajectory controller even if the streaming controller is currently active** ,
I would have to make sure that the streaming controller is inactive before
executing a trajectory that should use the joint trajectory controller
**because the controllers will no longer be switched automatically if the
current configuration of the system is different from the configuration needed
to execute the trajectory with the desired controller** .


##  Use saved searches to filter your results more quickly


You should also be able to see (using ` ros2  topic  info  topic_name  ` )
that the topics are published/subscribed to by the controllers on your robot
and also by the **move_group** node.


**[ destogl ](/destogl) ** commented  Sep 20, 2020


I'd prefer something even simpler: just take what's in the [ yaml file
](https://github.com/ros-
planning/moveit_resources/blob/394a3c6aba9da34d5317697fdb0db2c9acc8ebd8/panda_moveit_config/config/moveit_controllers.yaml#L10)
as the default. If the default is not active, then so be it. MoveIt shouldn't
be searching.

---

All reactions


Copy link


[ General  ](/c/general/8)


No milestone


Hi Everyone,


Milestone


Sorry, something went wrong.


[ Use fake_components::GenericSystem from ros2_control ](/ros-
planning/moveit2/pull/361) [ JafarAbdi/moveit2 ](/JafarAbdi/moveit2)


[ Sign in ](/login?return_to=https%3A%2F%2Fgithub.com%2Fros-
planning%2Fmoveit2%2Fissues%2F283)


![](https://sea2.discourse-
cdn.com/business7/user_avatar/discourse.ros.org/mhubii/48/5381_2.png) mhubii:


Resources


Assignees


###  Your environment


[ bug  ](/ros-planning/moveit2/labels/bug) Something isn't working


[ ![@destogl](https://avatars.githubusercontent.com/u/1918204?s=40&v=4)
](/destogl) [ destogl ](/destogl) mentioned this issue  Sep 20, 2020


No one assigned


6 participants


[
![@ShotaAk](https://avatars.githubusercontent.com/u/18494952?s=40&u=a667bf5de7c93b116f1a71ad9a7b8619e58213f0&v=4)
](/ShotaAk) [ ShotaAk ](/ShotaAk) mentioned this issue  Nov 11, 2020


Name


* _default_ : The default controller is the primary controller chosen by MoveIt for communicating with a particular set of joints.


> I would have to make sure that the streaming controller is inactive before
> executing a trajectory that should use the joint trajectory controller.


Contributor


This causes above fake_joint_driver's build error.

---

The text was updated successfully, but these errors were encountered:


    * [ Learning Pathways  ](https://resources.github.com/learn/pathways/)
    * [ White papers, Ebooks, Webinars  ](https://resources.github.com/)
    * [ Customer Stories ](/customer-stories)
    * [ Partners  ](https://partner.github.com/)


I agree that the TEM's controller search logic should be largely removed. It's
kind of broken anyway. A minor complication is that lots of code that uses
MoveIt assumes that if no particular controller is specified when executing a
trajectory then the TEM will pick the right controller to use. Since most
projects just use one controller per set of joints, it's probably acceptable
to replace the TEM's controller search logic with some simple condition, like
picking the first currently-active controller that controls the joints
actuated by the trajectory.

---

All reactions


Copy link


[
![@AndyZe](https://avatars.githubusercontent.com/u/11284393?s=80&u=24eb488e02f9d9ce574f09c9025fa15d8f3814e6&v=4)
](/AndyZe)


200 Hz refers to the ros2_control control loop frequency


Open


[ mhubii  ](https://discourse.ros.org/u/mhubii) February 11, 2022, 1:10pm  3


The Fast Robot Interface was built by KUKA such that the controller and the
controlling computer run at the same rate. The computer waits from messages by
the controller and responds to them.


[ Sign up
](/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-
name%3E%2F%3Crepo-
name%3E%2Fvoltron%2Fissues_fragments%2Fissue_layout&source=header-
repo&source_repo=ros-planning%2Fmoveit2)


Contributor  Author


You can’t perform that action at this time.


New issue


L175)
and [ write(…) ](https://github.com/ros-
controls/ros2_control/blob/fe462926416d527d1da163bc3eabd02ee1de9be9/hardware_interface/include/hardware_interface/system_interface.hpp


[ @henningkayser ](https://github.com/henningkayser) [ @JafarAbdi
](https://github.com/JafarAbdi) I have replaced old joint handles of `
fake_joint_driver ` to new joint handles to solve this issue.
(See [ ShotaAk/fake_joint@ ` e888e49 `
](https://github.com/ShotaAk/fake_joint/commit/e888e4988563c2e671f4239f2fe9de0938d2e0bf)
)


     [ Foxy (EOL) ](../../../../../foxy/index.html)

In Development

     [ Master ](different_update_rates_userdoc.html)


1. GripperCommand Controller Interface


I think the solution to this is to add a field for controller names to the [
ExecuteTrajectory.action message ](https://github.com/ros-
planning/moveit_msgs/blob/ros2/action/ExecuteTrajectory.action) to allow the
code on the action client side to set the right controllers when the motion is
planned. This would require an API change, though.


(TODO: update for ROS2)


    * [ Topics ](/topics)
    * [ Trending ](/trending)
    * [ Collections ](/collections)


Sorry, something went wrong.


> I'd prefer something even simpler: just take what's in the [ yaml file
> ](https://github.com/ros-
> planning/moveit_resources/blob/394a3c6aba9da34d5317697fdb0db2c9acc8ebd8/panda_moveit_config/config/moveit_controllers.yaml#L10)
> as the default. If the default is not active, then so be it. MoveIt
> shouldn't be searching.


Search or jump to...


edited


##  Debugging Information  


* 👍  1 reaction


##  Controller Switching and Namespaces  


  * [ Terms ](https://docs.github.com/site-policy/github-terms/github-terms-of-service)
  * [ Privacy ](https://docs.github.com/site-policy/privacy-policies/github-privacy-statement)
  * [ Security ](/security)
  * [ Status ](https://www.githubstatus.com/)
  * [ Docs ](https://docs.github.com/)
  * [ Contact ](https://support.github.com?tags=dotcom-footer)
  * Manage cookies
  * Do not share my personal information


By Solution


[
![@schornakj](https://avatars.githubusercontent.com/u/14431472?s=80&u=fcccfc4fa3bebac047c907adad078dc822f22ccc&v=4)
](/schornakj)


Copy link


![](https://sea2.discourse-
cdn.com/business7/user_avatar/discourse.ros.org/destogl/48/7158_2.png)
destogl:


Powered by [ Discourse ](https://www.discourse.org) , best viewed with
JavaScript enabled


  * [ Notifications ](/login?return_to=%2Fros-planning%2Fmoveit2)
  * [ Fork  471  ](/login?return_to=%2Fros-planning%2Fmoveit2)
  * [ Star  906  ](/login?return_to=%2Fros-planning%2Fmoveit2)


**[ henningkayser ](/henningkayser) ** commented  Sep 17, 2020


##  Optional Allowed Trajectory Execution Duration Parameters  


**Have a question about this project?** Sign up for a free GitHub account to
open an issue and contact its maintainers and the community.


[
![@ShotaAk](https://avatars.githubusercontent.com/u/18494952?s=80&u=a667bf5de7c93b116f1a71ad9a7b8619e58213f0&v=4)
](/ShotaAk)


#  Search code, repositories, users, issues, pull requests...


MoveIt typically publishes manipulator motion commands to a [
JointTrajectoryController ](https://github.com/ros-
controls/ros2_controllers/tree/master/joint_trajectory_controller) . This
tutorial assumes MoveGroup is being used to control the robot rather than
MoveItCpp or MoveIt Servo. A minimal setup is as follows:


If you do not have a physical robot, ` ros2_control  ` makes it very easy to
simulate one. Ignition or Gazebo is not required; RViz is sufficient. All
examples in the [ ros2_control_demos repo ](https://github.com/ros-
controls/ros2_control_demos) are simulated.


    * [ CI/CD & Automation ](/solutions/ci-cd/)
    * [ DevOps ](/solutions/devops/)
    * [ DevSecOps  ](https://resources.github.com/devops/fundamentals/devsecops/)


Does anyone have other ideas about this?

---

The text was updated successfully, but these errors were encountered:


No milestone


|  13  |  5120  |  April 9, 2024
[ Announcing ros_control updates ](https://discourse.ros.org/t/announcing-ros-
control-updates/1333)


[ Sign in ](/login?return_to=https%3A%2F%2Fgithub.com%2Fros-
planning%2Fmoveit2%2Fissues%2F1182)


Sorry, something went wrong.


Built with [ Sphinx ](https://www.sphinx-doc.org/) using a [ theme
](https://github.com/readthedocs/sphinx_rtd_theme) provided by [ Read the Docs
](https://readthedocs.org) .


Contributor


    controller_list:
     - name: arm_controller
       action_ns: follow_joint_trajectory
       type: FollowJointTrajectory
       allowed_execution_duration_scaling: 1.2
       allowed_goal_duration_margin: 0.5


I think the controller search logic should just be deleted. If you try what I
wrote above and it still doesn't work, then I support your idea 👍

---

All reactions


* Product


For


Just to give feedback, using the `
position_controllers/JointGroupPositionController ` controller indeed helps.
Sending commands at the control rate makes the unsmooth motion disappear [
@destogl ](/u/destogl) . Thank you very much for your help. And amazing work
on ` ros2_control ` btw


Closed


It sounds like you are generating/interpolating your trajectory, so yes,
JointGroupPositionController could be a better solution.


Assignees


[ Search syntax tips ](https://docs.github.com/search-github/github-code-
search/understanding-github-code-search-syntax)


MoveIt controller managers, somewhat a misnomer, are the interfaces to your
custom low level controllers. A better way to think of them are _controller
interfaces_ . For most use cases, the included [ MoveItSimpleControllerManager
](https://github.com/ros-
planning/moveit2/blob/main/moveit_plugins/moveit_simple_controller_manager) is
sufficient if your robot controllers already provide ROS actions for
FollowJointTrajectory. If you use _ros_control_ , the included [
MoveItRosControlInterface ](https://github.com/ros-
planning/moveit2/blob/main/moveit_plugins/moveit_ros_control_interface) is
also ideal.


Projects


[ @henningkayser ](https://github.com/henningkayser) Sure. 👍

---

All reactions


By Solution


Labels


**[ AndyZe ](/AndyZe) ** commented  Apr 14, 2022  •


[ ![@JafarAbdi](https://avatars.githubusercontent.com/u/16278108?s=40&v=4)
](/JafarAbdi) [ JafarAbdi  ](/JafarAbdi)


* _type_ : The type of action being used (here FollowJointTrajectory).


Copy link


[ Use new joint handles  JafarAbdi/fake_joint#4
](/JafarAbdi/fake_joint/pull/4)


###  Footer navigation


[ ![@destogl](https://avatars.githubusercontent.com/u/1918204?s=80&v=4)
](/destogl)


|  1  |  480  |  October 20, 2020

  * [ Home ](/)
  * [ Categories ](/categories)
  * [ FAQ/Guidelines ](/guidelines)
  * [ Terms of Service ](/tos)
  * [ Privacy Policy ](/privacy)


![](https://sea2.discourse-
cdn.com/business7/user_avatar/discourse.ros.org/mhubii/48/5381_2.png) mhubii:


Search


[ schornakj ](/schornakj) opened this issue  Apr 14, 2022  · 7 comments


The JTC will try to perform trajectory replacement, which will not work too
well with very short trajectories.


Jump to bottom


Can you explain here a bit more what are you doing? Are you sending the full
trajectory through action client or individual points? What is the source of
those points? How are they interpoalted? Is it possible that robot reaches the
points and start to slow-down before the next point is received, and this then
results in unsmooth motion?


[ @destogl ](https://github.com/destogl) That's great documentation!
The contents of ` Differences to ros_control (ROS1) ` and ` Migration Guide to
ros2_control ` are exactly what I wanted to read.
Thank you!

---

👍  1  destogl reacted with thumbs up emoji


**[ bmagyar ](/bmagyar) ** commented  Sep 26, 2020


Sorry, something went wrong.


[ [ros2] How to specify a controller to use when executing a trajectory
through the ExecuteTaskSolutionCapability ROS interface?  ros-
planning/moveit_task_constructor#354  ](/ros-
planning/moveit_task_constructor/issues/354)


#  Saved searches