Posts by scis-admin

A Smart Multi Telepresence Robot Management System

A Smart Multi Telepresence Robot Management System

Nagarajan Prabakar, Cynthia Tope, and Jong-Hoon Kim

ABSTRACT

Telepresence robot extends operation in remote locations. This feature can be beneficial for several applications, such as subsea exploration, telesurgery, remote physical presence, etc. Especially, the remote physical presence application will enable individuals with mobility limitations such as disabled veteran or police officer to perform regular duties through telepresence robots known as TeleBots. Certain scenarios require more than one TeleBot to operate in the same service area that needs many officers to control many TeleBots. Thus, we need an intelligent, fault tolerant management system to support these scenarios.

This system needs to represent the relationship between the officers and TeleBots that can be 1:1, 1: many, or many:1. Also, it requires dynamic resource allocation such as communication bandwidth, battery power, spatial proximity, etc. In addition, the performance of the system can be affected by network failure, resource shortage, and dynamic changes in service demands and the status of all entities need to be monitored and appropriately reallocated for fault tolerance of the system.

We propose a novel architecture that provides a fault tolerant multi telepresence robot Management System. This system will allow us to coordinate the assignment, scheduling, monitoring, and administrating multi telepresence robots and multi operators efficiently.

In this paper, we present a novel architecture and implementation of the prototype

system, and demonstrate the performance of the system. We analyze the trade-off

between the service and resource allocation, and suggest an optimal approach based on case studies.

Full paper :  TeleBotManagementPaper.pdf

Solving Coding Conflicts

To manually resolve a conflict, follow these steps:

  1. Review the conflicts. Navigate to the classes that are marked for conflict and scroll to the areas with errors. You will notice code that is split by the following markers: <<<<<<<, =======, and >>>>>>>. The top section (HEAD) before the marker ======= contains the old code that was written before the pull, while the bottom section contains the code that was just pulled. Review the differences and delete one of the two, or merge the code together by manually deleting lines. Don’t forget to delete the markers once done.
  2. Add class changes to index. Once all conflicts have been reviewed and edited in a class, right click on the class and navigate to Team > Add to index. Repeat this process for every class with conflicts in your project.
  3. Commit changes. Once all conflicts have been manually resolved, right click on any class and navigate to Team > Commit.

Example of a merge/pull conflict:

Lines of code that are either unchanged from what was pulled, or were automatically resolved because only one side changed.
<<<<<<< yours
This is where the code that you wrote goes
=======
This is where the conflicting code that was pulled goes
>>>>>>> theirs
More lines of code that were cleanly resolved or unmodified.

For more information, click here.

Manager

import java.io.IOException;

import command.Debugger;

import parser.DefaultParser;
import manager.Manager;

public class ClientTestManager extends Manager{

        DefaultParser parser;
        TestStatus status;
        public ClientTestManager(String key,String i) {
                super(key,i);
                parser = new DefaultParser();
                super.assignInOutStreamsToParser(parser);
                status = (TestStatus)super.statusInitialization(new TestStatus("testStatus"));
                super.setDelay(3000);
        }

        @Override
        public void execute() {
                try{
                        parser.write("Writing to device");
                        
                }catch (IOException e) {
                        System.out.println(super.getManagerName()+"Manager- Device connection lost. Trying to reconnect");
                        super.reportConnectionDown();
                }
                Debugger.traceln("Client "+super.getManagerName()+" = "+status.counter);
                status.counter++;
                status.setStatusUpdated(true);
        }

        @Override
        public char[] getDeviceSignal() {
                char[] temp = new char[1];
                return temp;
        }
        

}

Parser

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class DefaultParser implements SerialParserInterface{

        public InputStream input;
        public OutputStream output;
        @Override
        public void setStream(InputStream input, OutputStream output) {
                this.input  = input;
                this.output = output;
        }
        
        public int read()throws IOException
        {
                        return input.read();
                
        }
        public void write(String arg)throws IOException
        {
                byte[] temp = arg.getBytes();
                write(temp);
        }
        public void write(byte[] arg) throws IOException{
                
                        this.output.write(arg);
                
        }

        
}

Status

import java.io.IOException;

import command.Debugger;

import parser.DefaultParser;
import manager.Manager;

public class ClientTestManager extends Manager{

        DefaultParser parser;
        TestStatus status;
        public ClientTestManager(String key,String i) {
                super(key,i);
                parser = new DefaultParser();
                super.assignInOutStreamsToParser(parser);
                status = (TestStatus)super.statusInitialization(new TestStatus("testStatus"));
                super.setDelay(3000);
        }

        @Override
        public void execute() {
                try{
                        parser.write("Writing to device");
                        
                }catch (IOException e) {
                        System.out.println(super.getManagerName()+"Manager- Device connection lost. Trying to reconnect");
                        super.reportConnectionDown();
                }
                Debugger.traceln("Client "+super.getManagerName()+" = "+status.counter);
                status.counter++;
                status.setStatusUpdated(true);
        }

        @Override
        public char[] getDeviceSignal() {
                char[] temp = new char[1];
                return temp;
        }
        

}

Discovery Lab Rules

Discovery lab rules

Naming rules:

  1. Capitalize the first letter of every word except the first one. Ex: testVariable
  2. Final variables are all upper case and words are separated with an under score. Ex: TEST_FINAL_VAR
  3. For class names capitalize the first letter of every word. Ex: TestClass
  4. To create a manager class put the Manager word and the the end. Ex: TestManager
  5. To create a status class put the Status word at the end. Ex: TestStatus
  6. Use this to reference instances inside your own class. But not for static instances.
  7. Use super to reference upper label instances.
  8. Use descriptive names for variables

