Follow me - part 4

A project log for Wild Thumper based ROS robot

My ROS (Robot Operating System) indoor & outdoor robot

HumpelstilzchenHumpelstilzchen 09/09/2018 at 07:583 Comments

In the last attempt to make my robot follow me, I used a radio frequency of 433MHz with a small bandwidth of 90kHz. The major problem with this approach were reflections resulting in multipath interference. A technology immune against this issue is ultra-wideband (UWB), which is using a large bandwidth with more then 500MHz. The DWM1000 Module by Decawave is one implementation of UWB, quote:

"DWM1000 is an IEEE802.15.4-2011 UWB compliant wireless transceiver module based on DecaWave's DW1000 IC.  DWM1000 enables the location of objects in real time location systems (RTLS) to a precision of 10 cm indoors, high data rate communications, up to 6.8 Mb/s, and has excellent communications range of up to 300 m thanks to coherent receiver techniques."

Originally designed for 2d/3d localization, the DWM1000 modules basically enable the measuring of the distance between a "tag" and an "anchor". To test the DWM1000 I bought three Localino v1.3 boards. One board includes a DWM1000 and an AVR Atmega328 where I installed an open source dw1000 library on. Two DWM1000 are mounted on my Wild Thumper robot, one on each side between the front and the aft wheel about 29cm apart.

Both DWM1000 on the robot are configured as anchors. The third DWM1000 is configured as a tag and is the beacon that is to be followed:

Given the two distances dist_left, dist_right from both anchors to the tag and the distance between both anchors dist_left_right we get two right-angled triangles that share a side. With them the beacon position (x, y) from the center of the robot can be calculated using the Pythagorean theorem:

There are two solutions for these equations, one in front of the robot, one behind. Since the beacon is initially set up to be in front of the robot and is expected to stay there, only this one solution is taken. The calculated relative position of the beacon is then smoothed with a simple Kalman filter [1]. The prediction of the Kalman filter assumes a stationary object and is only adjusted when the robot itself moves. The prediction is corrected by the calculated x & y values from the equations above. The working code can be seen in the following video where the Wild Thumper robot follows a DWM1000 beacon which is mounted on a R/C car.

[1] The simple Kalman filter is based on the Matlab code in Xilinx Xcell Journal Issue 53, p. 74.


Yu1107 wrote 09/29/2021 at 02:10 point

Excuse me, how to use local planner without map, becuz in your video cant see map info?

  Are you sure? yes | no

Humpelstilzchen wrote 09/29/2021 at 11:52 point

In the usual ROS setup the local costmap usually does not use the map. The global costmap does. The global planner is working on the global costmap and the local planner is working on the local costmap. 

This is my default configuration of the global costmap:;a=blob;f=config/global_costmap_params.yaml;h=332d53341f77ae3becb2c199fe6e7add6897448f;hb=HEAD

This is the configuration of the global costmap without map:;a=blob;f=config/global_costmap_params_odom.yaml;h=417e0512d2ea1b7bbe9c72cd4192e8356e7c3840;hb=HEAD

You will see two differences:

1. global_frame in the second file is "odom" instead of "map"

2. plugins is missing the static_layer which is the map.

  Are you sure? yes | no

Yu1107 wrote 10/01/2021 at 06:13 point

thanks for your sharing !

  Are you sure? yes | no