- Poder modificar los wifis a los que se conecta la raspberry automáticamente
- Implementar simulación gazebo en el dockerfile, testear resto de programas del asti.
- Testear sistema de Docker con el cybercrex (bringup haciendo ssh, y el resto desde nuestro portátil)
Bienvenidos al repositorio usado para quedar en segunda posición en el ASTI2024. Esto contiene todos los paquetes de los programas usados para las diferentes pruebas. Entre ello tenemos:
- ROS2 Foxy con integración para TurtleBot3.
- Simulación en Gazebo.
- Paquetes ROS.
- Un Docker para que no corrompas tu portátil.
Sistema operativo:
- Cualquiera, mientras soporte Docker (En principio este repositorio necesitaría Ubuntu 20.04 con ROS2 Foxy, que es el que se usó para el desarrollo, pero como en las asignaturas de la carrera se recomienda instalar ubuntu 22.04 con Humble, el uso de docker ayuda a no tener problemas de compatibilidad).
Primero asegúrate de tener instalado en tu sistema:
- Git (para clonar este repositorio).
- Docker (es como una máquina virtual para no corromper tu portátil en las instalaciones, en este tutorial y este otro podrás aprender más sobre como funciona docker y su importancia.)
git clone https://github.com/diegomarzaa/asti2024.git
cd asti2024
Usa el fichero de Dockerfile
incluido para construir todo el entorno de trabajo, en ese archivo podrás ver todo el proceso que se sigue para dejarlo listo, ejecútalo:
sudo docker build -t asti2024 .
Esto te creará una imagen llamada asti2024
. Puedes ver si se ha creado correctamente con:
sudo docker images
y deberías ver algo similar a esto:
REPOSITORY TAG IMAGE ID CREATED SIZE
asti2024 latest 535bcd5d8e02 14 seconds ago 900MB
chmod +x abrir-workspace-asti.sh
./abrir-workspace-asti.sh
Al ser la primera vez, se compilarán automáticamente todos los archivos del entorno de ROS2, y tras esto, estarás dentro del contenedor.
En el contenedor abierto con el script abrir-workspace-asti.sh
cualquier cambio que hagas en la carpeta asti2024_ws
también se hará en tu portátil. Así podrás hacer las modificaciones que quieras en tu código sin miedo a romper nada.
- Aún en fase beta, falta implementar:
También está la alternativa abrir-workspace-asti-tests.sh
que abre el contenedor totalmente aislado, podrás modificar lo que quieras sin miedo a romper nada, ya que cuando salgas del contenedor, todo lo que hayas hecho se perderá.
- Falta implementar el TurtleBot3 en la simulación, con el docker aún no se instalan todos los paquetes del turtlebot, solo van los programas hechos por nosotros que se encuentran en la carpeta
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
ros2 run final keyboard_teleop
-
Permisos denegados en dispositivos USB:
sudo chmod 777 /dev/ttyUSB0
-
Fallos al compilar: asegúrate de que has sourceado todo bien:
source /opt/ros/foxy/setup.bash source /root/asti2024/asti2024_ws/install/setup.bash
- Rosbags
# Grabar movimientos
ros2 bag record /cmd_vel
# Reproducir movimientos
ros2 bag play rosbag2_<fecha>/rosbag2_<fecha>.db3
- IP de la Raspberry (en cualquier wifi, sin monitor)
- Falta mirar mejor esto
sudo apt-get install arp-scan
sudo arp-scan --interface=wlo1 --localnet
-
Si sigue sin funcionar
sudo usermod -aG dialout pi
sudo chmod 777 /dev/ttyUSB0
(o el puerto que sea, podría ser ttyUSB1, ttyUSB2, etc. Usarls /dev/ttyUSB*
para verlo)- Reiniciar la controladora de motores. Conectar USB + energia.
- Cambiar el usb de sitio.
-
Testeo de motores
ros2 run final keyboard_teleop
ros2 run teleop_twist_keyboard teleop_twist_keyboard
ros2 topic pub cmd_vel geometry_msgs/Twist "{linear: {x: 0.1, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.0}}"
ros2 topic pub -1 /set_velocity custom_interfaces/SetVelocity "{id: 1, velocity: 50}"
- (Id puede ser 1 o 2, y velocity puede ser + o -)
-
/etc/netplan/01-network-manager-all.yaml
- La configuración de la red wifi está en este archivo.
- Esta permite que se conecten automaticamente a la red wifi que se quiera. Si no se pone aquí, se tendría que usar una pantalla externa, iniciar sesión... De esta forma se puede conectar a la red wifi deseada sin necesidad de hacer nada en la raspberry, ni siquiera iniciar sesión.
- Para cambiar esta configuración, habrá que conectarse a una pantalla, o entrar desde un wifi ya agregado
-
Escribir wifis en el archivo de configuración de la red wifi, el nuestro está así:
network:
version: 2
renderer: NetworkManager
wifis:
wlan0:
optional: true
access-points:
"ego": # Nombre de la red
password: "lo_que_toque" # Contraseña
"PIROBOTNET": {} # No necesita contraseña, es abierto
# etc... poner todos los que haga falta
dhcp4: true
- Aplicar los cambios:
sudo netplan apply
- Para ver la IP de la raspberry en cualquier wifi sin usar un monitor:
- sudo apt-get install arp-scan
- sudo arp-scan --interface=wlo1 --localnet
- Conectar raspberry a la corriente / batería.
- Entrar en la raspberry con ssh desde otro portátil conectado a la misma red wifi.
-
ADRIA:
ssh -X [email protected]
-
DIEGO:
ssh -X [email protected]
-
ssh -X [email protected]
ssh -X [email protected]
(ssh -X [email protected]
antes era este pero ya no) -
Contraseña:
qwerty
-
La red wifi puede ser el router PIROBOTNET o los datos de cualquier móvil ya configurado.
-
Para conectarlo a los datos de un móvil o red no configurada, habría que hacerlo desde la interfaz gráfica de la raspberry, conectando un teclado, ratón y monitor... O conectando cable ethernet.
- Sources.
cd Documents/asti2024/asti2024_ws
source install/setup.bash
(O usar el aliassrc
para hacerlo más rápido)
- Ejecutar el programa deseado.
ros2 run bringup motor_vel_controller
(Para activar los motores, no se debe cerrar esta terminal. Asegurarse de que está los motores están bloqueados girando las ruedas con la mano)ros2 run final dibuja_figura
(En otra terminal, aquí sería donde se ejecutaría el programa deseado)
- En caso de error:
- Hacer sources:
source /opt/ros/foxy/setup.bash
source install/setup.bash
- Compilar el código en la raspberry, en principio ya estará siempre hecho.
colcon build --packages-select custom_interfaces
colcon build --packages-select dynamixel_sdk
source install/setup.bash
colcon build --symlink-install --packages-select bringup
- Compilar los programas restantes (final...)
source install/setup.bash
- Si sigue sin funcionar
sudo usermod -aG dialout pi
sudo chmod 777 /dev/ttyUSB0
(o el puerto que sea, podría ser ttyUSB1, ttyUSB2, etc. Usarls /dev/ttyUSB*
para verlo)- Reiniciar la controladora de motores. Conectar USB + energia.
- Cambiar el usb de sitio.
- Para cerrar la raspberry:
sudo shutdown now
(Esperar a que se apague la luz roja del led de la raspberry, no desconectar la corriente antes de que se apague)
- Para cerrar la conexión ssh:
exit
- Descargar repositorio.
- Compilar el código
colcon build --packages-select custom_interfaces
colcon build --packages-select dynamixel_sdk
source install/setup.bash
colcon build --symlink-install --packages-select bringup
source install/setup.bash
colcon build --symlink-install --packages-select pruebas final
(etc... Todos los paquetes que se quieran usarS)
- Ejecutar el programa deseado.
ros2 run final dibuja_figura
(En otra terminal, aquí sería donde se ejecutaría el programa deseado)
- Si queremos probar los motores
- Habrá que conectar la controladora de motores al portátil con un cable USB.
- También habrá que dar energía a la controladora con otro USB o con una batería. La opción del USB sería mediante un arduino que proporciona 5V.
- (Falta explicar mejor)
- Dar permisos al ordenador para controlar los motores
sudo usermod -aG dialout pi
sudo chmod 777 /dev/ttyUSB0
(o el puerto que sea, podría ser ttyUSB1, ttyUSB2, etc. Usarls /dev/ttyUSB*
para verlo)ros2 run bringup motor_vel_controller
(Para activar los motores, no se debe cerrar esta terminal. Asegurarse de que está los motores están bloqueados girando las ruedas con la mano)- Si no funciona, cambiar el usb de sitio o ejecutar
ros2 run bringup motor_vel_controller /dev/ttyUSB0
(o el puerto que sea, podría ser ttyUSB1, ttyUSB2, etc. Usarls /dev/ttyUSB*
para verlo)
- Crear el programa en la carpeta
asti2024/asti2024_ws/src/pruebas/pruebas
(por ejemplo) - Si el programa es en python, ir a
asti2024/asti2024_ws/src/pruebas/setup.py
y añadir el nombre del programa en la lista deentry_points
. - Ejemplo:
entry_points={
'console_scripts': [
'test_vision_gazebo = pruebas.test_vision_gazebo:main',
'distance_sensor = pruebas.distance_sensor:main',
],
},
- Compilar el código
colcon build --symlink-install --packages-select pruebas
source install/setup.bash
- No haría falta compilar cada cambio que hagamos al programa si habíamos usado --symlink-install para compilar, pero si se cambia el
setup.py
otra vez sí que habría que hacerlo.