Offriamo un semplice servizio di pick e delivery online che permette a un utente registrato in una stanza di chiamare un robot, affidargli un pacco e assegnargli un destinatario al quale consegnare il pacco
Bisogna innanzitutto aver installato i seguenti programmi:
- ROS Melodic
- Nodejs
- Docker
Per far partire il servizio (i punti 5-8 sono equivalenti al punto 9):
-
Fare una copia in locale della cartella git
git clone HTTPS https://gitlab.com/hu.1839472/progetto-labiagi.git
-
Aggiungere la directory catkin_ws in ~/.bashrc e fare build
IN:progetto-labiagi/catkin_ws
echo "source $PWD/devel/setup.bash" >> ~/.bashrc catkin build
-
Installare i package necessari per nodejs nella cartella main
IN:progetto-labiagi/main
npm install
-
Fare il make di proc_webctl
IN:progetto-labiagi/webctl
make
-
Creare un immagine di couchdb, farlo partire e creare i due database di users e room
docker run -d --name pick_e_delivery_couchdb -p 5984:5984 -e COUCHDB_USER=admin -e COUCHDB_PASSWORD=admin couchdb curl -X PUT http://admin:admin@127.0.0.1:5984/users curl -X PUT http://admin:admin@127.0.0.1:5984/rooms
Popolare quindi il database delle stanza, nella cartella main eseguire
IN:progetto-labiagi/main
node populate_rooms.js
Su http://localhost:5984/_utils è possibile monitorare il database, username e password sono entrambi "admin"
-
Far partire lo stack di navigazione
IN:progetto-labiagi/catkin_ws/src/srrg2_navigation_2d/april_tag
../../../../webctl/proc_webctl run_navigation.webctl
Fare lo start quindi di:
- 01_roscore
- 02_stage
- 03_mapserver
- 04_rviz
- 05_localize
- 06_planner
- 07a_follower(static)
-
Far partire il nodo ros principale
rosrun pick_e_delivery MainNode
-
Far partire il server
IN:progetto-labiagi/main
node server.js
-
Alternativamente, eseguire il bash nella cartella principale che fa partire lo stack di navigazione, il nodo principale e il server
IN:progetto-labiagi
sudo chmod 777 zzstartserver.sh ./zzstartserver.sh
Connettersi in localhost:9001 e iniziare i processi necessari allo stack di navigazione elencati nel punto 6 poi guardando su stageros, dare la posa del robot su rviz.
Premere poi un qualsiasi tasto sul terminale per continuare
Il nodo MainNode controlla gli stati del robot e i vari eventi di timeout.
Pubblica sui seguenti topic:
- /move_base_simple/goal per dare un nuovo goal al robot
- /pick_e_delivery/Pose per informare al server la posa del robot e il suo stato
- /pick_e_delivery/Timeout per informare al server eventi di timeout
- /tf per sapere la posa del robot
- /pick_e_delivery/NewGoal per sapere il prossimo goal dal server
- pick_e_delivery/setTooLongInterval per cambiare il periodo di timeout di tooLong (inizialmente a 50)
- pick_e_delivery/setWaitPackInterval per cambiare il periodo di timeout di waitPack (inizialmente a 30)