Elliot Kantor's Notebook - cps-vip/cps-cosimulation-env GitHub Wiki
- January 9, 2025
- First class period, learned about project overview and power grid
-
January 16, 2025 Chose ROS/HELICS subteam, spoke to Will and Sam
- Discussed various architectures of robots and what problem we’re solving
- Chose to go with robot that explores substation compound on “foot” instead of a transmission line traversal robot
- Too difficult to deal with 100+ kV for now
- Need to choose drivetrain, begin first order calcs, and start a design and mockup
- Gravel outdoors → thick rubber tires, possibly inflatable but ideally not
- Differential drive is simplest
- 6 wheel rocker-bogie system robust but too complicated for now
- 2WD w/ caster wheels is easiest; 4WD (coupled left/right wheels) is more robust but causes slip
- Tank treads too difficult to source
- Balancing robot not feasible for small bumps
- Think about payload
- Need consistent mechanical coupling, electrical, etc. bus for future payloads
- Probably bolt circle, 12-24V cable, outdoor multipin data connection
- Robotic arm potentially in future semesters but need to justify
- Gimbaled camera for operator use and wide view lidar for obstacle detection. Potentially sensor fusion with camera and SLAM
- Integration with ROS
- Ideally we can connect robot’s rpi to ROS and get navigation working in a new environment and eventually close loop
- Need to research previous work
- Already read last year’s paper via discord
- Look into any conceptual work and considerations for this robot
-
January 17, 2025 First subteam meeting
- Discussed team structure and introduced new members
- Planned kickoff presentation and created slides. Copied old content
- Worked with Sabina to create Gantt chart, requirements, project overview, etc. Gantt chart shown here.
-
January 19, 2025 ROS learning
- Read ROS2 humble documentation and read through beginner tutorials
- Installed ROS on PC using docker and a VNC server for GUI
-
January 21, 2025 Turtlebot and Calculations
- Set up turtlebot3 environment on PC at home and installed Ubuntu 22.04 on raspberry pi
- Still troubleshooting apt-install issues on pi but will run quickstart SLAM and Nav2 once operational
- Nearly finished with first-order calculations on motor sizing. Found suspiciously cheap $15 motors on Amazon and beefy 50A motor controllers, but still fine-tuning the assumptions
- Next task is beginning CAD work. Thinking of 3D printed pieces connected with aluminum extrusion and potentially plywood as prototype paneling material. Thinking of connecting motors to wheels with tensioned belts instead of directly driving the front/rear wheels as belts allow gear ratio adjustment and can preserve motors of a wheel becomes stuck etc.
-
January 23, 2025 Kickoff presentation
- Presented robot design slides
- Spoke to Will about robot design, general plan and timeline
- Started teaching Sabina some CAD
- Wrapped up motor calculations for now
-
January 24, 2025 Begin CAD
- Taught Sabina more CAD and gave resources for learning Onshape (tootalltoby youtube playlist)
- Creating rough blockout of robot, starting with wood(?) base to attach mounts onto
- Need to consider drivetrain and belt tensioning mechanisms
- Making mostly parametric but starting rough for now and refining soon
-
Started motor mount
- Chose 12V motor (seen in HBOM)
- Sketched out motor mount dimensions, assigned to Sabina to prototype some 3D printed mounts to go on a 1/4" - 1/2" wooden board
- Planning to design belt system
- Need to find encoder and attach direct to a wheel on each side (left/right)
-
January 28, 2025 Start motor mount
- Gave Sabina crash course on Onshape and how to plan out and design a basic 12V motor mount
- Researched keyed shafts and ANSI key specs on McMaster for BOM
- Modeled in simple D shaft coupled belt pulley for motor. Will update with keyed model and put on bearing-supported keyed shaft to allow multiple pulleys driven by single motor
- Started assembly for robot design. Scale can change with belt size but working on motor mounts that we can screw into wooden plate
-
January 29, 2025 Motor-side pulley system
- Upgraded to dual pulley. Need to modify to be swappable with machined McMaster pulley
- Created D shaft to shaft converter with captive nut set screw implementation
- Added bearing for shaft support and created bearing mount to be mounted to base
-
January 30, 2025. Wheel and pulley
- Created basic wheel and printable flange coupler
- Modeled OTS pulley system
- Learned how to use Onshape configurations to change properties as I add new things into the assembly
- Useful for trying out different configurations of 40 vs 60 tooth pulleys. I can model both and toggle a dropdown to see the difference
- Created basic wheel and printable flange coupler
-
February 2, 2025
- Created new bearing mount for the driven side of the pulley (with the wheel on it)
- Discussed mounting solution with Sabina. She will design plates that can mount the SBC, microcontroller, etc and use standoffs and captive nuts
- Created new bearing mount for the driven side of the pulley (with the wheel on it)
-
February 3, 2025. Motor controller details
- Found cheap motor drivers for Sabina to order through capstone.
- They will likely break but will get the motors working and controllable through the Teensy 4.1 (also on the order sheet)
- Still need to couple the encoder to the driven shaft, create an encoder mount, add fasteners everywhere, and add a system for creating a wooden frame around the robot and a mounting point on top for payloads
-
February 4, 2025. Encoder and wheel
- Added WIP encoder and encoder mount. WIP because I cannot find a spec sheet online for this, so I will wait until I have one and can measure it with calipers. The rough size is correct though and works for layout purposes
- Updated the simple wheel with a PLA core and a captive nut setscrew setup and an outer tire made of TPU
- Outer tire has 0 tolerance to conform tightly to the PLA core. Overhangs limited to 45 degrees to 3D print without frustrating supports, at the expense of slightly less secure attachment between core and tire (but glue could help).
- Outer tire has 0 tolerance to conform tightly to the PLA core. Overhangs limited to 45 degrees to 3D print without frustrating supports, at the expense of slightly less secure attachment between core and tire (but glue could help).
- Need to verify belt lengths, check for collisions with wiring etc, and mount electronics. Also need to add wheels at the front to be either free spin or driven, depending on hardware we order for now.
-
February 5, 2025
- Arranged all components on the robot to create a representative BOM
- Verified belt lengths using a sketch and driven dimensions. This lets me choose the distance between belts and calculate the perimeter of the shape (aka the length of the belt)
- Found that the belts included with the 2pc belt/pulley system are very short, so found cheap larger (500mm) belts and added to HBOM. This gives more flexibility for robot size, and we can order larger ones to parametrically adjust the robot size.
- Added grooves to TPU tires for better traction
- February 11, 2025
- Added side walls to robot. I will use 1/4" MDF or plywood for the walls and 1/4"-1/2" wood for the base and top
- Will need to punch a hole through the top surface and route wires for lidar etc
-
February 12, 2025
- Met with Sabina to discuss power distribution boards
- We agreed to do whatever possible to get to a prototype ASAP, meaning we will prefer COTS power distribution boards (PDBs)
- Taught Sabina how assemblies work for her electronics stack subassembly
- Discussed common panels for electronics stack. Turtlebots use an injection molded common part with space for captive nuts at a fixed pitch grid. We will do something similar and make sure the design is print in place
- Another consideration is to make sure that stuff like raspberry pi, etc., can mount cleanly to this board. We're thinking of ideally designing the grid board to be compatible with raspberry pi hole locations, but small adapters can be made to convert from arbitrary hole spacing to our standardized grid of holes. We understand that the point of 3d printing is to be able to customize this stuff, but it's much faster to iterate through a few small adapter pieces than reprint the three-or-so common plates we need for the electronics stack
-
February 13, 2025: HBOM
- Slapped a top onto the robot (it's very cute now) but need to punch out holes and add 3d printed mounting system for future payloads (lidar, robot arm, cameras, etc)
- Worked with Sabina to semi-finalize the HBOM and make sure we see the whole picture
- Only remaining parts are PDB. It is difficult to find an OTS solution perfect for us, but here's what we need:
- Power output to 12V and 5V (or 3.3V or both)
- High current capacity for motor controllers
- Minimal noise from regulators. We may choose switching regulators instead of linear for performance, but add capacitors or something to reduce noise
- MOSFET or relay switching system to sequence startup of peripherals and raspberry pi. Probably teensy and peripherals first, then raspberry pi to make sure we don't brown out the pi on peripheral startup, especially as the power load increases in the future
- I really would love to make a PCB but that takes a lot of time. If we can find open-source PCB designs online to order from somewhere, that would be best, and maybe we could slap together a bunch of OTS components (though it will be less clean, sub-optimal, and harder to reproduce in the future)
- Further updated HBOM to include practically everything we need. Total comes out to ~$500 (probably cheaper than a turtlebot and potentially more versatile). Including raspberry pi and plywood in the costs! We can shave off $150 by reusing turtlebot pi and lidar
- Future work:
- Sabina will find PDB system
- Sabina will do powerup sequence and figure out ROS2/teensy integration for talking with the motor controller, encoder, etc
- Verify design components like belts and everything are sized correctly
- Punch out holes in the wood panels and have a plan for assembling and removing sides/top easily (ideally not butt-joint wood screws as they can delaminate plywood)
- Get components ordered and parts printed
- Add fasteners and plan for assembling everything
- Add a top universal mount for lidar and add lidar to subassembly
- Include location for batteries and easy way to remove them
- Re: batteries: get battery charging setup (though it can be plugged into the wall for now)
- Phew.
-
February 19, 2025
- Familiarized myself with microROS system to integrate ROS2 with our future teensy 4.1 (which I don't have yet)
- I heavily referenced this article https://manzurmurshid.medium.com/how-to-connect-teensy-3-2-with-micro-ros-and-ros2-foxy-6c8f99c9b66a
- In ROS1 you can use the presumably lightweight ROSSERIAL package to read and write through the serial port of the ROS computer's USB port. Handy for microcontroller stuff
- In ROS2 afaik there's no ROSSERIAL package that's maintained as well. MicroROS steps in to fix that, but it does NOT work with Arduino Unos (which I do have). It does work with RP2040 boards, so maybe I can hack a little devkit together on a breadboard to figure some stuff out between a raspberry pi and the microcontroller
- As I discussed with Sabina, we will have ROS2 handle all the high-level robot stuff (where to go, which motors to turn on, etc) and the microcontroller handles everything like: what PWM to send to the motors? what's the battery voltage? etc.
- Once I get a devkit set up I can also follow these (https://micro.ros.org/docs/tutorials/core/first_application_linux/) official instructions to get everything working, and I shouldn't have to compile firmware or anything since RP2040 and Teensy 4.1's are pretty standard and officially supported
-
February 20, 2025
- Added a sorta-universal mount to the top panel of the robot and Will LOVES it. I designed it thinking about mounting a robotic arm with a large circular base, but with a smaller circular bolt hold inside that you could use if your robot arm is smaller or something. Ultimately this isn't too important as we can just drill more holes in the wooden top if needed
- Discussed we should not regulate the motor voltage and just get batteries that are 12V etc and make sure that works
-
February 24, 2025
- Scrounged around my closet and found a few rp2040s lying around (weird flex) and breadboarded it up to test integration of microROS and ROS
- Created a ROS instance on my PC with docker
- Followed linux installation instructions here: https://micro.ros.org/docs/tutorials/core/first_application_linux/
- Got stuck because the agent is not creating a ros publisher correctly. I'm supposed to see stuff published to a topic but the topic does not exist.
- Took a detour and started watching a video version by this youtube guy who explains it very well and is even using an rp2040 like me https://www.youtube.com/watch?v=MBKAZ_2P1Sk
- I will try to recreate his steps and then adapt the C code and learn to read in analog details like from an encoder and write pwm through the rp2040 and eventually teensy to control the motor and take encoder info back
-
February 28, 2025 Presentation
-
March 4, 2025
- Pair programmed with Sabina to debug ping/pong example not working
- Solution: do not export a ROS_DOMAIN_ID in your terminal before doing this stuff. I had done the export command in my bashrc per the tutorial for getting a turtlebot working, but this prevents us from seeing ros topics in the command line
- This may become an issue in the future if we need to run the microros agent at the same time as a robot which requires a ros domain id but we will figure it out then I suppose
- Links
-
March 6, 2025
- Reviewed feedback for VIP performance and know to maintain proper frequency of entries and add to-do lists
To-Do list
-
Keep a to-do list
-
March 7, 2025
- Watched a useful video on microROS and platformIO integration
- Platformio is a handy tool for developing stuff similar to the arduino IDE but more robust for a greater variety of microcontrollers. Basically write it once and it can run on esp32, rp2040, teensy, arduino, etc.
- Platformio integration with microros is huge because it means I can prototype stuff on an rp2040 and then use it with a teensy 4.1. Also c++ is easier than C (although there are ways around using C even without platformio)
- Official platformio instructions: https://github.com/micro-ROS/micro_ros_platformio
- Useful video I watched: https://www.youtube.com/watch?v=Nf7HP9y6Ovo
- Other useful video (no platformio but uses C++ workaround): https://www.youtube.com/watch?v=MBKAZ_2P1Sk&t=444s
To-Do 3/7/25
-
Keep a to-do list
-
Get platformio demo working on rp2040 at my desk
-
Write custom logic to read and write encoder/motor and publish/subscribe to topic
-
Add startup logic to raspberry pi or other computer to start microros and ros2 etc and push to a repo
-
March 9, 2025
- Installed platformio project on my PC following the steps in the repo here https://github.com/micro-ROS/micro_ros_platformio
- My desktop PC is in my apartment and apartment wifi is down so development is slow. Should be fixed soon this week and then main todo is
- Upload platformio example code to rp2040 on my desktop PC
- Get ping/pong example running with serial connection between ROS2 Humble on my PC and the rp2040 in the breadboard
To-do
-
Update bearings for correct OD
-
Update battery order to be 3S, not 6S
-
Get platformio working
-
March 24, 2025
- Tried following instructions for rp2040 but getting error 'ament_cmake clone failed: too many arguments'
- I think this comes from too many spaces in the git clone command and there's no easy fix for this. All the github issues are still open
- I will try running the platformio code in a docker container to get it to work per wiki here https://github.com/hippo5329/micro_ros_arduino_examples_platformio/wiki#development-on-windows-or-linux-desktop-and-use-vscode-remote-development-ssh-to-rpi45
-
March 25, 2025
- Fixed CAD to use 19mm bearings instead of 14mm
- Updated bearing mount and driven bearing mounts and ensured assembly still works
- May need to incorporate some way to keep the bearings in their mount during small lateral jostles
- Considering looking at 18650 batteries for the robot but it may not make sense for capacity and balancing reasons
To-do
-
Update bearings for correct OD
-
Update battery order to be 3S, not 6S
-
Investigate 18650 batteries
-
Get platformio working
-
March 27, 2025
- Updated battery assumptions to only use 30mins time instead of 2 hrs -> 2500mah capacity needed, 12V
- Investigated 18650 batteries ($3-7) but we need to load balance and have 3 of them. More convenient to get a pack if possible
- Found a listing $21 for the right battery with included charger on amazon https://www.amazon.com/Seasider-2600mAh-Rechargeable-Battery-Replacement/dp/B0D3YW51WJ/ref=sr_1_3?dib=eyJ2IjoiMSJ9.Y0cj0xKV59onUMlJ733X26bViOUtq8mRYpxbknVebFz6mkaJxFrLA5MtpnsvsCUMCUwS7mZ0GTOkq3FMrWq7yaJv22TxfRMJlMM-dIuNS548doQYqM97cC9ObflqHHdDFkOgwViBgsxfE7i7lSprILHQoODQNNpK-5GuuTbqdUJGotctVC4XM-hfpbbFgQbkwxwlWFS29H6K8uxDWiqJiSJ2M5fuok2pHgCsrUNGUQKEFnVY9WX3ZGmhBnUn9sIBcA9AKaBeQLcGsHlusaYFlOK_HcsraBTsLru3RMDvoSITAgzCCslb9XmWh9xeH_jUyuPnW1BcIy6wD-R43DeWv3x5612ZPHHDEJH-GpPQFfEp2IzmYdmCxsDWa9x0ksUty9vxokhiDyJiXwvAhfJSThb6R6GVQuC3bRsn8G8ezdCG9RDH4IhmIaSArRe5XbTH.nSdgNqAS84fr8wo7GXrQhRSrcGqmG7QytUA9kNj-IFY&dib_tag=se&keywords=12v%2B2500mah%2Bbattery&qid=1743111390&sr=8-3&th=1
- Connected vscode to docker container to develop microros code in an environment where it can build with platformio
To-do
-
Update bearings for correct OD
-
Update battery order to be 3S, not 6S
-
Investigate 18650 batteries
-
Get platformio working
-
Update cad to include space for battery and charging port
-
March 30, 2025
- Met with Sabina and decided on the following action items for me
- Decided to go forward with a Gazebo simulation of the robot so Sabina can get the robot's ROS code working
- We will also get nav2 running in Gazebo. We would get the instructions from the robot navigation subteam but it seems they don't have theirs working at this point.
To-do
- Get platformio working (works in a docker container)
- Update cad to include space for battery and charging port
- Make bearing mounts have embedded bearings to make sure they can't pop out during use
- Start printing components and maybe screw down to a board or something
- April 1, 2025
- Met with Sabina to discuss actual steps to simulate the robot
- Asking Joseph to make robot in gazebo and use nav2 and slam toolbox to use lidar to sense the world, reference a nominal map, then pathfind to the destination
- Updated CAD to embed bearings inside while printing (and still not need supports). Before:
After:

To-do
-
Update cad to include space for battery and charging port
-
Make bearing mounts have embedded bearings to make sure they can't pop out during use
-
Start printing components and maybe screw down to a board or something
-
Write experimental code to pass stuff through teensy and see if it compiles lol
-
Transition to jazzy and make sure everything builds
-
April 2, 2025
- Spoke with Sabina about next steps and starting to 3D print stuff once we get things delivered
- Now that most cad is done (until we have more parts in front of us)
To-do
-
Transition to jazzy and make sure everything builds (platformio)
-
Start printing components and maybe screw down to a board or something
-
Make a container from Joseph's image and try to run nav2 and slam
-
Follow ros tutorials to learn to make a robot from scratch and have it localize itself in nav2, maybe navigation
-
April 3, 2025
- Need to get bearings to embed into 3d prints in my apartment or something
- Maybe build a custom 18650 battery pack? Seems a bit hard but could give good performance and cheap and probably fun to spot weld stuff. Would need to characterize discharge curves though
- Spoke about lidar implementation
- Will need to write motor controller and how to get back onto trajectory
- Spoke to navigation team
- Tasked them with taking the tutorial for nav2 with the turtlebot and replacing the robot with a box with 4 wheels and bonus points if it can find its way to a waypoint
- They didn't have anything for me to do but I told them the general dimensions of the robot and that it should just be any generic lidar
- I want to follow nav2 and ros2 tutorials to spin up a jazzy gazebo server on my PC and have it drive around
To-do
-
Transition to jazzy and make sure everything builds (platformio)
-
Start printing components and maybe screw down to a board or something
-
Make a container from Joseph's image and try to run nav2 and slam
-
Follow ros tutorials to learn to make a robot from scratch and have it localize itself in nav2, maybe navigation
-
Learn how to define a robot's size and stuff
-
Watch at least 2 youtube videos before Monday detailing high-level ros stuff and understand the context of inputs/outputs to nav2, how we can interface through python, and what further considerations we need for robot integration that I'm ignorant of currently.
-
April 5, 2025
- Started 3D printing parts at the invention studio. They're low on TPU but printing one wheel to test the design
- Trying to compile microros project with platformio on my mac, just following instructions here https://github.com/micro-ROS/micro_ros_platformio
- Need to use the brew install command to get it to build on mac
- Also did
brew install cmakeandbrew install binutils
- April 7, 2025
- Updated the ordering to reduce the stuff ordered through Amazon
- Need 2x https://www.adafruit.com/product/3190
- New battery (x1) https://hobbyking.com/en_us/turnigy-rapid-6000mah-3s-11-1v-100c-lipo-battery-pack-w-xt60-connector.html
- Battery to controllers (x1) https://hobbyking.com/en_us/genuine-xt60-female-connector-w-10cm-12awg-silicone-wire-5pcs.html
- Battery connector splitter (x1) https://hobbyking.com/en_us/xt60-harness-for-2-packs-in-parallel-1pc-2.html
- Battery charger (x1) https://www.getfpv.com/isdt-pd60-60w-6a-1-4s-usb-c-input-battery-charger.html?gc_id=21805212384&g_special_campaign=true&gad_source=1&gclid=Cj0KCQjw782_BhDjARIsABTv_JA-i1qqLeX7uocrc-UoRKHOan0r7Agr7NAicR6BNmf42NvB08BQjIgaAo8EEALw_wcB
- Equivalent amazon listing: https://www.amazon.com/dp/B08F7C1T2T/
-
Getting PLA filament, different motor controllers, and a series of battery connectors to allow two motor controllers to be connected to a single lipo battery. And also got a battery charger
-
April 8, 2025
- Watched video on how Gazebo simulations work https://www.youtube.com/watch?v=laWn7_cj434&list=PLunhqkrRNRhYYCaSTVP-qJnyUPkTxJnBt&index=8
- Learned about coordinate transforms in ROS and how to define a robot's state in a URDF file
-
April 10, 2025
- Team meeting and met up with navigation team
- Nav team has a demo working of driving a robot around and visualizing the lidar in RViz. They also have a substation model but it's too large and laggy to do much inside for now
-
April 11, 2025
- Learned how to implement lidar in ROS
- ROS just takes in a 3D point cloud stream which is standardized across a variety of manufacturers, so as long as it outputs that format we can deal with it in RViz and Nav2
- Learned how to implement lidar in ROS
To-do
- Transition to jazzy and make sure everything builds (platformio)
- Start printing components and maybe screw down to a board or something
- Make a container from Joseph's image and try to run nav2 and slam
- Follow ros tutorials to learn to make a robot from scratch and have it localize itself in nav2, maybe navigation
- Learn how to define a robot's size and stuff
- Watch at least 2 youtube videos before Monday detailing high-level ros stuff and understand the context of inputs/outputs to nav2, how we can interface through python, and what further considerations we need for robot integration that I'm ignorant of currently.
- Give more links to ordering people for batteries on amazon??
-
April 14, 2025
- Attempted to get code to compile in platformio for microros jazzy but it's a bit harder than plug and play
- Some of the code is unfortunately specific to the platform, such as RP2040 or ESP32 etc., so it is not as simple as writing arduino code.
- I'll need to learn whatever API to use for the teensy 4.1 that we have
-
April 15, 2025
- Updated the presentation to include notes on the new microros additions and CAD changes
- Printed a few more TPU tires, waiting on more printer availability to print the slightly-updated new tire cores
-
April 17, 2025
- Final presentation and I also watched the undergraduate presentations at the exhibition hall
- Feedback that we have all the pieces we need now and just need to link everything together. Next semester we will get the robot built, get a full simulation of a simplified power grid and the actual robot driving around using nav2
- Working microros code should be straightforward once I look through the documentation for the specific platform a bit more
To-do
-
Update microros code for teensy 4.1
-
Print more wheels with updated design
-
Receive all parts and bearings and print remaining parts
-
Update purchase links for batteries and required connectors
-
April 19, 2025
- Sent Sabina updated purchasing links for batteries and connectors
- Got a 2-pack of 2200 mAh batteries and enough connectors to either run one motor on each (with one battery dedicated to the electronics too) or single battery running everything
- We may want to get a battery charger and circuitry to sound an alarm if the batteries are running low and safely shut down the robot before that happens. Maybe even get voltage level read into the robot so we can monitor it
To-do
- Update microros code for teensy 4.1
- Print more wheels with updated design
- Receive all parts and bearings and print remaining parts
- Update purchase links for batteries and required connectors
- Get battery charger and maybe supporting circuits for low battery shutdown and analog read into the teensy