Skip to content
/ rosbot-autonomy Public template

Autonomous navigation & mapping for ROSbot 2R / 2 PRO

License

Notifications You must be signed in to change notification settings

husarion/rosbot-autonomy

Repository files navigation

rosbot-autonomy

Autonomous navigation & mapping for ROSbot 2R / 2 PRO with RViz interface running on remote PC. Works over the Internet thanks to Husarnet VPN

autonomy-result

Note

There are two setups on two separate branchers available

branch name description
ros2router Running ROS 2 containers on ROSbot and on PC with the interface in RViz
foxglove Running ROS 2 containers only on ROSbot with a web user interface powered by Foxglove

🛍️ Necessary Hardware

For the execution of this project ROSbot 2R or ROSbot 2 PRO is required.

You can find it at our online store.

Quick start (Physical ROSbot)

Note

To simplify the execution of this project, we are utilizing just.

Install it with:

curl --proto '=https' --tlsv1.2 -sSf https://just.systems/install.sh | sudo bash -s -- --to /usr/bin

To see all available commands just run just:

husarion@rosbot2r:~/rosbot-autonomy$ just
Available recipes:
    connect-husarnet joincode hostname # connect to Husarnet VPN network
    flash-firmware    # flash the proper firmware for STM32 microcontroller in ROSbot 2R / 2 PRO
    start-rosbot      # start ROSbot 2R / 2 PRO autonomy containers
    start-pc          # start RViz visualization on PC
    restart-nav2      # restart the navigation stack (and SLAM)
    start-gazebo-sim  # start Gazebo simulator with autonomy
    start-webots-sim  # start Webots simulator with autonomy
    run-teleop        # run teleop_twist_keybaord (host)
    run-teleop-docker # run teleop_twist_keybaord (inside rviz2 container)
    sync hostname="${ROBOT_NAMESPACE}" password="husarion" # copy repo content to remote host with 'rsync' and watch for changes

🌎 Step 1: Connecting ROSbot and Laptop over VPN

Ensure that both ROSbot 2R (or ROSbot 2 PRO) and your laptop are linked to the same Husarnet VPN network. If they are not follow these steps:

  1. Setup a free account at app.husarnet.com, create a new Husarnet network, click the [Add element] button and copy the code from the Join Code tab.

  2. Run in the linux terminal on your PC:

    cd rosbot-autonomy # remember to run all "just" commands in the repo root folder
    export JOINCODE=<PASTE_YOUR_JOIN_CODE_HERE>
    just connect-husarnet $JOINCODE my-laptop
  3. Run in the linux terminal of your ROSbot:

    export JOINCODE=<PASTE_YOUR_JOIN_CODE_HERE>
    sudo husarnet join $JOINCODE rosbot2r

Important

note that rosbot2r is a default ROSbot hostname used in this project. If you want to change it, edit the .env file and change the line:

ROBOT_NAMESPACE=rosbot2r

📡 Step 2: Sync

Copy the local changes (on PC) to the remote ROSbot

just sync rosbot2r # or a different ROSbot hostname you used in Step 1 p.3

Note

This just sync script locks the terminal and synchronizes online all changes made locally on the robot. rosbot2r is the name of device set in Husarnet.

🔧 Step 3: Verifying User Configuration

To ensure proper user configuration, review the content of the .env file and select the appropriate configuration (the default options should be suitable).

  • LIDAR_BAUDRATE - depend on mounted LiDAR,
  • MECANUM - wheel type,
  • SLAM - choose between mapping and localization modes,
  • SAVE_MAP_PERIOD - period of time for autosave map (set 0 to disable),
  • CONTROLLER - choose the navigation controller type,
  • ROBOT_NAMESPACE - type your ROSbot device name the same as in Husarnet.

Important

The value of the ROBOT_NAMESPACE parameter in the .env file should be the same as the name of the Husarnet device.

🤖 Step 4: Running Navigation & Mapping

To enable autonomy on the robot, it is necessary:

  • starting autonomy on ROSbot
  • launching visualization on PC

ROSbot

  1. Connect to the ROSbot.

    ssh husarion@rosbot2r
    cd rosbot-autonomy

Note

rosbot2r is the name of device set in Husarnet.

  1. Flashing the ROSbot's Firmware.

    To flash the Micro-ROS based firmware for STM32F4 microcontroller responsible for low-level functionalities of ROSbot 2, 2R and 2 PRO, execute in the ROSbot's shell:

    just flash-firmware
  2. Running autonomy on ROSbot.

    just start-rosbot

PC

To initiate a user interface and navigation stack based on RViz, execute below command on your PC:

just start-pc

🚗 Step 5: Control the ROSbot from RViz

To instruct the robot to autonomously explore new areas and create a map (in "slam" mode) of [2D Goal Pose] in RViz. When SLAM is off, you can indicate the robot's current position by [2D Pose Estimate] button.

autonomy-result


Simulation

Important

To run Gazebo or Webots Simulators you have to use computer with NVIDIA GPU and the NVIDIA Container Toolkit installed.

If you don't have a physical ROSbot 2R / 2 PRO you can run this project in a simulation.

Gazebo

Gazebo

To start Gazebo simulator run:

just start-gazebo-sim

Webots

To start Webots simulator run:

just start-webots-sim