{"id":11044,"date":"2025-09-29T21:27:47","date_gmt":"2025-09-29T20:27:47","guid":{"rendered":"https:\/\/dronesonen.usn.no\/?p=11044"},"modified":"2025-11-07T12:40:37","modified_gmt":"2025-11-07T11:40:37","slug":"minimuck-week-6","status":"publish","type":"post","link":"https:\/\/dronesonen.usn.no\/?p=11044","title":{"rendered":"MiniMuck \u2013 Week 6"},"content":{"rendered":"\n<p class=\"has-text-align-center\">Hello W\u00f8rld!<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">Leon<\/h2>\n\n\n\n<p>This week I have focused on the controller part of the control stack. I have worked on implementing the Ackermann steering controller with the rest of the stack, then we had to rescope since we didn\u2019t have a mechanical engineer anymore. After the rescoping, I implemented a differential drive controller instead of the Ackermann steering controller. I got some errors and couldn\u2019t get it working, so after debugging for a while, I started looking into some camera functionality.<\/p>\n\n\n\n<p>The first thing I looked in to was implementing the RPI camera module 3, with the RPI. I quickly found out that like a lot of other RPI devices, the camera wasn\u2019t straight forward to implement with Ubuntu 24.04.<\/p>\n\n\n\n<p>I tried several different methods, following different tips, git repos and YouTube tutorials, however nothing was working. All methods used some library or package that didn\u2019t work or was based on building libcamera from source which I couldn\u2019t get working either, I did some more research and found that using a webcam or other USB camera, may be a good option. I\u2019ll try to get my hands on a camera like that and look more into it next week.<\/p>\n\n\n\n<p>To see if it was just the combo of ubuntu 24.04 and raspberry pi 5 that was making everything hard. First, I tested the RPI camera module 3, and it worked with one command. Then I moved on to setting up docker and a ROS 2 container. This quickly became a nice experience because everything worked on the first try. Next step now is to try the ros2 control setup in the docker container on the pi with the raspberry pi OS on it.<\/p>\n\n\n\n<p><a href=\"https:\/\/gitlab.com\/mini-muck\/mm_software_2025\/-\/tree\/control_branch?ref_type=heads\">https:\/\/gitlab.com\/mini-muck\/mm_software_2025\/-\/tree\/control_branch?ref_type=heads<\/a><\/p>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">Herman<\/h2>\n\n\n\n<p>This week has been filled with both mechanical, electrical and some software tasks. Initially, the plan was to test and verify power supply through GPIO on the Raspberry Pi as the finishing touch of the Computation and Perception Module. This ended up taking way more time then expected. The Pi refused to power on, but with some research together with Ask, we found that the Raspberry Pi 5s USB-C Power Management IC (PMIC) would inhibit a boot unless a 5A power supply was negotiated on the CC pins. By adding the line &#8220;<code>usb_max_current_enable=1<\/code>&#8221; to the config.txt, the Pi now skips this check and continues booting. The relief lasted for about 2 seconds when the Pi shut down again. At this point we suspected electrical issues. We would see current ramping up on the power supply monitor before a sudden shutdown, suggesting behaviour connected to high currents. By measuring the test wires, we found them to have a total of 0.4 Ohms resistance resulting in an astronomical voltage drop across the cable. With a properly dimensioned cable using the formula below, with resistance lower then measurable with our multimeter, we were now able to test sucessfully, and reminded of the importance of proper wiring.<\/p>\n\n\n\n<p class=\"has-text-align-center\"><a href=\"https:\/\/www.rapidtables.com\/calc\/wire\/voltage-drop-calculator.html\">Voltage Drop Calculator<\/a> (without temperature coefficient)<\/p>\n\n\n\n<p class=\"has-text-align-center\"><em>V<sub>drop<\/sub><\/em><sub>&nbsp;(V)<\/sub>&nbsp;=&nbsp;<em>I<sub>wire<\/sub><\/em><sub>&nbsp;(A)<\/sub>&nbsp;\u00d7 (2 \u00d7&nbsp;<em>L<\/em><sub>(m)<\/sub>&nbsp;\u00d7&nbsp;<em>R<sub>wire<\/sub><\/em><sub>(\u03a9\/km)<\/sub>&nbsp;\/ 1000<sub>(m\/km)<\/sub>)<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"534\" height=\"516\" data-id=\"11046\" src=\"https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2025\/09\/image-102.png\" alt=\"\" class=\"wp-image-11046\" style=\"width:314px;height:auto\" srcset=\"https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2025\/09\/image-102.png 534w, https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2025\/09\/image-102-300x290.png 300w\" sizes=\"auto, (max-width: 534px) 100vw, 534px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"975\" height=\"544\" data-id=\"11048\" src=\"https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2025\/09\/image-104.png\" alt=\"\" class=\"wp-image-11048\" style=\"aspect-ratio:4\/3;object-fit:cover\" srcset=\"https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2025\/09\/image-104.png 975w, https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2025\/09\/image-104-300x167.png 300w, https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2025\/09\/image-104-768x429.png 768w\" sizes=\"auto, (max-width: 975px) 100vw, 975px\" \/><\/figure>\n<\/figure>\n\n\n\n<p class=\"has-text-align-left\">After this, the remainder of the Monday was used researching the specifications and functionalities of our newly acquired servos (<a href=\"https:\/\/emanual.robotis.com\/docs\/en\/reference\/dxl-selection-guide\/\">DYNAMIXEL XM430<\/a>) and microcontroller (<a href=\"https:\/\/emanual.robotis.com\/docs\/en\/parts\/controller\/opencm904\/\">OpenCM 9.04<\/a>) enabling us to lift the entire robot with only servos and control the servos with an Arduino compatible microcontroller.<\/p>\n\n\n\n<p>At this point we had to rescope due to changes in our group. We decided to continue building the differential drive car to ensure the LIDAR and autonomous driving development could continue with a drivable platform. By using the kit with a custom mounting plate and some simple 3D structures holding the electronics together, we can build a platform to be upgraded with a new chassis as the project continues. By using the Arduino as a motor controller, we facilitate the addition of servos and implementation of the Dynamixel servos at a later point with the same UART interface. For this new car, the electrical structure is shown below.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"447\" src=\"https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2025\/09\/image-106-1024x447.png\" alt=\"\" class=\"wp-image-11050\" srcset=\"https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2025\/09\/image-106-1024x447.png 1024w, https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2025\/09\/image-106-300x131.png 300w, https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2025\/09\/image-106-768x335.png 768w, https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2025\/09\/image-106-1536x671.png 1536w, https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2025\/09\/image-106-2048x894.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Differential Drive Test Vehicle Archictecture<\/figcaption><\/figure>\n\n\n\n<p>In the absence of a mechanical engineer, I decided to work on a CAD design for the car. I downloaded all the electronics, motors and wheels from <a href=\"https:\/\/grabcad.com\/\">GrabCAD<\/a>, and designed brackets for mounting the electronics using Autodesk Fusion Automated Modelling to save time, where the faces are selected and a structure is generated by the computer to be space efficient while avoiding obstacles. <\/p>\n\n\n\n<p>On Sunday, I laser cut the mounting plate and sent the 3D models to Ask for printing. We partially assembled the car this evening, which is good since Ask needs the hardware available on Monday to develop on.<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"480\" height=\"392\" data-id=\"11052\" src=\"https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2025\/09\/image-108.png\" alt=\"\" class=\"wp-image-11052\" srcset=\"https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2025\/09\/image-108.png 480w, https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2025\/09\/image-108-300x245.png 300w\" sizes=\"auto, (max-width: 480px) 100vw, 480px\" \/><figcaption class=\"wp-element-caption\">Complete Assembly Left<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"449\" height=\"390\" data-id=\"11051\" src=\"https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2025\/09\/image-107.png\" alt=\"\" class=\"wp-image-11051\" srcset=\"https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2025\/09\/image-107.png 449w, https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2025\/09\/image-107-300x261.png 300w\" sizes=\"auto, (max-width: 449px) 100vw, 449px\" \/><figcaption class=\"wp-element-caption\">Complete Assembly Right<\/figcaption><\/figure>\n<\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"449\" height=\"357\" src=\"https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2025\/09\/image-109.png\" alt=\"\" class=\"wp-image-11053\" style=\"width:319px;height:auto\" srcset=\"https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2025\/09\/image-109.png 449w, https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2025\/09\/image-109-300x239.png 300w\" sizes=\"auto, (max-width: 449px) 100vw, 449px\" \/><figcaption class=\"wp-element-caption\">3D prints and lasercut plate<\/figcaption><\/figure>\n\n\n\n<p>During the next week, I will be working with the others to prepare the mid-term presentation and hopefully wire up all the components, fully assembling the car and develop the software for the motor controller to be controlled over UART.<\/p>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">Ask<\/h2>\n\n\n\n<p>This week didn\u2019t go as planned\u2026..<\/p>\n\n\n\n<p>The original plan was to fix the problems I had with ROS2 and make a custom message type. This was bigger challenge than anticipated. &nbsp;I didn\u2019t get the time to start debugging properly as I got a minor divergence in from of a curious Electronic engineer that wanted to test his control board that also supplies 5V to the Raspberry PI.<\/p>\n\n\n\n<p>This naturally made it so I couldn\u2019t work with the Raspberry PI in this testing period, so I helped debug and test. For more information about the tests see Herman\u2019s part of the Blog.<\/p>\n\n\n\n<p>After Monday we found out that Helle left the group. Since this is the only mechanical engineer in the group and our concept was leaning on a big mechanical part. The rest of the group then needed to rescope and figure out how we can approach the project without a mechanical engineer.<\/p>\n\n\n\n<p>We came up making a differential drive three-wheel car. With some premade parts and some rookie CAD and 3D printing. We are quite lucky in this department since Herman, and I have dabbled in some CAD, and I have a 3D printer at home. &nbsp;This made it possible to start testing and printing some parts. So, Sunday evening we had this:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"1024\" src=\"https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2025\/09\/image-110-768x1024.png\" alt=\"\" class=\"wp-image-11054\" style=\"width:399px;height:auto\" srcset=\"https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2025\/09\/image-110-768x1024.png 768w, https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2025\/09\/image-110-225x300.png 225w, https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2025\/09\/image-110.png 974w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" \/>\n\n\n\n<div style=\"margin-top:0;margin-bottom:0;height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image aligncenter size-medium is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"175\" src=\"https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2025\/08\/mm2-300x175.png\" alt=\"\" class=\"wp-image-10524\" style=\"width:150px;height:88px\" srcset=\"https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2025\/08\/mm2-300x175.png 300w, https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2025\/08\/mm2.png 753w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><figcaption class=\"wp-element-caption\">Mini Muck 2025<\/figcaption><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Weekly summary from Mini Muck (Group 1)<\/p>\n","protected":false},"author":111,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[101,102],"class_list":["post-11044","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-mini-muck","tag-smart-systems-2025"],"_links":{"self":[{"href":"https:\/\/dronesonen.usn.no\/index.php?rest_route=\/wp\/v2\/posts\/11044","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dronesonen.usn.no\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dronesonen.usn.no\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dronesonen.usn.no\/index.php?rest_route=\/wp\/v2\/users\/111"}],"replies":[{"embeddable":true,"href":"https:\/\/dronesonen.usn.no\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=11044"}],"version-history":[{"count":9,"href":"https:\/\/dronesonen.usn.no\/index.php?rest_route=\/wp\/v2\/posts\/11044\/revisions"}],"predecessor-version":[{"id":12537,"href":"https:\/\/dronesonen.usn.no\/index.php?rest_route=\/wp\/v2\/posts\/11044\/revisions\/12537"}],"wp:attachment":[{"href":"https:\/\/dronesonen.usn.no\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=11044"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dronesonen.usn.no\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=11044"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dronesonen.usn.no\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=11044"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}