hadabot / hadabot_main

Content used in collaboration with various Hadabot blog posts to get guide you through learning ROS2.
https://blog.hadabot.com
GNU General Public License v3.0
37 stars 19 forks source link

Can not import escape from jinjia2 #36

Open prgrobots opened 3 weeks ago

prgrobots commented 3 weeks ago

Using ros2 topic pub -1 /hadabot/blink_led std_msgs/msg/Int32 "data: 3" does not blink the ESP32. Can confirm it was flashed correctly and has connected to the network.

When running the docker I see python errors. Tried on 2 linux machines, Lubuntu and Ubuntu 22.04 and have the same general error :

✔ Network docker_hadabot_network Created 0.2s ✔ Container hadabot_ros2_web_bridge Created 0.2s ✔ Container hadabot_ros2_codeserver Created 0.2s Attaching to hadabot_ros2_codeserver, hadabot_ros2_web_bridge hadabot_ros2_codeserver | * enable custom user: hadabot hadabot_ros2_codeserver | useradd: user 'hadabot' already exists hadabot_ros2_codeserver | set default password to "ubuntu" hadabot_ros2_codeserver | cp: cannot stat '/root/.config': No such file or directory hadabot_ros2_web_bridge | Websocket started on ws://localhost:9090 hadabot_ros2_codeserver | 2024-08-18 00:55:49,571 CRIT Supervisor is running as root. Privileges were not dropped because no user is specified in the config file. If you intend to run as root, you can set user=root in the config file to avoid this message. hadabot_ros2_codeserver | 2024-08-18 00:55:49,571 INFO Included extra file "/etc/supervisor/conf.d/codeserver.conf" during parsing hadabot_ros2_codeserver | 2024-08-18 00:55:49,571 INFO Included extra file "/etc/supervisor/conf.d/supervisord.conf" during parsing hadabot_ros2_codeserver | 2024-08-18 00:55:49,588 INFO RPC interface 'supervisor' initialized hadabot_ros2_codeserver | 2024-08-18 00:55:49,589 CRIT Server 'unix_http_server' running without any HTTP authentication checking hadabot_ros2_codeserver | 2024-08-18 00:55:49,590 INFO supervisord started with pid 54 hadabot_ros2_codeserver | 2024-08-18 00:55:50,595 INFO spawned: 'nginx' with pid 56 hadabot_ros2_codeserver | 2024-08-18 00:55:50,604 INFO spawned: 'web' with pid 57 hadabot_ros2_codeserver | 2024-08-18 00:55:50,610 INFO spawned: 'codeserver' with pid 58 hadabot_ros2_codeserver | 2024-08-18 00:55:50,619 INFO spawned: 'xvfb' with pid 59 hadabot_ros2_codeserver | 2024-08-18 00:55:50,625 INFO spawned: 'wm' with pid 60 hadabot_ros2_codeserver | 2024-08-18 00:55:50,634 INFO spawned: 'lxpanel' with pid 61 hadabot_ros2_codeserver | 2024-08-18 00:55:50,642 INFO spawned: 'pcmanfm' with pid 65 hadabot_ros2_codeserver | 2024-08-18 00:55:50,651 INFO spawned: 'x11vnc' with pid 68 hadabot_ros2_codeserver | 2024-08-18 00:55:50,660 INFO spawned: 'novnc' with pid 70 hadabot_ros2_codeserver | Traceback (most recent call last): hadabot_ros2_codeserver | File "/usr/local/lib/web/backend/run.py", line 122, in hadabot_ros2_codeserver | main() hadabot_ros2_codeserver | File "/usr/local/lib/web/backend/run.py", line 118, in main hadabot_ros2_codeserver | entrypoint() hadabot_ros2_codeserver | File "/usr/local/lib/web/backend/run.py", line 78, in run_server hadabot_ros2_codeserver | from vnc.app import app hadabot_ros2_codeserver | File "/usr/local/lib/web/backend/vnc/app.py", line 6, in hadabot_ros2_codeserver | from flask import ( hadabot_ros2_codeserver | File "/usr/local/lib/python3.8/dist-packages/flask/init.py", line 14, in hadabot_ros2_codeserver | from jinja2 import escape hadabot_ros2_codeserver | ImportError: cannot import name 'escape' from 'jinja2' (/home/hadabot/.local/lib/python3.8/site-packages/jinja2/init.py) hadabot_ros2_codeserver | 2024-08-18 00:55:51,470 INFO exited: web (exit status 1; not expected) hadabot_ros2_codeserver | 2024-08-18 00:55:51,638 INFO success: nginx entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) hadabot_ros2_codeserver | 2024-08-18 00:55:51,639 INFO success: codeserver entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) hadabot_ros2_codeserver | 2024-08-18 00:55:51,639 INFO success: xvfb entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) hadabot_ros2_codeserver | 2024-08-18 00:55:51,639 INFO success: wm entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) hadabot_ros2_codeserver | 2024-08-18 00:55:51,639 INFO success: lxpanel entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) hadabot_ros2_codeserver | 2024-08-18 00:55:51,639 INFO success: pcmanfm entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) hadabot_ros2_codeserver | 2024-08-18 00:55:51,735 INFO success: x11vnc entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) hadabot_ros2_codeserver | 2024-08-18 00:55:51,736 INFO success: novnc entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) hadabot_ros2_codeserver | 2024-08-18 00:55:52,607 INFO spawned: 'web' with pid 147 hadabot_ros2_codeserver | Traceback (most recent call last): hadabot_ros2_codeserver | File "/usr/local/lib/web/backend/run.py", line 122, in hadabot_ros2_codeserver | main() hadabot_ros2_codeserver | File "/usr/local/lib/web/backend/run.py", line 118, in main hadabot_ros2_codeserver | entrypoint() hadabot_ros2_codeserver | File "/usr/local/lib/web/backend/run.py", line 78, in run_server hadabot_ros2_codeserver | from vnc.app import app hadabot_ros2_codeserver | File "/usr/local/lib/web/backend/vnc/app.py", line 6, in hadabot_ros2_codeserver | from flask import ( hadabot_ros2_codeserver | File "/usr/local/lib/python3.8/dist-packages/flask/init.py", line 14, in hadabot_ros2_codeserver | from jinja2 import escape hadabot_ros2_codeserver | ImportError: cannot import name 'escape' from 'jinja2' (/home/hadabot/.local/lib/python3.8/site-packages/jinja2/init.py) hadabot_ros2_codeserver | 2024-08-18 00:55:53,045 INFO exited: web (exit status 1; not expected) hadabot_ros2_codeserver | 2024-08-18 00:55:55,832 INFO spawned: 'web' with pid 152 hadabot_ros2_codeserver | Traceback (most recent call last): hadabot_ros2_codeserver | File "/usr/local/lib/web/backend/run.py", line 122, in hadabot_ros2_codeserver | main() hadabot_ros2_codeserver | File "/usr/local/lib/web/backend/run.py", line 118, in main hadabot_ros2_codeserver | entrypoint() hadabot_ros2_codeserver | File "/usr/local/lib/web/backend/run.py", line 78, in run_server hadabot_ros2_codeserver | from vnc.app import app hadabot_ros2_codeserver | File "/usr/local/lib/web/backend/vnc/app.py", line 6, in hadabot_ros2_codeserver | from flask import ( hadabot_ros2_codeserver | File "/usr/local/lib/python3.8/dist-packages/flask/init.py", line 14, in hadabot_ros2_codeserver | from jinja2 import escape hadabot_ros2_codeserver | ImportError: cannot import name 'escape' from 'jinja2' (/home/hadabot/.local/lib/python3.8/site-packages/jinja2/init.py) hadabot_ros2_codeserver | 2024-08-18 00:55:56,268 INFO exited: web (exit status 1; not expected) hadabot_ros2_codeserver | 2024-08-18 00:55:59,277 INFO spawned: 'web' with pid 153 hadabot_ros2_codeserver | Traceback (most recent call last): hadabot_ros2_codeserver | File "/usr/local/lib/web/backend/run.py", line 122, in hadabot_ros2_codeserver | main() hadabot_ros2_codeserver | File "/usr/local/lib/web/backend/run.py", line 118, in main hadabot_ros2_codeserver | entrypoint() hadabot_ros2_codeserver | File "/usr/local/lib/web/backend/run.py", line 78, in run_server hadabot_ros2_codeserver | from vnc.app import app hadabot_ros2_codeserver | File "/usr/local/lib/web/backend/vnc/app.py", line 6, in hadabot_ros2_codeserver | from flask import ( hadabot_ros2_codeserver | File "/usr/local/lib/python3.8/dist-packages/flask/init.py", line 14, in hadabot_ros2_codeserver | from jinja2 import escape hadabot_ros2_codeserver | ImportError: cannot import name 'escape' from 'jinja2' (/home/hadabot/.local/lib/python3.8/site-packages/jinja2/init.py) hadabot_ros2_codeserver | 2024-08-18 00:55:59,765 INFO exited: web (exit status 1; not expected) hadabot_ros2_codeserver | 2024-08-18 00:56:00,767 INFO gave up: web entered FATAL state, too many start retries too quickly

