Mobile Robot Control 2024 Ultron:Solution 1: Difference between revisions
Line 19: | Line 19: | ||
[[File:Exercise1 Chuyu.png|thumb|350px|right|Solution of Chuyu]] | [[File:Exercise1 Chuyu.png|thumb|350px|right|Solution of Chuyu]] | ||
====Solution of Chuyu==== | ====Solution of Chuyu==== | ||
# '''Initialization''': | # '''Initialization''': | ||
#* It initializes the IO object to interact with the robot's hardware. | #* It initializes the IO object to interact with the robot's hardware. |
Revision as of 20:17, 12 May 2024
Exercise 1: the art of not crashing
Solution of Hao
- Boolean Flag:
- A boolean flag named 'move ' is used to control whether the robot should continue moving or stop.
- It is initialized to 'true', indicating that the robot is initially allowed to move.
- Obstacle Detection:
- The program continuously reads laser sensor data inside the control loop.
- If any distance measurement from the laser scan is less than 0.2, an obstacle is detected.
- Stopping Action:
- When an obstacle is detected, the 'move ' flag is set to 'false'.
- Setting 'move ' to 'false' indicates that the robot should stop moving.
- Additionally, a stop command 'io.sendBaseReference(0, 0, 0)' is sent to the base controller immediately after detecting the obstacle.
- Control Loop Condition:
- The control loop continues executing as long as the robot is properly connected 'io.ok()' and the 'move ' flag is 'true'.
- Once the 'move' flag is set to 'false' , the control loop stops executing, effectively halting the robot's motion.
Solution of Chuyu
- Initialization:
- It initializes the IO object to interact with the robot's hardware.
- It creates a Rate object to control the loop frequency.
- Flag Initialization:
- It initializes a boolean flag named 'move' to 'true', indicating that the robot is initially allowed to move.
- Control Loop:
- The loop runs as long as two conditions are met:
- The robot is properly connected (io.ok() returns true).
- The 'move' flag is true.
- Within the loop, it reads laser sensor data.
- It checks for obstacles by iterating through the laser scan data and determining if any distance measurement is less than 0.5.
- If an obstacle is detected, it adjusts the robot's speed based on the closest obstacle distance:
- If the closest obstacle is further than 0.5 meters away, it moves at normal speed (0.2 units).
- If the closest obstacle is between 0.4 and 0.5 meters away, it decreases speed slightly.
- If the closest obstacle is between 0.3 and 0.4 meters away, it decreases speed further.
- If the closest obstacle is between 0.2 and 0.3 meters away, it decreases speed even more.
- If the closest obstacle is less than 0.2 meters away, it stops the robot and sets the 'move' flag to false to exit the loop.
- If no obstacles are detected, it continues moving forward at normal speed.
- The loop sleeps for the remaining time to maintain a fixed loop frequency.
- The loop runs as long as two conditions are met:
Solution of Nan
I defined a vector whose elements represent the distance of a "safe outer contour" from the LiDAR sensor in all directions that the sensor can detect. The robot stops immediately when this safe outer contour hits an object, i.e., when any element of the emc::LaserData::rangs
vector is smaller than the corresponding element of the safe outer contour vector.
The "safe outer contour" is defined as the actual outer contour of the robot plus the safe braking distance of the robot in all directions. In the current implementation, this outer contour is simply set as a circle and it is assumed that the safe braking distance is the same in all directions and independent of speed, i.e., a segment of a circular arc centered on the sensor with a fixed value of radius. And after experimentation, the radius was set to 0.15 meters.
However, theoretically, the real outer contour data can be determined and a mapping model of speed and safe braking distance can be constructed. Thus, the accurate safe outer contour can be calculated at runtime.
Solution of Yidan
Using LiDAR data in each loop to determine and adjust the robot's behavioural strategy. We iteratively check if any obstacle distance is below the set safe distance (0.5 metres) by iterating over these distance values. If this is found, a stop command is sent to the basic controller, otherwise the robot will keep going.
- Robot needs to collect distance measurements from LIDAR for real time;
- The robot will need to respond when any detected obstacle distance is below this threshold;
- Based on the results of the analysis, the robot adjusts its travel speed or modifies its behaviour in order to avoid obstacles.
Solution of Liz
Set the safe distance to 0.5 meters, initialize a flag parameter 'obstacle' to false. In every control loop, read the LiDAR data to detect the distance between robot and obstacle. If this distances is less than safe distance, then assume the robot is close to the obstacle, set the 'obstacle' to ture.
Based on the value of 'obstacle', determine the next movement of the robot. If 'obstacle' equals ture, send stop commond to the robot to avoid crashing. Else send move commond to make robot move forward in the speed of 0.2m/s.
Exercise 2: Testing your don't crash
Solution of Hao
- In map1 the robot can stop as the designed purpose.
- In map2 the robot stopped when detected the wall on the right side with distance<=0.2
Solution of Chuyu:
- In map 1, robot stops when it is 0.2 meters from an obstacle
- In map 2, robot stops when it is 0.2 meters from an obstacle
Solution of Nan
As shown in map1.mp4and map2.mp4, the robot correctly detected obstacles in front and to the side. It stopped in time before the collision and was not disturbed by the side obstacles.