# Hardware Integration

1. Launch the robot's motor and sensor drivers.<br>

2. Run `rosnode list` to find the names of the ROS nodes of the drivers.<br>

3. Run `rosnode info <node>` , where \<node> is the name of the nodes determined from step 2. \
   Sample output:

   <pre><code>$ rosnode info /motors_ctrl 
   <strong>--------------------------------------------------------------------------------
   </strong><strong>Node [/motors_ctrl]
   </strong>Publications: 
    * /odom [nav_msgs/Odometry]
    * /odom_euler [std_msgs/String]
    * /robot_batt_perc [std_msgs/Int16]
    * /rosout [rosgraph_msgs/Log]
    * /tf [tf2_msgs/TFMessage]

   Subscriptions: 
    * /cmd_vel [geometry_msgs/Twist]
   </code></pre>

4. From the information displayed from running step 3, make sure that:&#x20;
   1. The robot motor driver node subscribes to the topic `/cmd_vel` for velocity commands.&#x20;
   2. The Lidar driver node publishes laser data to the topic `/scan`<br>

5. If the topic names are not set as in step 4, remap them in the launch files of the drivers by adding a line in the launch files in the following format:

   ```
   <node ...
     <remap from="<original topic name>" to="/cmd_vel"/>
   </node>
   ```

6. While the robot base and lidar are launched, run `rosrun rqt_tf_tree rqt_tf_tree` and check that the frames are linked in this order: ***odom → base\_link → laser***.<br>

   <figure><img src="https://3011557067-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MkBtlBrwlCbBifOLd-h-887967055%2Fuploads%2FwsBMcQL2cVj1nNLLQvDW%2Fimage.png?alt=media&#x26;token=6b46feaa-a068-4c16-a9b7-d8312c005f3c" alt=""><figcaption></figcaption></figure>

7. If the frames of **base\_link** and ***laser*** are not linked correctly, there are two options you can link them. You can select one of them. (Prefer use **Broadcast a transformation**)

   1. **Broadcast a transformation** refer to this [link](http://wiki.ros.org/navigation/Tutorials/RobotSetup/TF#Broadcasting_a_Transform).
   2. **Create static transformation**. Add the following line in the launch file of the lidar drivers:

      ```yaml
      <node pkg="tf" type="static_transform_publisher" name="base_link_to_laser" args="0.22 0 0.1397 0 0 0 base_link laser 100" />
      ```

      *In “args”, x = 0.22, y = 0, z = 0.1397, yaw = 0, pitch = 0, roll = 0 for this example. This should provide a transformation between the base\_link and laser frame*\
      *If you use static transformation, there will be several issues, one of the most is localizer mode, the UI won't visualize a laser scan in localizer mode.*

8. With the driver nodes running, run RVIZ using: `rosrun rviz rviz`, do the following checks:&#x20;
   1. Laser data `("/scan")` can be seen and is orientated in the correct direction.
   2. Movement direction during teleoperation is correct.
   3. Robot odometry `("/odom")` is updating correctly during teleoperation.
