...
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
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}}'
- you will see it moving.
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
- Immediate jumping to upper level
- not the Optimal path after opening the tsp loop as shown in figure below