Team Status Update for 03/28 (Week 7)

Progress

Gesture Recognition

We made good progress, making sure everything we had before still works with the remote setup. We transitioned into using videos instead of camera streams, optimized the output stream of gestures, and deployed SVM methods of gesture recognition.

In addition, we experimented with different ways to recognize the point.

Risk Management Plan

Most of our risks of the parts not arriving have been resolved, as they arrived this week.

For gesture recognition, being able to work on videos removes our risk for not having enough time to run everything remotely. The major risks left for gesture recognition is not being able to detect the point, but that can potentially be resolved with additional hardware (another camera perspective) and limiting the point problems by the size of the bins we choose.

————————–

Our risk management is pretty much the same; only difference is that we will have to work individually on each risk management.

(From the design proposal doc: )

The largest risk for our project is localization of the robot. Our tasks of going back to home, going to the user, and going to the pointed location all require the robot to know where it is on the map. We are trying to mitigate the risk by using multiple methods to localize the robot. We are using data from our motor encoders to know where the robot has traveled on the 2D map. Additionally, we are going to use the camera view and our camera 3D to 2D mapping in order to get a location of the robot in the room. By having two methods to localize the robot, we can maximize the chances of localization.

Classifying the gestures incorrectly is also a risk. OpenPose can give us incorrect keypoints, which would cause an error in the classificaiton process. To address this, we are using multiple cameras to capture the user from multiple angles in the room. So, we have backup views of the user to classify gestures. Running OpenPose on more cameras decreases our total FPS, so our system can only have at most 3 cameras. We chose 3 cameras to balance the performance of our system and the cost of the hardware required with the accuracy we can get in gesture classification. in addition, we will have backup heuristics to classify the gestures if our system can not confidently recognize a gesture.

 

Schedule

Gantt chart for the revised schedule:

Rama’s Status Update for 03/28 (Week 7)

Progress

I got the Xavier board delivery this week, and set it up to work on my home network and also allow Jerry remote access to it. We don’t have a static IP but as long as our router stays on the IP shouldn’t change and nothing will break. I started work on using OpenCV to recognize the Roomba because we have OpenPose to recognize user position already and there is still some more setup that needs to be done before I can get videos of the Roomba moving around the room for the mapping to begin.

Deliverables next week

I will finish the Roomba recognition and connect it with the user recognition in preparation for mapping.

Schedule

On schedule.

Jerry’s Status Update for 03/28 (Week 7)

Progress

I finally received my parts and can access the xavier board via ssh now.

Streaming

I wanted to first try streaming video to the xavier board from my local webcam for the hopes that we can run in live time. I encoded the image into bytes and sent them via websockets between the server and the computer. However, this results in a super slow 2FPS. So, I decided it would be best to use videos to train and test the gesture recognition. RIP live time.

Setting up remote environment

Without streaming, we had to work with videos. I changed the OpenPose scripts (gesture recognition and feature extraction) to use videos instead of the webcam.

To get videos, I wrote a python script to record videos with the webcam and OpenCV, with features like automatic recording after a wait time and stopping recording after a certain length was reached. This was helpful for gathering data later on and I shared the script with the rest of the team.

I  built a bash script so I could send videos to the server, execute code remotely, and copy the results back to my local computer. In addition, I set up the webcam in my room. I tested the existing gestures (to me, go home, stop, and teleop commands) in my room and they worked great. It was nice seeing that the teleop gesture data I collected at CMU generalized to both  my room and the video recorded in Sean’s room.

Gesture recognition

I cleaned up alot of our gesture recognition logic to make it most understandable, as we were using multiple methods of detection (model and heuristics). Also, running gesture recognition on video showed some errors in the gesture stream output. The gesture stream output should only return a gesture if the gesture is changed. However, there is noise with running OpenPose that return bad results for a frame, causing gesture recognition to think a gesture changed. For example, if an arm is raised for 4 frames, there may be noise on frame 3. So the gesture stream may be [arm raised at frame 1, no gesture at frame 3, arm raised at frame 4]. However, we only want one arm raised output in the action, or else the gesture will trigger on the robot twice. To resolve this, we use a gesture buffer. Commands like “no gesture” or teleop gestures require to be seen for 10 frames (1/3 sec) before they count as a detected gestures. Gestures like left arm raised, right arm raised, and both arms raised are detected immediately, but only if the previous gesture detected was no gesture. This helps remove noise between transitions of gestures and give us the desired output of the gesture output stream.

