Wifi Signal Strength Mapping

Wifi signal strength varies spatially. This project built and deployed the required ROS-nodes to autonomously generate a Floorplan of a location, overlaid with signal strength. The analyses make use of geographic-weighted regression to plot spatial variance.

Getting Started

These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. See deployment for notes on how to deploy the project on a live system.


  • A robot running ROS with…
    • WiFi-Connectivity
    • LiDAR
    • SLAM libraries
    • a ROS node that logs signal signal strength
  • A new R installation for statistical processing


Detailed set-up documentation for the robot makes use of my code for a signal-strength publishing node.

In order to create this node, we make a new package in our catkin workspace.

$ cd ~/catkin_ws/src 
src $ catkin_create_pkg signal_gthr std_msgs rospy

After this folder’s been created, replace the contents of the new folder with the folder in this repository. To deploy our new node, we make our host_posAndSignal.py executable, and then catkin_make this package:

$ sudo chmod +x signal_gthr/src/host_posAndSignal.py
$ cd ~/catkin_ws
$ catkin_make
$ rospack profile


Now you are ready to run the host_posAndSignal.py script. Locate a folder to save the data output.

Initialize ROS, and bringup the robot and your wifi node of choice.

host$ roscore

For specific launch instructions on the TurtleBot3, the platform used in my build of this project, see their website.

deadspottr$ roslaunch turtlebot3_bringup turtlebot3_robot.launch
deadspottr$ rosrun single_sig_test signal_strength.py

We now launch the signal_gthr node we just constructed on the host computer.

host$ roslaunch turtlebot3_slam turtlebot3_slam.launch
host$ rosrun rviz rviz -d `rospack find turtlebot3_slam`/rviz/turtlebot3_slam.rviz
host$ roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

To begin data-collection, run:

host$ rostopic echo -p /signal_dtagthr > /Path/to/output/file.txt

To check your set-up, run host$ rosrun rqt_graph rqt_graph to check your RQT-Graph against the proper set-up.


Data Collection

Now that the nodes are running, allow the robot to drive around the area you are trying to map.

After you are satisfied with the local area map, save the resulting map into the data folder, where we’ve been saving the publishings of the /signal_dtagthr topic.

host$ rosrun map_server map_saver -f map

Data Processing

To process these files into an output map, we now run the R script.

host$ r -f /Path/to/GenerateSignalMap.R

Because this script can run from any location, you will be prompted twice to enter the location of the data files that we collected.
When promped, enter the direct path to the file or folder asked. If this does not work, you can hard-code the path locations directly into the script.

The final generated file will be in the folder of the R script and be pdf file titled Rplots.pdf.

Built With

  • ROS - Open Source Robotic Software Platform
  • TurtleBot3 - Robotic Hardware Platform
  • R - Open Source Statistical Software

Drop me a line