The team chose the name CanBus to signify the ability to overcome the difficulties faced by visually impaired individuals when boarding buses.
Challenges faced by visually impaired individuals
when boarding buses:When multiple buses arrive, visually impaired individuals have to ask each bus driver if it is the bus they intend to board.
Bus drivers may not be aware that a visually impaired person is waiting and may drive past without stopping.
It is difficult for visually impaired individuals to locate and press the STOP bell to request a stop, especially when the bus is crowded.
Reasons for these situations:
Bus drivers are unaware that visually impaired individuals are waiting for the bus.
Visually impaired individuals cannot identify bus numbers, so they have to confirm with each bus.
Proposed solution:
Inform the bus driver about the specific bus stop where a visually impaired individual wishes to board.
Scenario:(https://www.clipartkorea.co.kr/search/preview.php?cont_code=cb2030003056&menu=membership&ska=0&_fu=main&hdnkeyword=%EC%8B%9C%EA%B0%81%2B%EC%9E%A5%EC%95%A0%EC%9D%B8&keyword=%EC%8B%9C%EA%B0%81%EC%9E%A5%EC%95%A0&single_movie_themetitle=undefined&_usl=0&page=240&rows=1&TOTAL_PAGE=927)
(https://www.donga.com/news/Opinion/article/all/20190327/94751180/1)
#1 Open the CanBus app using voice recognition at a bus stop
#2 Touch the upper part of mobile screen of CanBus, and the verbally state the departure location, destination, and bus number in that order.
#3 Send this information along with parsed data from the bus route API to Mobius.
#4 In mobious, the received information is displayed on the RPI monitor installed next to the bus driver's seat.
#5 The bus driver can be aware of the sign indicating that a visually impaired individual wants to board the bus.
#6 Before reaching the destination, the visually impaired individual long-presses "Request Stop" on the lower part of mobile screen..
#7 The word if "stop request" displays on the RPI monitor for driver's acknowledgement.
#8 The visually impaired individual can get off the bus safely.
The Open API information we utilize:Our team employs an API to access comprehensive data on bus operations within Seoul. The API key utilized comprises three essential parameters: bus route ID (busRouteId), bus stop ID (stId), and the sequential order number of the bus stop (ord).
By leveraging these parameters, we can efficiently retrieve detailed information related to specific bus routes, bus stops, and their respective positions in the overall sequence. This enables us to gather real-time data on bus arrivals, departures, and other essential metrics.
With the bus route ID, we can pinpoint the exact route under consideration, allowing us to focus our queries and data retrieval efforts on a specific bus line. The bus stop ID parameter allows us to target a particular bus stop and obtain relevant information, such as its location, nearby facilities, and arrival/departure times.
The sequence number of the bus stop plays a crucial role in maintaining the order and organization of bus stops along a given route. By leveraging this parameter, we can accurately track the position of a bus stop within the overall sequence, facilitating efficient route planning and optimization.
By utilizing this API, our team can provide enhanced services and features to our users, such as real-time bus tracking, accurate arrival predictions, and route planning assistance. This empowers users to make informed decisions regarding their transportation needs, leading to improved efficiency, convenience, and overall satisfaction with public transportation in Seoul.
GoBus oneM2M resource structure:The Application Entity (AE) functions as the client responsible for processing requests related to specific bus route IDs. Situated within the AE are containers that correspond to the physical identification numbers assigned to the operating buses on the given route. The exchange of data occurs through the utilization of the "con" value within the Content Instance (cin) file associated with each container.
Among the data obtained using these identification keys, the primary information of interest pertains to the "vehicle ID of the first arriving bus (vehId1)." In this context, vehId1 serves as an exact mapping to the bus intended for boarding.
Furthermore, the issued values encompass the vehicle numbers associated with vehId1. These vehicle numbers are created as dedicated containers within the Mobius server, facilitating control and monitoring through Raspberry Pi devices for each respective bus. The service progresses by leveraging these containers, each representing a specific vehicle number and enabling targeted actions.
Ultimately, the Raspberry Pi retrieves the "con" value from the cin transmitted by the mobile application. Based on this information, the Raspberry Pi provides the appropriate service, tailoring its actions and responses to meet the identified needs and requirements.
Communication Method:Using the HTTP protocol, data values stored on the Mobius server are retrieved to the Raspberry Pi by making an HTTP GET request. The GET request is a method used by the client (Raspberry Pi) to request data from the server (Mobius). It accesses a specific resource on the server through a URL (Uniform Resource Locator) and header values, requesting the data from that resource.
Screen ConfigurationTo inform the bus driver about the boarding information for visually impaired individuals, the tkinter package of the Python programming language is used to create a screen interface. Tkinter is the standard GUI package for Python and is used to develop and manage user interfaces. Through Tkinter, the bus driver can receive real-time information about visually impaired passengers and facilitate communication between the driver and the visually impaired individuals.
Algorithm:The update_label() function selects the information that needs to be displayed on the screen and performs the corresponding actions. If there are no visually impaired individuals wishing to board that bus, the screen displays a message saying "Waiting for the next passenger."
If a visually impaired individual using the application uploads data about their origin and destination to the Mobius server, the route() function is executed. The route() function displays the data about where the user wants to go on the screen.
When the bus arrives at the bus stop where the application user is present, and the user boards the bus and reaches the destination bus stop, they press the exit button on the application. Once the Mobius server receives the exit value as data, the Raspberry Pi retrieves it, and the screen starts flashing blue and red, displaying "I want to get off" to the bus driver.
After that, the algorithm goes back to the initial state and displays "Waiting for the next passenger" on the screen until new data values for the specific bus are uploaded to the Mobius server. This process continues until the Raspberry Pi is shut down.
Multithreading:Multithreading is used to retrieve data values from the Mobius server in real-time through HTTP GET and control the screen using the obtained data values. Multithreading is a programming technique that executes multiple threads concurrently to perform tasks simultaneously. Thread 1 performs an HTTP GET to retrieve the value stored in "con" from the Mobius server, while Thread 2 controls the screen using the algorithm. To prevent infinite loops caused by multithreading and ensure that the action of pressing the exit button is executed once, a flag is used to prevent the repetitive execution caused by multithreading.
Moblie ApplicationFirst of all, a layout using only two buttons based on the middle of the mobile phone was constructed for the visually impaired to use the service smoothly.
The Button At The Top
When clicking the 'start service' button at the top, STT technology is used to input information about the origin, destination, and number of the bus to be boarded based on the user's voice.
Once again, the information received from the user is checked using TTS technology, and if there is no response from the user, an API call is made based on the information.
Using APIs
The API we use is the "Seoul City, Bus Arrival Information Inquiry System" provided by the public data portal.
The origin information received from the user and the information on the bus route are mapped as follows.
Since our team implemented the service assuming only one line, first of all, they matched it with the same API key.
As seen, the service assumed that "a situation in which you want to take bus 7715 at Yeokchon-dong Cathedral."
If the service is expanded and the data structure for each route is retained, we think the same service can be provided for all routes.
The information we want to obtain by calling the API with these keys is currently the ID of the bus that arrives first at the current location.
The information appears as a key to vehId1 in the JSON file provided by the API.
And vehId1 is all mapped to a container on the Mobius server.
Now we can make the right behavior on the RPi side watching the server if we send a specific signal to the container of the mapped Mobius.
The Button At The Bottom
The button at the bottom functions to send a boarding completion signal when pressed briefly, and to send a signal that you want to get off when pressed long.
The First POST
Posts a string on the mapped RPi container indicating that there are people wishing to board at a particular stop.
("There is a person who wants to board at Yeokchon-dong Cathedral.")
Through this, it will be possible for the visually impaired to board the bus smoothly by making the bus driver aware of the fact.
The Second POST
When the user completes boarding the desired bus, slightly press the button at the bottom to inform the bus driver of the fact.
Post is performed on the mapped bus usign the HTTP protococl, the same as when pressing the button above.
Therefore it is possible to make the bus dirver aware that the user is on the bus and help the user get on the bus.
The Third POST
After hearing the announcement of the next stop on the bus, if you reach the stop where you want to get off, press and hold the button at the bottom.
If so, the server will be able to post an "exit" signal this time, and control the RPi display so that the bus driver can know the fact.
Demo Video
Cover image source:
https://www.clipartkorea.co.kr/search/preview.php?cont_code=ta0103a3008&menu=membership&ska=2&_fu=main&hdnkeyword=%EC%8B%9C%EA%B0%81%EC%9E%A5%EC%95%A0%EC%9D%B8&keyword=%EC%8B%9C%EA%B0%81%EC%9E%A5%EC%95%A0%EC%9D%B8%2B%EB%B2%84%EC%8A%A4&page=1&single_movie_themetitle=undefined&_usl=1&rows=1&TOTAL_PAGE=4
Comments
Please log in or sign up to comment.