One vs all (OVR) SVM methods

As mentioned in the post on week 4, I did work earlier to setup both multiclass and OVR SVM methods. I found that they did not make much of a difference between teleop gesture classification (3 classes) but improved the model on testing point data (pointing along 1 horizontal row of the room with 6 classes). I added the ability to run both OVR and multiclass models in gesture recognition. Also, I experimented with the class weights parameter in SVM training to prevent too much of an imbalance of positive and negative data.

Teleop SVM methods beating out heuristics for recognizing straight teleop gesture.

Point

I also wanted to do more work on gesture recognition for detecting pointing in a room. Previously, we wanted predict which bin in a room a user was pointing to, without taking into account the position of the user. However, this is hard to generalize to a different room, so I wanted to explore predicting pointing to a bin relative to the user. So, I collected data pointing to 7 bins to the left, right, and front of the user. On early datasets this method achieved around 0.9 mAP and 0.975 test accuracy, (with test set being randomly sampled from the same video as training data)  but it still is iffy on the test videos.  I want to have automated evaluation the system on different videos and collect more training data. The system can easily detect if a point is to the left, right, or center (x dimension), but has trouble seeing how in front a user is pointing to (y dimension). This is because the data for how in front you are pointing to is very similar from a front view camera. This could potentially be solved with another side camera.

Early point data, detecting i’m pointing to a bin to the 2 ft right and 2 ft in front of me.

Deliverables next week

I want to continue to gather data for the point problem and work on different models. Additionally, I want to have separate videos to train and test on. I also want to work with the side camera data if it can arrive next week.

I also want to start on the visualization for the point recognition.

Risk management

Most of our risks of the parts not arriving have been resolved, as they arrived this week. Also, being able to work on videos removes our risk for not having enough time to run everything remotely.

The major risks left is not being able to detect the point, but that can potentially be resolved with additional hardware (another camera perspective) and limiting the point problems by the size of the bins we choose.

Schedule

On schedule. Slightly ahead of the previous planned schedule as the parts arrived this week. However, more time needs to be spent on the point. I have attached the updated Gant Chart.

Sean’s Status Update for 03/28 (Week 7)

Progress

I finally got the Roomba as well as the webcam and connecting cables delivered to me.

Env-Setup & Data collection

I set up the environment in my basement, with the webcam covering the corner of the room. I tested basic manipulations (driving, rotating, etc.) and realized the odometry is a bit off. I suspect the carpet floor to be the cause. It is still within the requirement (1-ft error after 10m run) but I might need to add some fine tuning to improve the accuracy. I also was able to collect some video data for other teammates to use.

Mapping

Edge following part of the mapping is working fine (with some fine tuning tweaks due to the new environment). Initially, I planned to use multi-goal A* algorithm for mapping. However, it turns out it is unnecessarily complicated for a limited indoor environment. So I am pivoting to lawn-mowing pattern, which works well in a confined space with a few obstacles. The mapping will be done in the early next week.

Deliverables next week

I will complete the 2-D mapping with some limited implementation of path-finding.

Schedule

On schedule.

Team Status Update for 03/21 (Week 5, 6)

Progress

This week, we lost access to our lab and our hardware, so we had to re-scope part of our project due to the recent situation. We wanted to transition to remote by keeping the integrity of the project but also having enough individual components for each of us to work on. We originally planned to do everything in simulation, but now we are shipping the hardware and building out each component individually. More information is attached in our statement of work.

Deliverables next week

Gesture recognition

We are working on ways to run the system locally. We lost remote access to our Xavier board, so we are figuring out alternatives on AWS or if we can get it shipped to us. The top priority will be to get the gestures we already recognize working again on the new setup. We are also waiting for our webcams and equipment to ship, as the webcam quality from the laptop is much worse.

Robot manipulation

We don’t have an access to the robot, so for the next couple weeks, we will work on the robot through simulation. This will give us some ideas on how the robot will behave with the algorithms. We hope to get some working 2D-mapping algorithm through the simulation.

Schedule

Behind schedule, but we have readjusted it for remote work.

Rama’s Status Update for 03/21 (Week 5, 6)

Progress

