Create3 WaLI : Wall follower Looking for Intelligence #472
Replies: 22 comments 18 replies
-
This sounds awesome! I'm looking forward to seeing the final results :) |
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
So excited - found a good quality TTS engine( rhasspy/piper ), chose a voice (en_US-arctic-medium) , which makes a good WaLi voice. Both my current robots use espeak-ng voices, which are tough for my wife to understand. Hopefully this voice will be more understandable. |
Beta Was this translation helpful? Give feedback.
-
Started "off-board" wali_node to undock when recharged, sit idle, at 20% rotate to face dock, under 15% dock, and repeat. Findings: Thus with an estimated "non-moving" power budget:
Total Estimated "Playtime (100% to 14%) minimal movement":
I haven't characterized driving loads yet, so these times are absolute maximums. |
Beta Was this translation helpful? Give feedback.
-
Very cool - I look forward to following your progress. |
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
"Dress Rehearsal" Wali's 12v powered USB hub arrived today, so I did a dress rehearsal of all his planned parts and ran a full load Pi5 power test - NO PROBLEM! (Except playtime drops below 2 hours...) |
Beta Was this translation helpful? Give feedback.
-
The fun continues with testing the IR sensors - took a bunch of readings at a bunch of distances Created create3_ir_dist.dist_ir_reading() linear interpolation function. And then modified the Tufts U. (Kate Wujciak) example sub_ir.py to use the distance from ir_intensity value:
The distances are approximate because the sensor returns depend on the surface-reflectance (albedo), but they are in the ballpark for what I want to test - slam-toolbox mapping with resolution of 5cm (the default). I need to test further because the front_left sensor seems to be returning shorter distances than expected. I built the reading to distance table using the front_center_left (3 deg offset ccw) sensor. I need to see how much variation from sensor to sensor to determine if one function will suffice or will need dedicated function for each sensor. Next, I think, I have to use the distances to publish a /scan topic for feeding the slam-toolbox mapper. |
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
Create3 IR Sensor /scan Topic InvestigationMajor feeling of relief - I wanted to see if it is possible to use the Create3 IR "intensity" sensors as "rough" IR range sensors. There are all kinds of "BUT This" and "But That" reasons against this idea: primarily - Intensity varies with the surface IR reflectivity, and varies with the incidence angle. Also I found that each IR sensor has a significant different reading to distance equation. So after averaging three measurements for seven sensors at seven distances, I created my create3_ir_dist.dist_ir_reading(sensor,reading) function covering 15mm to 400mm from the bumper. Next I created an /ir_intensity topic (62 Hz) subscriber that publishes a 20 Hz /scan topic with the seven "rough" distances adjusted to be distance from the Create3 base_link at the approximate sensor angle (e.g. 65.3 degrees as 65 degrees). As a test, I drove "Create3-Wali" around a complex wall while running rviz2 with a long decay on the /scan and /odom topics. AND FOR THE SWEET RESULT:(My wife said "Wali painted a tree." Somehow that wasn't quite what I was hoping for...) Another Wali Scan Adventure: |
Beta Was this translation helpful? Give feedback.
-
Create3-WaLi Became Truly Autonomous TodayCreate3-WaLi became truly autonomous today. When he wakes up he starts being WaLi without my help - a service starts ROS 2 Humble Desktop in a Docker container and executes "ros2 run wali wali_node" - all when the Raspberry Pi 5 boots, which is when the Create3 powers on. He doesn't use much of his existing intelligence yet, but he knows when to get off his dock (battery > 99%), when to prepare for re-docking (battery < 20%), when (battery < 15%) and how to dock. He also keeps a log of major events like booting, undocking, docking, and "safety shutdowns":
Choosing the Raspberry Pi 5 is going to enable much more on-board processing, but at the start the fact that I have to run ROS 2 Humble in Docker really complicates the software architecture and configuration needed to start the Wali ROS 2 Humble wali_node. Everything takes a docker command. Want to open three terminals to try out your ROS creation? Run
And while you are in the Docker Terminal, only ROS 2 Humble commands, nano, and basic Ubuntu commands work. I have to exit the container for the PiOS stuff, and then usually forget to get back in for the ROS stuff. BUT IT IS WORKING! Create3-WaLi is alive (and thinking Wali thoughts from the moment he wakes up). |
Beta Was this translation helpful? Give feedback.
-
WaLi Learned To Take A Nap and Wake UpOne of the Raspberry Pi5 new features is an integrated real time clock with battery backup. This allows setting a wake up time in the RTC, then halting the Pi5 processor with the assurance it will power back up when needed to control the Create3. This 3W savings can shorten Create3 recharge times and could save about 30Wh per day... ok so it only saves a kilowatt (US$0.16) a month. I like to think of my robots as "alive" 24/7, and "playing" when off their dock. Humans are still considered alive when sleeping, so teaching WaLi to take a nap isn't actually inconsistent with being a 24/7 robot. I tested it. It works. The Pi5 powered down to show 0.000A during the nap, and then booted at the designated end of the nap. Booting the Pi5 launches the ROS 2 Humble docker container and starts the WaLi "ROS 2 brain" (wali_node.py) again. The Create3 does not have a "wake on alarm" feature, so WaLi cannot shutdown his Create3 while he naps. Since the house is dark at night, I really don't want WaLi wandering around in the dark. I probably will have Wali dock at midnight, nap on the dock till morning, then wake ready to play at 8AM. (That strategy will complicate my "life" logging...) |
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
Text-To-Speech Service Added To WaliROS (1) had a package audio_common that provided a TTS engine and TTS service node, but that package does not appear to have been ported to ROS 2 Humble... and I wanted to use the Piper TTS engine for very natural sounding voices, so I created a /say service. The say_node service logs all /say requests to wali_pi5/logs/say.log (to be with the life.log and odometer.log) and returns a boolean response.spoken True if spoken (or False if only logged due to "quiet time").
My other robots have used espeak-ng which allows a volume parameter, but Piper TTS does not have a volume parameter so I have to set volume using the ALSA mixer from the command line - cmds/set_vol_very_low.sh (10%) and cmds/set_vol_normal.sh (80%) but it is now working in Docker and in the PiOS outside of Docker. ROS 2 service call from CLI: (cmds/call_say_svc.sh "hello")
and outside of ROS/Docker: (cmds/say.sh "hello")
|
Beta Was this translation helpful? Give feedback.
-
Adventurous Wandering (Safely)I set up what I considered a "safe playground" for Wali - no furniture, no black objects (file cabinet, trash can, UPS, chair and table legs), no mirrors, no dead-end traps. After "exploring" the Create3_coverage action server for "Use only Create3 onboard sensors to safely wander" only to find Wali smashed against a cabinet, I attempted to diagram its complex state machine and transitions written in beautifully modular C++. I discovered it handled lots of special cases such as starting on the dock, and wandering toward the dock, protecting against falling off a cliff, (none of which are applicable to Wali's playground), but did not appear to use the IR intensity sensors to avoid bumping into walls. (At an "unsafe speed" without concern for objects mounted on top of the Create3.) Since my C++ skills are over 30 years rusty, I set out to write a "simple wander avoiding walls and recessed kick panels". I forgot that while ROS is a very simply described architecture of topics, services, actions implemented in ROS publisher/subscriber nodes connected by a node discovery / message delivery mechanism, writing a ROS node quickly becomes "not a simple program". Over the years I have played with many robot control mechanisms from simple stimulus/response "Braitenburg Vehicles" to "Parallel Processed Blackboard Rule-based", and to trained neural nets, but I usually end up with a "deterministic finite state machine" as my favored controller. (I'm eager to learn the ROS behavior tree package - eventually.) Leveraging my prior Create3 IR intensity sensor readings to distance estimation function, I created a "safely wander state machine" in Python. When I tried it out, it found the one "black hole" in the playground - a black kick panel under the dishwasher. A little white paper fix made the dishwasher visible again. My program indeed would now wander safely, but quickly fell into a rut following the same path over and over. By definition a "Finite State Machine" is the epitome of "nothing is random". With the addition of additional complexity, rotating for randomly chosen additional time in the wander_avoid state, and randomly choosing a slight left or right arc to the "wander_drive (straight)" state, Wali appears to safely explore his playground. I did not attempt to tune the randomness for efficiency, or even measure the area coverage per time. I let him wander for two hours, and it only decreased his "playtime" by a few minutes - so driving at 0.1 m/s appears to be "nearly free". That was totally unexpected before "wandering" with the Create3. |
Beta Was this translation helpful? Give feedback.
-
Oak-D-Lite Mounted On Wali - Investigation BeginsThe Oak-D-Lite RGB+Depth device is amazing - amazingly capable, amazingly versatile, and amazingly complex to wrap my head around. My device is from the Kickstarter campaign, and does not have an IMU built in like the current device, so one of the four ROS 2 demo programs does not work. Another of the ROS 2 demo programs, yolov4, does not work, although the non-ROS version of the program does work so I'm guessing the issue will come down to setting one of the million parameters correctly. My initial test of the ROS 2 wrapped mobilenet-ssd neural net, which has 21 object classes, is quite impressive with very high confidence scores when correctly recognizing people with no false positives seen yet. (I have seen a few false "cat" and "dog" detections - we have no pets but apparently chair legs can fool it.) This demo publishes 30Hz 300x300 pixel RGB /color/image and /color/mobilenet_detections topics, with nearly no load on the Raspberry Pi5. I've run the stereo depth demo and verified the depth image is available, so I will be ready to try RTABmap with that program soon. The Luxonis software support for the Oak cameras is impressive, which helps give me confidence in using the Oak-D-Lite camera with Create3-Wali. |
Beta Was this translation helpful? Give feedback.
-
Create3-WaLI Had A NightmareLast night at 3:30 AM my wife awoke me saying "WaLI is in distress." I could hear a roaring sound and went to investigate. Indeed WaLI was having a nightmare. He had pushed his dock along the wall, and was frantically spinning his wheels trying to dock as commanded by his wali_node.py control program. His light ring was flashing bright red so I knew he was feeling it was urgent he get on that dock. I lifted him away from the wall which invoked the Create3 "kidnapped" reflexes to stop the wheels spinning, and after restoring the dock to its proper position along the wall, I placed WaLI on the dock to have the green charging LED appear. Having run to his aid without my eyeglasses, I had some difficulty logging his "rescue." Later in the morning I checked his log to reveal the full nightmare:
Wali left two piles of rubber and a mark on the baseboard from his nightmare: AnalysisNightmare was a result of "Parking a Bicycle On WaLI's Dock" I was running an overnight test with the Oak-D-Lite camera doing the MobileNet Object Detection and had "given WaLI a bicycle to recognize" while he was on the dock (Wedging the target between WaLI and the Dock to hold it up): When Wali got off the dock, the bicycle fell onto the dock preventing WaLI from juicing up when he next needed. Lessons Learned
|
Beta Was this translation helpful? Give feedback.
-
Hello Slowrunner |
Beta Was this translation helpful? Give feedback.
-
Hello Slowrunner |
Beta Was this translation helpful? Give feedback.
-
Wife Demands WaLi Sleep Through The NightWhile I am not lacking for topics to investigate with WaLi, one "feature" has just had its priority boosted. Since implementing a "nap for x hours" feature available with having a Raspberry Pi5 real-time-clock (RTC) as WaLi's compute board, I have generally been manually commanding WaLi to nap through the night. I prefer to leave him operating so sometimes I "forget to put him to sleep". My wife just boosted the case for automating WaLi's sleep schedule. Time to teach WaLi to "watch the clock" and "decide when to go to sleep" He only sleeps the Raspberry Pi5, not the Create3, so WaLi needs to be sure to sleep on the dock. |
Beta Was this translation helpful? Give feedback.
-
Going off the radar for a bit |
Beta Was this translation helpful? Give feedback.
-
Hi @slowrunner |
Beta Was this translation helpful? Give feedback.
-
Jump to latest update
Create3 WaLi BLOG
Terrible Turmoil Totally Too Talkative (in my head)
After 7 years of working with my two GoPiGo3 robots, and that great community, I am way too overly excited to be building a new robot:
Create3 WaLi: Wall follower Looking for Intelligence
There is a heavy feeling of abandonment of my dreams for my current robots, Carl and ROSbot HumbleDave.
I participated in testing the beta (ROS 2 Galactic) Create3 simulation in October 2021 (only the software...was not chosen for the hardware beta), and have been contemplating this major shift for two years.
No robot is perfect, but I'm ready to see what I can accomplish in the next seven years with WaLi.
Plan:
Beta Was this translation helpful? Give feedback.
All reactions