Hackster is hosting Hackster Holidays, Ep. 6: Livestream & Giveaway Drawing. Watch previous episodes or stream live on Monday!Stream Hackster Holidays, Ep. 6 on Monday!
chaitra deepika komatineni
Created August 11, 2020 © CERN-OHL2

UVizard

A cost-effective robot that autonomously disinfects spaces using UV-C lights to inactivate pathogens.

AdvancedWork in progressOver 1 day293

Things used in this project

Hardware components

RP LIDAR A2M8 360 degrees Laser Range Finder-12 Meter Range
×1
Microsoft Kinect Version 2
Microsoft Kinect Version 2 can be replaced with an older version or a depth camera.
×1
UV light
These lights can be replaced by GPHA843T6L or GPHA843T5L for a cheaper alternative, which result in a longer disinfection time. Keep in mind, if the length of the lights is increased the design of the robot has to be altered to support the new length.
×6
UV lamp ballasts
This ballast can be replaced with PH8-1200-190 for higher wattage and better performance. If you chose the GPHA843T6L lamp, you can use PH8-1500-150 or PH8-1800-150 (high wattage and better performance). Similarly, if you chose the GPHA843T5L lamp, you can use PH8-1500-150 or PH8-1800-150 (1 ballast for 2 lamps).
×6
UV Portable Lamp Holder 4Pins G10Q
×6
Battery 100Ah 82V
Since the lamps require a high voltage to start up, we'll need a battery with high voltage and power output. This can be replaced with a battery with 70Ah 82v battery for a cheaper option with shorter performance time between charges.
×1
50Ah Lithium Polymer Battery Pack
×1
Heavy Duty Wheels 200mm
The 4 wheels need to support a minimum total load of 40 kgs. 200mm diameter wheels can be replaced with 150mm wheels based on availability.
×4
12V 100 RPM Johnson Geared DC Motor
×4
Anti-Slip Motor Coupling 10mm
×6
Motor mount
×1
Motor Speed Control Switch for DC Motors
×3
PIR Sensor - Long Distance Detection Type - EKMC1603111
×1
SeeedStudio Grove Human Presence Sensor (AK9753)
×1
Servo Driver HAT for Raspberry Pi, 16-Channel, 12-bit, I2C
×1
Aluminium Mirrors
The material used for the reflector and the top lamp holder.
×1

Software apps and online services

Robot Operating System
ROS Robot Operating System
Blender

Story

Read more

Custom parts and enclosures

2D Drawings

This file has 2D figures of the design with dimensions, aiming to assist in manufacturing.

UVizard CAD file

The CAD design file of UVizard. This file was converted from Blender 2.8 software.

Schematics

Base Connections

Code

The URDF description of the robot

XML
This description can be used for simulation purposes. The code has gazebo plug-ins as well.
<?xml version="1.0"?>
<robot name="uvizard">