I think its related to jinjia not using escape in versions latter than 1.something. Tried to install a earlier version which had escape but this didn't seem to fix everything and it still didn't blink.

prgrobots commented 3 weeks ago

Connected the pico in Thony..

image

prgrobots commented 3 weeks ago

I flashed the lattest versions of micropython, I couldn't download the suggested (I hope it didn't have any pre-compiled modules) image

Using Thonny I installed the missing micropython-logging, but the next error :

INFO:__main__:Welcome to Hadabot - www.hadabot.com WebREPL server started on http://192.168.0.142:8266/ Started webrepl in normal mode Traceback (most recent call last): File "main.py", line 1, in <module> File "uhadabot/uroslibpy/__init__.py", line 11, in <module> File "uhadabot/uroslibpy/ros.py", line 3, in <module> File "uhadabot/uroslibpy/uwebsockets/client.py", line 12, in <module> ImportError: no module named 'ussl' MicroPython v1.23.0 on 2024-06-02; Generic ESP32 module with ESP32 Type "help()" for more information.

I think needs to be installed before the firmware is flashed? https://stackoverflow.com/questions/74977591/how-can-i-get-the-ussl-module-for-my-micropython-project

Thonny can't install it.. image

prgrobots commented 3 weeks ago

flashed this version, initial errors gone... https://micropython.org/resources/firmware/ESP32_GENERIC-20210418-v1.15.bin

Now onto : INFO:main:Welcome to Hadabot - www.hadabot.com WebREPL daemon started on ws://192.168.0.142:8266 Started webrepl in normal mode Network connected. Config: ('192.168.0.142', '255.255.255.0', '192.168.0.1', '192.168.0.1') INFO:boot:Welcome to Hadabot - www.hadabot.com WebREPL daemon started on ws://192.168.0.142:8266 Started webrepl in normal mode ERROR:main:Init exception hit as_ap

prgrobots commented 3 weeks ago

Got it working!!

I am using an ESP32 for testing without chassis so had to: Comment out all OLED code in main on ESP32. - There is no OLED in the kit? Remove ["as_ap"] from line 267 in main.py. Line 180, comment out the range sensors - # self.rs_set = RangeSensorSet(ros)

I would have imagined that these items would have been able to be flagged as "onboard" or similar in the config?

Will start a PR at some point.

Hope this helps others :)