[Documentation] [TitleIndex] [WordIndex

...

BOILER INSPECTION USING UAVs

source : maltab_simulation

Introduction

In some industries, there will be huge boiler. For the maintenance of those boilers inspection has to be done. Usually visual inspection is performed. Have a look at this video to know the inside of boiler by a remote controlled UAV. This project is to automate the process of UAV going and spotting the defects in the boiler. To automate this process, we need to plan the path and execute the tour.

Tour planning and executing the tour

If we are planning the tour for the quadrotor, the planning should be dynamic because while executing the tour you might miss some locations, considering real time situations. Lets say we are using Travelling salesman problem(TSP), it will be closed loop we need not come back to the initial position, which according to the closed loop tour of TSP. So, we need to open the loop by removing an edge of the tour. How to do this? should we just remove the last edge which is closing loop. No, we need to remove the edge such that the overall tour distance travelled should be minimum. See the following figure
text describing image
Let's say we can make a static plan using the nodes or locations, which are placed depending on the dimensions of the boiler, and the field of view(fov) of camera and distance from the wall(depending on the resolution of the camera). First of all we need to execute that plan effectively in the sense of travelling distance, so we are treating this as a travelling salesman problem. Here either we can take all the non-visited locations for making the TSP plan in each Epoch. This increases the computational power if there are many nodes to compute the plan. To decrease the computational power, we can use a moving window technique.

TSP Plan

There are several methods to solve the TSP problem, like greedy, 2-opt greedy, branch and bound etc. Not going into too much details of these algorithms, I will outline these techniques:

Opening of TSP loop

You might wonder why to open the TSP loop, because you no need to come back to the initial position where you started in our condition. and also if we are opening an edge of the closed graph or tour, then we are making a new plan such that the overall path travelling should be again minimum which can solve the situations c or d in the figure 1.

Simulating in Gazebo

you can also check this at quad_sim tutorial.
1. Go and download hector quadrotor package using command

sudo apt-get install ros-hydro-hector-quadrotor

This will install all the packages required not for slam. For hector slam install

sudo apt-get install ros-hydro-hector-quadrotor-demo

2.Make sure you are using your distro,i.e, hydro or indigo or jade, what ever in the place of hydro in the above commands.

3. If you want to install from source, incase if you haven't install wstool then do this

sudo apt-get install python-wstool

then get the packages using wstool

mkdir ~/hector_quadrotor_tutorial
cd ~/hector_quadrotor_tutorial
wstool init src https://raw.github.com/tu-darmstadt-ros-pkg/hector_quadrotor/hydro-devel/tutorials.rosinstall

4.dont forget to build using catkinmake and source the setup.bash

catkin_make
source devel/setup.bash

5.If you want to try using the urdf of the hector package

roslaunch hector_quadrotor_gazebo quadrotor_empty_world.launch

6. There are also different urdfs like with laser, with kinect in the same package hector_quadrotor_gazebo. you can spawn them in your world and use them.

7. If you want to control the position of the quadrotor, go to the control.lauch

roscd hector_quadrotor_controller
cd launch
gedit controller.launch

8.Add controller/pose to the args then it should look like

  <node name="controller_spawner" pkg="controller_manager" type="spawner" respawn="false" output="screen" args="controller/pose controller/twist  --shutdown-timeout 3"
  />

9. then the pose controller will be initiated once you start the urdf, which starts these controllers 10. Try giving some position like this

rostopic pub -1 /command/pose geometry_msgs/PoseStamped '{ header: { frame_id:  "/base_footprint"}, pose: { position: { x: 3, y: 2, z: 2}, orientation: { x: 0, y: 0, z: 0, w: 1 } } }'

you will see the quadrotor going to that position
10.There is also velocities control using the topic cmd_vel, which is of type geometry_msgs/Twist. Try publishing that kind of message as with some velocities

rostopic pub -r 10 /cmd_vel geometry_msgs/Twist '{linear:  {x: 1.0,y: 1.0, z: 3.0}, angular: {x: 0.1,y: 0.1,z: 0.1}}'

Using Matlab ROSToolbox to control gazebo quadrotor

This toolbox has been included in recent versions of matlab like 2015.

rosinit('ros_master_uri_address'); %connects to your ros network
robot = rospublisher('/command/pose'); %initiates a publisher to the topic command/pose
posmsg = rosmessage(robot); %creates a message of that type geometry_msgs/PoseStamped


Update the position to the robot in gazebo simulataneously by adding these lines to the planner

posmsg.Pose.Position.X=n(1);posmsg.Pose.Position.Y=n(2);posmsg.Pose.Position.Z=n(3);
%updating x,y,z position coordinates 

send(robot,posmsg); % sending it to the gazebo robot

The boiler model is made using google_sketup, you can followup the tutorial. The link for texture of boiler is: Brick_Antique.jpg

concept of fake node

You might have observed the problems described in section5.1 in the above video. we are introducing the concept of fake node which would prevent these problems.

problems


text describing image



2023-10-28 12:46