wiki:Other/Summer/2023/Awareness

Version 5 (modified by paw114, 17 months ago) ( diff )

Smart Intersection Situational Awareness

    Smart Intersection Situational Awareness

    WINLAB Summer Internship 2023

    Group Members: Peter Wilmot, Heneil Patel, Eleonore Pichon

    Project Objective

    Combine input from multiple cameras in the orbit smart city environment to create a fused model which can be used for detection of cars and pedestrians. This project will require some knowledge of computer vision techniques. Students will work with camera feeds from both rgb and depth cameras, and will be responsible for writing code and developing procedures to synchronize and calibrate the cameras. There are several different tasks for this project:

    • Calibration and fusion of multiple depth camera feeds: There are four Intel realsense cameras placed in the smart intersection environment, providing multiple views of the intersection from different angles. Because the realsense cameras are rgb-d cameras, they each provide a point cloud data stream. These point clouds can be combined to form a more complete 3d data stream of the intersection environment. This can be done simply if the positions of the cameras relative to each other in 3d space are known. Students will research and implement a routine for “calibrating” the depth camera deployment, thereby finding the positions of all of the cameras and allowing for the combination of the point cloud data.
    • Image stitching of multiple top-down rgb cameras: The smart intersection includes several overlapping top-down views meant to allow for remote control of the vehicles in the environment. The video from these cameras needs to be stitched in real time to create a single video stream with the full top-down view.
    • (Optional) Fusion of all views in the intersection: If both the depth camera fusion and top-down stitching projects are finished before the end of the internship, the next step is to combine both views of the intersection with any available views from vehicles driving through the intersection.

    Students should get started with this project by using ROS (robot operating system) to get video streams from all of the depth cameras in the intersection. There is a realsense library for ROS, which should simplify getting all of the camera streams into one place.

    Meeting time: Thursdays at Noon

    Progress

    • We used opencv and ArUco markers to detect points in the intersection. This allows us to find common points that are in view of multiple cameras.
    • Utilizing the depth streams from the cameras, we converted these points into 3D coordinates.
    • We created a server and client using python sockets to send pickle files containing the points and their labels between different nodes.
    • By comparing the ids of the markers detected by each camera, we found common points and used the Kabsch algorithm to find a translation and rotation from one set of points onto the other.
    • We had to convert the rotation matrix from the Kabsch algorithm to yaw pitch and roll to rotate the points.
    • Using ros, we initialized each camera with Pointclouds enabled and exported the streams to one node.
    • We then opened Rviz (Ros Vizualization) to view the Pointclouds.
    • We used the ros static transform publisher to translate and rotate the pointclouds in relation to each camera's depth_optical_frame.
    • This was inconsistent and still showed error even at its best. We decided that our transformation/visualization methods might be the issue, so we stopped using Ros for now.

    Calibration when using Ros to view pointclouds

    • Using opencv and matplotlib, we displayed the detected 3D points from two of the cameras, and translated the points from one of the cameras according to our Kabsch results. It is clear that our algorithm is working correctly, and this works for every pairing of cameras.

    Detected point transformation

    • Without ros we needed to find a way to stream the cameras to one node, and the ethersense package seemed promising. It uses python sockets to transfer live camera streams over ethernet. It required some reformatting and minor changes but the camera views are now streaming, we just need to figure out how to view/manipulate these streams on the host node.

    Attachments (21)

    Note: See TracWiki for help on using the wiki.