We had to make some changes to the project to deal with remote work. Taking into consideration Marios’ suggestions, we will be proceeding with the three major sections but will be decoupling the parts and communicating between them by sending prerecorded data around. I spent some time this week trying to get Webots to run on the Xavier board but was unable to get it to work with the unsupported ARM processor. After our decision to work with our original hardware, I pivoted to work on recognizing the Roomba and user. There is limited testing that can be done without videos from the new environment, but I am moving forward making large assumptions that can be tailored to fit our actual hardware once it is delivered.

Deliverables next week

I want to finish recognizing the Roomba and user and start to create a mockup of how the map will be represented.

Schedule

Readjusted expectations for remote work; waiting on hardware delivery.

Jerry’s Status Update for 03/21 (Week 5, 6)

Progress

These past two weeks were hectic as we tried to deal with transitioning our project to work remotely. Alot of time was spent to bouncing around different ideas for how we could change our project and doing research to see what of the methods were visible. We originally wanted to move the project to simulation, so we were looking into methods like Webots and Gazebo. After further discussion with Marios, we decided to still have the robot run locally at Sean’s place and have Rama and my parts run remotely, integrated with video editing.

On the technical side, I’m looking into streaming my webcam footage to the  xavier board to process the gestures. Even though latency is not as much of a concern, I want to make sure that is is fast enough for development. I am also working on evaluating the code to see how much we can reuse with the new project.

Deliverables next week

Next week, I want to make sure all the existing gestures can be recognizing through the home environment. (Everything except for the point) And I want to start gathering data again for the gestures and the point with my new home environment. I don’t know if I will receive the webcam and hardware from Quinn, but I’ll try to set that up if it arrives.

Schedule

Behind schedule, but we have readjusted it for remote work.

Sean’s Status Update for 03/21 (Week 5, 6)

Progress

This week, well, it was fairly unusual. I’m in Chicago with my parents and still trying to adjust to the new norm. That includes working on the robot without the actual robot. The Roomba will arrive here in approximately 1~2 weeks, so in the meantime, I am working on the simulator, Webots, to develop some basic versions of the algorithms. This is purely for the developing purpose, and the simulation will not appear on the demo or the final presentation.

Webots

Luckily, Webots, an open source simulator, comes with a nice model for iRobot Create. This lacks some sensors, such as light sensors or IR sensors, but it is good enough for the purpose of algorithm development. I was able to implement part of my previous 2D-mapping code into the simulator, and I plan to work on it for a while.

Deliverables next week

Next week, I will continue to work on Webots to implement 2D mapping algorithm and possibly start working on the path-planning.

Schedule

A bit behind; schedule updated

Team Status Update for 03/07 (Week 4)

Progress

This week, we made good progress towards implementing mapping and gesture recognition using ML methods like SVM.

Robot Mapping

This week, we (partially) implemented the 2D mapping algorithm. There are two phases to the algorithm: edge-following and scanning the rest of the room. The edge-following works fine, but we are still experimenting with the second phase. We need to continue tuning and potentially come up with a new algorithm. Since mapping is a significant part of the project and we don’t want any bottlenecking, we must complete the algorithm by the beginning of the week after the break.

Gesture Recognition

We deployed our data gathering pipelines to collect data for teleop and point data. We also trained both multiclass and one versus all (OVR) SVMs for each task and tried them with our main camera script. Our best teleop model gave around 0.94 accuracy with SVM params C = 10, gamma = “scale”, and polynomial kernel. It was interesting to see the cases that our models beat the heuristics, especially when the user is standing on the of the screen or not directly facing the camera.

Deliverables next week

Next week, we will continue working on gesture recognition with more features and explore 2D point tracking with models. We will also explore the possibility of tracking with multiple cameras. We also will start exploring methods to locate the robot from the image in order to start working on our 2D to 3D mapping synchronization.

Schedule

On Schedule.

Rama’s Status Update for 03/07 (Week 4)

Progress

This week I finished work on the reliability of our webserver and started work on structuring our data to handle JSON for passing information for the other requests that will be made. This involved straightening out the details of the communication between the three components of this project and the interfaces that they will implement and expect. The dashboard has been shelved since it is not as critical as laying server communication groundwork.

Deliverables next week

Continuing work on the APIs.

Schedule

On schedule, moving dashboard to a later date.