<material name="blue">
    <color rgba="0 0 0.8 1"/>
  </material>
  <material name="black">
    <color rgba="0 0 0 1"/>
  </material>
  <material name="white">
    <color rgba="1 1 1 1"/>
  </material>

  <link name="base_link">
    <visual>
      <geometry>
        <cylinder length="0.3" radius="0.4"></cylinder>
      </geometry>
      <origin rpy="0 0 0" xyz="0 0 0.2"></origin>
      <material name="blue"></material>
    </visual>
    <collision>
      <geometry>
        <cylinder length="0.3" radius="0.4"></cylinder>
      </geometry>
    </collision>
    <inertial>
      <mass value="10"></mass>
      <inertia ixx="0.95" ixy="0.0" ixz="0.0" iyy="0.95" iyz="0.0" izz="10.16"></inertia>
    </inertial>
  </link>

  <link name="base_link_2">
    <visual>
      <geometry>
        <cylinder length="0.2" radius="0.4"></cylinder>
      </geometry>
     <origin rpy="0 0 0" xyz="0 0 0.5"></origin>
      <material name="blue"></material>
    </visual>
        <collision>
      <geometry>
        <cylinder length="0.2" radius="0.4"></cylinder>
      </geometry>
    </collision>
    <inertial>
      <mass value="10"></mass>
      <inertia ixx="0.2167" ixy="0.0" ixz="0.0" iyy="0.2167" iyz="0.0" izz="0.4"></inertia>
    </inertial>
  </link>

  <link name="reflector">
    <visual>
      <geometry>
        <cylinder length="0.850" radius="0.05"></cylinder>
      </geometry>
     <origin rpy="0 0 0" xyz="0 0 1.02"></origin>
      <material name="blue"></material>
    </visual>
    <inertial>
      <mass value="10"></mass>
      <inertia ixx="0.0182" ixy="0.0" ixz="0.0" iyy="0.0182" iyz="0.0" izz="0.00037"></inertia>
    </inertial>
  </link>

  <link name="light_1">
    <visual>
      <geometry>
        <cylinder length="0.850" radius="0.019"></cylinder>
      </geometry>
     <origin rpy="0 0 0" xyz="0.090234 -0.14124  1.02"></origin>
      <material name="blue"></material>
    </visual>
      <inertial>
      <mass value="10"></mass>
      <inertia ixx="0.0182" ixy="0.0" ixz="0.0" iyy="0.0182" iyz="0.0" izz="0.00037"></inertia>
    </inertial>
  </link>

    <link name="light_2">
    <visual>
      <geometry>
        <cylinder length="0.850" radius="0.019"></cylinder>
      </geometry>
     <origin rpy="0 0 0" xyz="-0.169943 0.008227 1.02"></origin>
      <material name="blue"></material>
    </visual>
      <inertial>
      <mass value="10"></mass>
      <inertia ixx="0.0182" ixy="0.0" ixz="0.0" iyy="0.0182" iyz="0.0" izz="0.00037"></inertia>
    </inertial>
  </link>

    <link name="light_3">
    <visual>
      <geometry>
        <cylinder length="0.850" radius="0.019"></cylinder>
      </geometry>
     <origin rpy="0 0 0" xyz="-0.076843  -0.138112 1.02"></origin>
      <material name="blue"></material>
    </visual>
        <inertial>
      <mass value="10"></mass>
      <inertia ixx="0.0182" ixy="0.0" ixz="0.0" iyy="0.0182" iyz="0.0" izz="0.00037"></inertia>
    </inertial>
    </link>

    <link name="light_4">
    <visual>
      <geometry>
        <cylinder length="0.850" radius="0.019"></cylinder>
      </geometry>
     <origin rpy="0 0 0" xyz="0.162917 0.016942 1.02"></origin>
      <material name="blue"></material>
    </visual>
  </link>

    <link name="light_5">
    <visual>
      <geometry>
        <cylinder length="0.850" radius="0.019"></cylinder>
      </geometry>
     <origin rpy="0 0 0" xyz="0.08290 0.159709 1.02"></origin>
      <material name="blue"></material>
    </visual>
    <inertial>
      <mass value="10"></mass>
      <inertia ixx="0.0182" ixy="0.0" ixz="0.0" iyy="0.0182" iyz="0.0" izz="0.00037"></inertia>
    </inertial>
    </link>

  <link name="light_6">
    <visual>
      <geometry>
        <cylinder length="0.850" radius="0.019"></cylinder>
      </geometry>
     <origin rpy="0 0 0" xyz="-0.088511 0.160626 1.02"></origin>
      <material name="blue"></material>
    </visual>
    <inertial>
      <mass value="10"></mass>
      <inertia ixx="0.0182" ixy="0.0" ixz="0.0" iyy="0.0182" iyz="0.0" izz="0.00037"></inertia>
    </inertial>
   </link> 

  <link name="top">
    <visual>
      <geometry>
        <cylinder length="0.01" radius="0.22"></cylinder>
      </geometry>
     <origin rpy="0 0 0" xyz="0 0 1.45"></origin>
      <material name="blue"></material>
    </visual>
    <inertial>
      <mass value="10"></mass>
      <inertia ixx="0.00182" ixy="0.0" ixz="0.0" iyy="0.00182" iyz="0.0" izz="0.00037"></inertia>
    </inertial>
    </link>

  <link name="lidar">
      <visual>
    <geometry>
      <cylinder length="0.042" radius="0.038"></cylinder>
    </geometry>
    <origin rpy="0 0 0" xyz="0 0 0.35"></origin>
    <material name="blue"></material>
    </visual>
    <inertial>
      <mass value="1"></mass>
      <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"></inertia>
    </inertial>
    </link>

<joint name="lidar_joint" type="fixed">
  <parent link="base_link"></parent>
  <child link="lidar"></child>
  <origin xyz="0 0 0"></origin>
</joint>


<joint name="top_joint" type="fixed">
  <parent link="reflector"></parent>
  <child link="top"></child>
  <origin xyz="0 0 0"></origin>
  </joint>

<joint name="base_to_right_leg" type="fixed">
  <parent link="base_link"></parent>
  <child link="base_link_2"></child>
  <origin xyz="0 0 0"></origin>
  </joint>

<joint name="reflector_to_base_2" type="fixed">
  <parent link="base_link_2"></parent>
  <child link="reflector"></child>
  <origin xyz="0 0 0"></origin>
</joint>

<joint name="light_1_to_base_2" type="fixed">
  <parent link="base_link_2"></parent>
  <child link="light_1"></child>
  <origin xyz="0 0 0"></origin>
</joint>

<joint name="light_2_to_base_2" type="fixed">
  <parent link="base_link_2"></parent>
  <child link="light_2"></child>
  <origin xyz="0 0 0"></origin>
</joint>