Version Control using Eclipse

How to set up the telebot project on eclipse.

  1. Create a bit bucket account.
  2. Download the git plug in for eclipse:
  3. You should get an invitation to join the telebot repository. Go to your bitbucket inbox to accept it.
  4. Import the telebot project:
    • Go to: File->Import->Git->Projects from git
    • At the ‘Import your project from git window’ copy paste the telebot repository URL from your bitbucket account.
    • Enter your password and click Next.
    • Eclipse will ask you if you want to create a new project: Select New project wizard and click Next.
    • Eclipse should have created a directory with the repository. At the new project wizard window uncheck Use default location and browse to the directory of that repository. Select it as the source code for the new project you are about to create. (Do not use the default location).

Version control rules and procedures.

  1. Before making any changes pull from remote repository:
    • Right click on the project and select: Team->Pull.
    • Resolve any conflicts and commit.
    • To commit right click project and: Team->Commit…, Then write a message and click Commit.
  2. To modify the project create a new branch.
    • Right click project and select. Team->Switch to->New Branch…
    • Give a name, select merge and click Finish.
  3. Make any changes in your own local branch. And commit.
  4. After you have tested your code you can merge your work with the master branch.
    • To merge first switch to master branch.
    • Right click on project and select: Team->Merge…
    • Select your branch and click Merge.
    • Delete your old branch.
  5. After merge you should have only the master branch.
  6. Push the master branch to the remote repository.
    • Right click the project and select: Team->Remote->Push.
    • Select ‘Configured remote repository’ and click Next.
    • At the ‘Source ref:’ select master[branch].
    • At the ‘Destination ref:’ select master[branch].
    • After you have selected the Sourse and Destination click Add Spec.
    • Click Finish.

Working with Telebot project

The telebot software uses Managers to control micro-controllers and Statuses to communicate between operator and robot.

How to create a Manager class

  • Create a new class and extend the Manager abstract class.
  • Implement the execute() method.
  • Implement the getDeviceSignal() method.
  • Click here for manager example.

How to create a Status class

  • Create a new class and extend the Status abstract class.
  • Implement the copy(Status argStatus) method.
  • Implement the printData() method.
  • Click here for status example.

How to create a Serial Parser class

  • To create a serial parser implement the SerialParserInterface.
  • Implement the setStream(InputStream input, OutputStream output) method. This will give you access to communicate to your device.
  • To implement your serial parser inside your Manager use the assignInOutStreamsToParser(SerialParserInterface parser) method. See manager tutorial for how to set up DefaultParser (Included in the Telebot core project).
  • Click here for serial parser example.

Advanced Technique for Tele-operated Surgery Using an Intelligent Head-mount Display System

Advanced Technique for Tele-operated Surgery Using an Intelligent Head-mount Display System

Irvin S. Cardenas and Jong-Hoon Kim

Abstract

Recent medical-robotic developments have enabled tele-operated surgery to become a powerful treatment option when a surgeon is not available locally. However, even though tele-surgery has improved greatly, certain developments regarding the interaction between a surgeon and the remote surgical room is still in need of improvement, especially image display and camera movement. First, the use of two-dimensional imaging during tele-surgery causes a loss in depth perception, orientation and hand-eye disassociation. Likewise, the use of stationary screens can cause neck-strain to a surgeon. Also, an issue highest priority concerns the quality of data transmission during the real-time video streaming of a tele-operated surgery.

To approach these issues, we propose a new head-mounted device that provides a more ergonomic and intuitive feeling to tele-operational surgeons. This device allows them to naturally control the view of the camera via head movement, hence providing a three-dimensional view. And by enabling the head-mount display to provide the remote surgical camera with orientation information, our application-level Quality of Service framework can adjust image quality to prevent excess delay and jitter during robotic tele-surgical video. Thus, our device can provide high quality video, as well as a more natural and ergonomic feeling to performing tele-operated surgery.

[ To appear in the Proceedings of the 29th Southern Biomedical Engineering Conference (SBEC), Miami, May 2013 ]

Pull paper : SBEC2013_0150_Advanced Technique for Tele-operated Surgery Using an Intelligent Head-mount Display System.pdf

Smart Global Positioning System for Autonomous Delivery Robots in Hospitals

Smart Global Positioning System for Autonomous Delivery Robots in Hospitals

Francisco Peleato, Mangai Prabakar, and Jong-Hoon Kim

Abstract
Autonomous delivery robots have been employed in several hospitals across the United States to transport medical equipment, medicine, and food. However, they still face many difficulties, especially with the localization of robots within buildings, since most robots are currently using outdated techniques such as landmark recognition, beacons, or RFID tags. These methods are not only imprecise and unreliable but they also require a careful setup/distribution of special hardware in the hospital. Additional sensing and computing power are also needed for searching and detecting of landmarks, ultimately increasing manufacturing costs.

We propose an innovative solution with a Smart Global Positioning System (S-GPS) framework and a novel algorithm for tracking delivery robots using multilateration technique with optimal number of references. The S-GPS framework enables to compute coordinates of all static sensors and mobile robots within the building and allows for fault tolerance in case of sensor failures. The algorithm provides precise localization of patients and delivery robots for improved navigation.

[ To appear in the Proceedings of the 29th Southern Biomedical Engineering Conference (SBEC), Miami, May 2013 ]

Full paper: SBEC2013 Smart Global Positioning System for Autonomous Delivery Robots in Hospitals.pdf