Nome | Nºmec | |
---|---|---|
Henrique Sousa | hsousa@ua.pt | 98324 |
José Santos | josesantos01@ua.pt | 98279 |
Roberto Figueiredo | robertof@ua.pt | 116147 |
Practical work 3 carried out within the scope of the PSR curricular unit. It uses ROS to implement a robot able to autonomously move and perform tasks, such as identify objects, count objects, take photos, etc.
Include here what it is necessary to work
Install this dependencies:
$ sudo apt-get install ros-noetic-joy
$ sudo apt-get install ros-noetic-robot-state-publisher
$ sudo apt-get install ros-noetic-move-base
$ sudo apt-get install ros-noetic-map-server
$ sudo apt-get install install ros-noetic-move-base
$ sudo apt-get install python3-opencv
Install python packages using pip:
$ pip install -r requirements.txt
Export environment variable:
export TURTLEBOT3_MODEL=waffle_pi
$ roslaunch robutler_bringup gazebo.launch
$ roslaunch robutler_bringup bringup.launch
$ roslaunch robutler_navigation localization.launch
$ roslaunch robutler_missions missions.launch
$ roslaunch robutler_controller action_server.launch
$ roslaunch robutler_vision vision.launch
The rviz menu was implemented in order to make the actions of the robot easier to do, by implementing a interactive menu.
This menu is automatically populated by the contents of properties.yaml, how the menu is populated can be restricted based on the type of mission
This includes:
The vision system uses YOLO3-Tiny as demonstrated it has a better cost to performance ratio and is more suitable on minimal hardware [1]
Vision was split into object detection using YOLO and color masking for the colored cubes.
<img src="docs/vision.jpeg" alt="Cv and yolo programs working" width="500" />
The object_detection.py
program, uses the yolov3 model to detect objects, and then uses this information and displays the objects it detects, with a bounding box around it. These bounding boxes only appear on certaint objects, using the names of the objects the model can detect and the weight of each object, using the coco.names
and yolov3-tiny.weights
files respectively.
amcl takes in a laser-based map, laser scans, and transform messages, and outputs pose estimates. amcl is a probabilistic localization system for a robot moving in 2D. It implements the adaptive (or KLD-sampling) Monte Carlo localization approach (as described by Dieter Fox), which uses a particle filter to track the pose of a robot against a known map.[2]
For path planning and navigation, the ROS navigation stack is used with the implemented action server move_base
. [3]
To make it so that the robot doesnt crash, its taken into consideration the obstacles and the safe distace from them, being created a cost map that creates a safety zone around the obstacles, where the robot either slows down or stops, depending on the distance from the obstacle. In the image below its possible to see the cost map.
Navigation Stack | Navigation Behaviour |
---|---|
For ease of use, we created launch files to launch of the packages, mostly for the manual testing of the programs. Here is a lisf of the launch files used, their packages and their functions:
To do this, we changed the robutler.urdf.xacro
file so we could model the new part of the robot, this being a antenna, with a size of 1.5 meters.
Interaction between the nodes, topics and servers