<joint name="light_3_to_base_2" type="fixed">
  <parent link="base_link_2"></parent>
  <child link="light_3"></child>
  <origin xyz="0 0 0"></origin>
</joint>

<joint name="light_4_to_base_2" type="fixed">
  <parent link="base_link_2"></parent>
  <child link="light_4"></child>
  <origin xyz="0 0 0"></origin>
</joint>

<joint name="light_5_to_base_2" type="fixed">
  <parent link="base_link_2"></parent>
  <child link="light_5"></child>
  <origin xyz="0 0 0"></origin>
</joint>

<joint name="light_6_to_base_2" type="fixed">
  <parent link="base_link_2"></parent>
  <child link="light_6"></child>
  <origin xyz="0 0 0"></origin>
</joint>

<link name="right_front_wheel">
    <visual>
      <geometry>
        <cylinder length="0.05" radius="0.07"></cylinder>
      </geometry>
          <origin rpy="1.57075 0 1.57075" xyz="0.22 0.22 0"></origin>
      <material name="black"></material> 
    </visual>
        <inertial>
      <mass value="1"></mass>
      <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"></inertia>
    </inertial>
  </link>
  
  <joint name="right_front_wheel_joint" type="fixed">
    <parent link="base_link"></parent>
    <child link="right_front_wheel"></child>
    <origin rpy="0 0 0" xyz="0 0 0"></origin>
  </joint>

  <link name="left_front_wheel">
    <visual>
      <geometry>
        <cylinder length="0.05" radius="0.07"></cylinder>
      </geometry>
          <origin rpy="1.57075 0 1.57075" xyz="-0.22 0.22 0"></origin>
      <material name="black"></material> 
    </visual>
        <inertial>
      <mass value="1"></mass>
      <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"></inertia>
    </inertial>
  </link>
  
  <joint name="left_front_wheel_joint" type="fixed">
    <parent link="base_link"></parent>
    <child link="left_front_wheel"></child>
    <origin rpy="0 0 0" xyz="0 0 0"></origin>
  </joint>

  <link name="left_back_wheel">
    <visual>
      <geometry>
        <cylinder length="0.05" radius="0.07"></cylinder>
      </geometry>
          <origin rpy="1.57075 0 1.57075" xyz="-0.22 -0.22 0"></origin>
      <material name="black"></material> 
    </visual>
        <inertial>
      <mass value="1"></mass>
      <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"></inertia>
    </inertial>
  </link>
  
  <joint name="left_back_wheel_joint" type="fixed">
    <parent link="base_link"></parent>
    <child link="left_back_wheel"></child>
    <origin rpy="0 0 0" xyz="0 0 0"></origin>
  </joint>

  <link name="right_back_wheel">
    <visual>
      <geometry>
        <cylinder length="0.05" radius="0.07"></cylinder>
      </geometry>
          <origin rpy="1.57075 0 1.57075" xyz="0.22 -0.22 0"></origin>
      <material name="black"></material> 
    </visual>
      <inertial>
      <mass value="1"></mass>
      <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"></inertia>
    </inertial>
  </link>
  
  <joint name="right_back_wheel_joint" type="fixed">
    <parent link="base_link"></parent>
    <child link="right_back_wheel"></child>
    <origin rpy="0 0 0" xyz="0 0 0"></origin>
  </joint>

    <link name="kinect">
    <visual>
      <geometry>
        <box size="0.250 0.066 0.067"></box>
      </geometry>
          <origin rpy="0 0 0" xyz="0 0.4 0.5"></origin>
      <material name="black"></material> 
    </visual>
  </link>
  
  <joint name="kinect_joint" type="fixed">
    <parent link="base_link_2"></parent>
    <child link="kinect"></child>
    <origin rpy="0 0 0" xyz="0 0 0"></origin>
  </joint>
  <!--

<gazebo>
  <plugin name="skid_steer_drive_controller" filename="libgazebo_ros_skid_steer_drive.so">
    <updateRate>100.0</updateRate>
    <robotNamespace>/</robotNamespace>
    <leftFrontJoint>front_left_wheel_joint</leftFrontJoint>
    <rightFrontJoint>front_right_wheel_joint</rightFrontJoint>
    <leftRearJoint>back_left_wheel_joint</leftRearJoint>
    <rightRearJoint>back_right_wheel_joint</rightRearJoint>
    <wheelSeparation>0.4</wheelSeparation>
    <wheelDiameter>0.14</wheelDiameter>
    <robotBaseFrame>base_link</robotBaseFrame>
    <torque>20</torque>
    <topicName>cmd_vel</topicName>
    <broadcastTF>false</broadcastTF>
  </plugin>
</gazebo>
-->
</robot>

Credits

chaitra deepika komatineni

chaitra deepika komatineni

2 projects • 5 followers
Thanks to Keshav, Uddeepa A. Reddy, and Vishal.

Comments