joepasquariello
Well-known member
Can you say a little about the application, and why a T4 for each of those functions? Curious.
Thanks, that's interesting. It's not clear to me what Rust tools you are using. Have you created your own development environment? What was your starting point?ArduPilot alone: standard flight controller stack.
ArduPilot + Snow Owl Companion: standard flight controller stack plus an external AI shadow brain (T41) watching, learning, comparing, and preparing for supervised autonomy (MAVlink injection).
There isn’t really anything unique or custom about my development environment. I’m mostly using a normal Rust embedded workflow: cargo, rustup, the ARM embedded target, and the existing Teensy / i.MX RT Rust crates where they fit.Thanks, that's interesting. It's not clear to me what Rust tools you are using. Have you created your own development environment? What was your starting point?
I looked at some of your code on GitHub. I am impressed at what you have accomplished.Quick progress update on a Teensy 4.0 DroneCAN node experiment written in close-to-bare-metal Rust.
The node now shows up in the DroneCAN GUI, responds to GetNodeInfo, publishes NodeStatus, and exposes parameters through uavcan.protocol.param.GetSet. The screenshots show the node being discovered as node 42 and the GUI reading/editing parameters.
One of the trickier parts was persistent parameter storage. Since this is not running on top of Arduino, Teensyduino EEPROM helpers, or a filesystem-style abstraction, saving configuration values meant figuring out a small flash-backed storage path directly from Rust. That is now working well enough for the node parameters to survive reset/power cycling.
Current milestone:
Teensy 4.0
Rust firmware
USB/SLCAN DroneCAN GUI connection
NodeStatus + GetNodeInfo
Parameter enumeration/read/write
Flash-backed persistent parameter storage
This is still an experiment, but it is a useful checkpoint toward a Teensy-based DroneCAN peripheral node.
View attachment 39564View attachment 39565View attachment 39566View attachment 39567
View attachment 39563
Access to hardware registers looks cleaner than in C++.
Thanks Bill, that means a lot.I looked at some of your code on GitHub. I am impressed at what you have accomplished.
Access to hardware registers looks cleaner than in C++.
I am just learning rust. I started trying to read documents and doing simple examples. This didn't work for me so I switched to trying to implement low level access to an SD card using async DMA SPI and Embassy.
This was really painful but it forced me to learn what I needed. I have managed to init an SD and read/write blocks.
Looks like it will be about 10-20 times faster than crates like embedded_sdmmc which use blocking SPI. I get about 3 MB/sec with the Pico 2 I am using.