All information about instalation and setup can be found in the wiki
All commands below are to be run on the robot computer unless you're running a simulation or rviz2 to visualize the robot remotely from the host machine. SLAM and Navigation launch files are the same for both real and simulated robots in Gazebo.
ros2 launch linorobot2_bringup bringup.launch.py
Optional parameters:
-
base_serial_port - Serial port of the robot's microcontroller. The assumed value is
/dev/ttyACM0
. Otherwise, change the default value to the correct serial port. For example:ros2 launch linorobot2_bringup bringup.launch.py base_serial_port:=/dev/ttyACM1
-
joy - Set to true to run the joystick node in the background. (Tested on Logitech F710).
Always wait for the microROS agent to be connected before running any application (ie. creating a map or autonomous navigation). Once connected, the agent will print:
| Root.cpp | create_client | create
| SessionManager.hpp | establish_session | session established
The agent needs a few seconds to get reconnected (less than 30 seconds). Unplug and plug back in the microcontroller if it takes longer than usual.
ros2 launch linorobot2_gazebo gazebo.launch.py
linorobot2_bringup.launch.py or gazebo.launch.py must always be run on a separate terminal before creating a map or robot navigation when working on a real robot or gazebo simulation respectively.
Run teleop_twist_keyboard to control the robot using your keyboard:
ros2 run teleop_twist_keyboard teleop_twist_keyboard
Press:
- i - To drive the robot forward.
- , - To reverse the robot.
- j - To rotate the robot CCW.
- l - To rotate the robot CW.
- shift + j - To strafe the robot to the left (for mecanum robots).
- shift + l - To strafe the robot to the right (for mecanum robots).
- u / o / m / . - Used for turning the robot, combining linear velocity x and angular velocity z.
Pass joy
argument to the launch file and set it to true to enable the joystick. For example:
ros2 launch linorobot2_bringup bringup.launch.py joy:=true
- On F710 Gamepad, the top switch should be set to 'X' and the 'MODE' LED should be off.
Press Button/Move Joystick:
- RB (First top right button) - Press and hold this button while moving the joysticks to enable control.
- Left Joystick Up/Down - To drive the robot forward/reverse.
- Left Joystick Left/Right - To strafe the robot to the left/right.
- Right Joystick Left/Right - To rotate the robot CW/CCW.
3.1 Run SLAM Toolbox:
ros2 launch linorobot2_navigation slam.launch.py
Optional parameters for simulation on host machine:
For example:
ros2 launch linorobot2_navigation slam.launch.py rviz:=true sim:=true
- sim - Set to true for simulated robots on the host machine. Default value is false.
- rviz - Set to true to visualize the robot in RVIZ. Default value is false.
The rviz
argument on slam.launch.py won't work on headless setup but you can visualize the robot remotely from the host machine:
ros2 launch linorobot2_viz slam.launch.py
Drive the robot manually until the robot has fully covered its area of operation. Alternatively, the robot can also receive goal poses to navigate autonomously while mapping:
ros2 launch nav2_bringup navigation_launch.py
- Pass
use_sim_time:=true
to the launch file when running in simulation.
More info here.
cd linorobot2/linorobot2_navigation/maps
ros2 run nav2_map_server map_saver_cli -f <map_name> --ros-args -p save_map_timeout:=10000.
Open linorobot2/linorobot2_navigation/launch/navigation.launch.py and change MAP_NAME to the name of the newly created map. Build the robot computer's workspace once done:
cd <robot_computer_ws>
colcon build
Alternatively, map
argument can be used when launching Nav2 (next step) to dynamically load map files. For example:
ros2 launch linorobot2_navigation navigation.launch.py map:=<path_to_map_file>/<map_name>.yaml
4.2 Run Nav2 package:
ros2 launch linorobot2_navigation navigation.launch.py
Optional parameter for loading maps:
- map - Path to newly created map <map_name.yaml>.
Optional parameters for simulation on host machine:
- sim - Set to true for simulated robots on the host machine. Default value is false.
- rviz - Set to true to visualize the robot in RVIZ. Default value is false.
The rviz
argument for navigation.launch.py won't work on headless setup but you can visualize the robot remotely from the host machine:
ros2 launch linorobot2_viz navigation.launch.py
Check out Nav2 tutorial for more details on how to initialize and send goal pose.
navigation.launch.py will continue to throw this error Timed out waiting for transform from base_link to map to become available, tf error: Invalid frame ID "map" passed to canTransform argument target_frame - frame does not exist
until the robot's pose has been initialized.