TurtleBot is a ROS standard platform robot. There are 3 versions of the TurtleBot model. The last version, _TurtleBot3_, was developed with features to supplement the lacking functions of its predecessors, and the demands of users.
TurtleBot is a ROS standard platform robot. There are 3 versions of the TurtleBot model. The last version, _TurtleBot3_, was developed with features to supplement the lacking functions of its predecessors, and the demands of users.
The TurtleBot3 version adopts ROBOTIS smart actuator DYNAMIXEL for driving. TurtleBot3 is a small, affordable, programmable, ROS-based mobile robot. The TurtleBot3 can be customized into various ways depending on how you reconstruct the mechanical parts and use optional parts such as the computer and sensor. In addition, TurtleBot3 is evolved with cost-effective and small-sized SBC that is suitable for robust embedded system, 360 degree distance sensor and 3D printing technology.
The TurtleBot3 version adopts ROBOTIS smart actuator DYNAMIXEL for driving. TurtleBot3 is a small, affordable, programmable, ROS-based mobile robot. The TurtleBot3 can be customized into various ways depending on how you reconstruct the mechanical parts and use optional parts such as the computer and sensor. In addition, TurtleBot3 is evolved with cost-effective and small-sized SBC that is suitable for robust embedded system, 360 degree distance sensor and 3D printing technology.
*[Working with the TurtleBot3 Burger](#working-with-the-turtlebot3-burger)
*[Working with the TurtleBot3 Burger](#working-with-the-turtlebot3-burger)
*[Specification](#specification)
*[Specification](#specification)
*[Local environment and configuration](#local-environment-and-configuration)
*[Local environment and configuration](#local-environment-and-configuration)
*[Getting started using ROS 1](#getting-started-using-ros-1)
*[Getting started using ROS 1](#getting-started-using-ros-1)
*[Configuring](#configuring)
*[Configuring](#configuring)
*[Launching ROS](#launching-ros)
*[Launching ROS](#launching-ros)
*[Getting started using ROS 2](#getting-started-using-ros-2)
*[Getting started using ROS 2](#getting-started-using-ros-2)
*[Working with TurtleBot3 Waffle with arm](#working-with-turtlebot3-waffle-with-arm)
*[Working with TurtleBot3 Waffle with arm](#working-with-turtlebot3-waffle-with-arm)
*[Specifications](#specifications)
*[Specifications](#specifications)
*[Mobile part Specification](#mobile-part-specification)
*[Mobile part Specification](#mobile-part-specification)
*[Arm part Specification (OpenManipulator RM-X52 TNM)](#arm-part-specification-openmanipulator-rm-x52-tnm)
*[Arm part Specification (OpenManipulator RM-X52 TNM)](#arm-part-specification-openmanipulator-rm-x52-tnm)
*[Getting started using ROS 1](#getting-started-using-ros-1-1)
*[Getting started using ROS 1](#getting-started-using-ros-1-1)
*[Configuring](#configuring-1)
*[Configuring](#configuring-1)
*[Launching ROS](#launching-ros-1)
*[Launching ROS](#launching-ros-1)
*[Getting started using ROS 2](#getting-started-using-ros-2-1)
*[Getting started using ROS 2](#getting-started-using-ros-2-1)
*[Gazebo with multi-turtlebot3s](#gazebo-with-multi-turtlebot3s)
*[Gazebo with multi-turtlebot3s](#gazebo-with-multi-turtlebot3s)
The TurtleBot3 burger is the smallest turtlebot3 mobile robot. It is composed of 2 DYNAMIXEL servomotors (one for each wheel), 1 OpenSource control card (OpenCR ARM Cortex-M7), 1 Raspberry Pi3, sensors for the navigation with 360° LiDAR.
# Working with the TurtleBot3 Burger

</details>
## Specification
The TurtleBot3 burger is the smallest turtlebot3 mobile robot. It is composed of 2 DYNAMIXEL servomotors (one for each wheel), 1 OpenSource control card (OpenCR ARM Cortex-M7), 1 Raspberry Pi3, sensors for the navigation with 360° LiDAR.
* execute ifconfig. You should obtain the same IP address that you have on your own machine
* configure your environment (see below) to be able to use the installed roscore environment
Given this environment, you can use the robots in the roscore environment already deployed on [different machines and network infrastructures](/Use_turtlebot3_eduroam). In the following, use the IPs of the different machines to configure the environment variables required to run ROS from you virtual machine.
* check the configuration by executing the following command:
```plaintext
## Getting started using ROS 1
> ping roscore
```
### Configuring
Given this environment, you can use the robots in the roscore environment already deployed on [different machines and network infrastructures](/Use_turtlebot3_eduroam). In the following, use the IPs of the different machines to configure the environment variables required to run ROS from you virtual machine.
Add the following lines in the .bashrc of your Remote PC to define the necessary environment variables for runnning ROS:
Reinitialize the environment of your Remote PC or Virtual Machine (in the following (Remote PC) equals remote PC or Virtual Machine:
Note: IP_OF_SERVER_RUNNING_ROSCORE can be equal to IP_OF_REMOTE_PC in case you run _roscore_ on the Remote PC. The ROS_MASTER_URI is necessary for connecting the ros node running on your Remote PC to the ros master node, i.e. the one running _roscore_.
```plaintext
### Launching ROSCORE
(Remote PC)> source ~/.bashrc
```
```plaintext
(Remote PC)>roscore
Note: IP_OF_SERVER_RUNNING_ROSCORE can be equal to IP_OF_REMOTE_PC in case you run _roscore_ on the Remote PC. The ROS_MASTER_URI is necessary for connecting the ros node running on your Remote PC to the ros master node, i.e. the one running _roscore_.
Define a specific namespace for each robot and initialize the *multi_robot_name* parameter with that namespace ([Our burger configuration](/specification of our robots)):
Define a specific namespace for each robot and initialize the *multi_robot_name* parameter with that namespace ([Our burger configuration](/specification of our robots)):
The waffle follows the same philosophy as the burger. The main difference is a bigger platfom and the possibility of installing a robotic arm on it. Also the waffle can be used as a mobile manipulator capable of manipulating an object by attaching a manipulator like OpenMANIPULATOR.
TODO

# Working with TurtleBot3 Waffle with arm
## Specifications
The waffle follows the same philosophy as the burger. The main difference is a bigger platfom and the possibility of installing a robotic arm on it. Also the waffle can be used as a mobile manipulator capable of manipulating an object by attaching a manipulator like OpenMANIPULATOR.
Note: IP_OF_SERVER_RUNNING_ROSCORE can be equal to IP_OF_REMOTE_PC in case you run *roscore* on the Remote PC. The ROS_MASTER_URI is necessary for connecting the ros node running on your Remote PC to the ros master node, i.e. the one running *roscore*.
```plaintext
### Launching ROS
(Remote PC)> source ~/.bashrc
```
* Launching roscore
Note: IP_OF_SERVER_RUNNING_ROSCORE can be equal to IP_OF_REMOTE_PC in case you run *roscore* on the Remote PC. The ROS_MASTER_URI is necessary for connecting the ros node running on your Remote PC to the ros master node, i.e. the one running *roscore*.
Gazebo is a robotics simulation framework that allows several different robots to evolve in a predefined spatial environment. For example, it is possible to deploy several turtlebot3 burgers in a simulated environment of the 4th floor of Fayol building.
TODO

# Gazebo with multi-turtlebot3s
## configure gazebo launch file
Gazebo is a robotics simulation framework that allows several different robots to evolve in a predefined spatial environment. For example, it is possible to deploy several turtlebot3 burgers in a simulated environment of the 4th floor of Fayol building.
Deploying multiple robots in gazebo requires defining the deployment configuration with robot type, robot location, and ROS environment (NAMESPACE). This configuration is stipulated in a launch type file. An example of launch file with 3 turtlebot3 burgers is:

```plaintext
<launch>
## configure gazebo launch file
<arg name="model" default="$(env TURTLEBOT3_MODEL)" doc="model type [burger, waffle, waffle_pi]"/>
<arg name="first_tb3" default="tb3_0"/>
Deploying multiple robots in gazebo requires defining the deployment configuration with robot type, robot location, and ROS environment (NAMESPACE). This configuration is stipulated in a launch type file. An example of launch file with 3 turtlebot3 burgers is:
<arg name="second_tb3" default="tb3_1"/>
<arg name="third_tb3" default="tb3_2"/>
```plaintext
<launch>
<arg name="first_tb3_x_pos" default="-7.0"/>
<arg name="model" default="$(env TURTLEBOT3_MODEL)" doc="model type [burger, waffle, waffle_pi]"/>
>> Change fixed frame with the reference of tb3_0 burger `tb3_0/odom`
>> Add robot model, change robot description with `tb3_0/robot_description` and add tf_prefix with tb3_0
\+visualize data of burger tb3_0 in rviz
>> Add laser scan and set topic with `tb3_0/scan`
```
```plaintext
>rosrun rviz rviz

>> Change fixed frame with the reference of tb3_0 burger `tb3_0/odom`
>> Add robot model, change robot description with `tb3_0/robot_description` and add tf_prefix with tb3_0
# TurtleBot3 Administration
>> Add laser scan and set topic with `tb3_0/scan`
```
By default, TurtleBot3 Burger and Waffle robots get automatically configured at startup. The following instructions only apply in case of problem, e.g. if a robot's topics are not advertised properly.

* Configuring the TurtleBot3 Burger
# TurtleBot3 Administration
From the remote PC, connect to the Burger by ssh ([Our burger configuration](/specification of our robots)):
By default, TurtleBot3 Burger and Waffle robots get automatically configured at startup. The following instructions only apply in case of problem, e.g. if a robot's topics are not advertised properly.
```plaintext
(Remote PC)> ssh pi@{IP_ADDRESS_OF_BURGER}
* Configuring the TurtleBot3 Burger
```
From the remote PC, connect to the Burger by ssh ([Our burger configuration](/specification of our robots)):
Add the following lines in the .bashrc of the Burger to define the necessary environment variables for runnning ROS:
Define a specific namespace for your robot and initialize two parameters *multi_robot_name* and *set_lidar_frame_id* with that namespace ([Our burger configuration](/specification of our robots)):
Define a specific namespace for your robot and initialize two parameters *multi_robot_name* and *set_lidar_frame_id* with that namespace ([Our burger configuration](/specification of our robots)):