{"id":8269,"date":"2023-10-31T16:06:08","date_gmt":"2023-10-31T15:06:08","guid":{"rendered":"https:\/\/dronesonen.usn.no\/?p=8269"},"modified":"2023-10-31T19:11:36","modified_gmt":"2023-10-31T18:11:36","slug":"turret-syndrome-week-10","status":"publish","type":"post","link":"https:\/\/dronesonen.usn.no\/?p=8269","title":{"rendered":"Turret Syndrome &#8211; Week 10"},"content":{"rendered":"\n<h2 class=\"has-text-align-center wp-block-heading\">Ole Eirik S.Seljordslia<\/h2>\n\n\n\n<p>We started this week off on Monday by testing our implementation from last week. Our threading solution looked to work good on paper but we need to validate this by testing the implementation. I think we experienced all the typical multiprocessing problems; deadlock, race condition and starvation. But we tackled each problem one by one, and by the end of the day we had working code.\u00a0<\/p>\n\n\n\n<p>I realized while debugging that the way we handled coordinates in our code was quite dependent on remembering indices. We had our detections in the following format: ((x1,y1,x2,y2), class). Accessing the top right coordinate would be: detection[0][2], detection[0][3], this proved a bit tricky and troublesome when we troubleshooted our threading solution.&nbsp;<\/p>\n\n\n\n<p>So I implemented two classes to ease the readability of our code. So accessing the same coordinate could be done with the following syntax: detection.get_bottom_left().&nbsp;<\/p>\n\n\n\n<p><img loading=\"lazy\" decoding=\"async\" width=\"624\" height=\"331\" src=\"https:\/\/lh7-us.googleusercontent.com\/5ktlRI4XGbjmGeEtCDuS1Gpzb5k4noXMu5YMpFVTPvZVzptiV8QXdy3jZpZjAgoK3g-8C3n7jGkHeMlRPKOgSkgWyA-h_iVvuEfs5aN2_VFhi_7fwDzXYFIq7f91E70ewet-IX9mN5Or1wFT63aUiw0\"><\/p>\n\n\n\n<p>We have previously discussed using interpolation to \u201ccalibrate\u201d our non-linearity when driving our system. If there is shifting friction in the gear system or the bearing system the resulting force exerted from the motors will give different movement. This means that driving the motor with a set number of steps might give us different results due to friction in the system. But if this friction is repeatable at the same spots, we can use interpolation to map out the system&#8217;s non-linearity.&nbsp;<\/p>\n\n\n\n<p>This interpolation works by finding the smallest interval for  y_a  and  y_b  so that y  is between y_a and y_b<\/p>\n\n\n\n<p>The linear interpolation can be expressed as:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"646\" height=\"85\" src=\"https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2023\/10\/image-190.png\" alt=\"\" class=\"wp-image-8314\" srcset=\"https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2023\/10\/image-190.png 646w, https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2023\/10\/image-190-300x39.png 300w\" sizes=\"auto, (max-width: 646px) 100vw, 646px\" \/><\/figure>\n\n\n\n<p>Polynimal interpolation uses Lagrange polynomial calculation. This method works by calculating basis polynomial for each value set. These basis polynomials are summed togheter to produce an estimated y-value.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"647\" height=\"84\" src=\"https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2023\/10\/image-191.png\" alt=\"\" class=\"wp-image-8316\" srcset=\"https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2023\/10\/image-191.png 647w, https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2023\/10\/image-191-300x39.png 300w\" sizes=\"auto, (max-width: 647px) 100vw, 647px\" \/><\/figure>\n\n\n\n<!-- HTML generated using hilite.me --><div style=\"background: #202020;overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em\"><table><tr><td><pre style=\"margin: 0;line-height: 125%\"> 1\n 2\n 3\n 4\n 5\n 6\n 7\n 8\n 9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30<\/pre><\/td><td><pre style=\"margin: 0;line-height: 125%\"><span style=\"color: #6ab825;font-weight: bold\">def<\/span> <span style=\"color: #447fcf\">__polynomial_coefficients<\/span><span style=\"color: #d0d0d0\">(<\/span><span style=\"color: #24909d\">self<\/span><span style=\"color: #d0d0d0\">,<\/span> <span style=\"color: #d0d0d0\">x:<\/span> <span style=\"color: #24909d\">float<\/span><span style=\"color: #d0d0d0\">)-&gt;<\/span><span style=\"color: #24909d\">list<\/span><span style=\"color: #d0d0d0\">:<\/span>\n        <span style=\"color: #ed9d13\">&quot;&quot;&quot;Calculates polynomial coefficients<\/span>\n<span style=\"color: #ed9d13\">        Args:<\/span>\n<span style=\"color: #ed9d13\">            x: value<\/span>\n<span style=\"color: #ed9d13\">        Returns:<\/span>\n<span style=\"color: #ed9d13\">            list for coefficients<\/span>\n<span style=\"color: #ed9d13\">        &quot;&quot;&quot;<\/span>\n        <span style=\"color: #d0d0d0\">n<\/span> <span style=\"color: #d0d0d0\">=<\/span> <span style=\"color: #24909d\">len<\/span><span style=\"color: #d0d0d0\">(<\/span><span style=\"color: #24909d\">self<\/span><span style=\"color: #d0d0d0\">.__x_values)<\/span>\n        <span style=\"color: #d0d0d0\">coefficients<\/span> <span style=\"color: #d0d0d0\">=<\/span> <span style=\"color: #d0d0d0\">[<\/span><span style=\"color: #3677a9\">0<\/span><span style=\"color: #d0d0d0\">]*n<\/span>\n        <span style=\"color: #6ab825;font-weight: bold\">for<\/span> <span style=\"color: #d0d0d0\">i<\/span> <span style=\"color: #6ab825;font-weight: bold\">in<\/span> <span style=\"color: #24909d\">range<\/span><span style=\"color: #d0d0d0\">(n):<\/span>\n            <span style=\"color: #d0d0d0\">coefficient<\/span> <span style=\"color: #d0d0d0\">=<\/span> <span style=\"color: #3677a9\">1<\/span>\n            <span style=\"color: #6ab825;font-weight: bold\">for<\/span> <span style=\"color: #d0d0d0\">j<\/span> <span style=\"color: #6ab825;font-weight: bold\">in<\/span> <span style=\"color: #24909d\">range<\/span><span style=\"color: #d0d0d0\">(n):<\/span>\n                <span style=\"color: #6ab825;font-weight: bold\">if<\/span> <span style=\"color: #d0d0d0\">i<\/span> <span style=\"color: #d0d0d0\">!=<\/span> <span style=\"color: #d0d0d0\">j:<\/span>\n                    <span style=\"color: #d0d0d0\">coefficient<\/span> <span style=\"color: #d0d0d0\">*=<\/span> <span style=\"color: #d0d0d0\">((x<\/span> <span style=\"color: #d0d0d0\">-<\/span> <span style=\"color: #24909d\">self<\/span><span style=\"color: #d0d0d0\">.__x_values[j])\/(<\/span><span style=\"color: #24909d\">self<\/span><span style=\"color: #d0d0d0\">.__x_values[i]<\/span> <span style=\"color: #d0d0d0\">-<\/span> <span style=\"color: #24909d\">self<\/span><span style=\"color: #d0d0d0\">.__x_values[j]))<\/span>\n            <span style=\"color: #d0d0d0\">coefficients[i]<\/span> <span style=\"color: #d0d0d0\">=<\/span> <span style=\"color: #d0d0d0\">coefficient<\/span>\n        <span style=\"color: #6ab825;font-weight: bold\">return<\/span> <span style=\"color: #d0d0d0\">coefficients<\/span> \n    <span style=\"color: #6ab825;font-weight: bold\">def<\/span> <span style=\"color: #447fcf\">polynomial_interpolation<\/span><span style=\"color: #d0d0d0\">(<\/span><span style=\"color: #24909d\">self<\/span><span style=\"color: #d0d0d0\">,<\/span> <span style=\"color: #d0d0d0\">x:<\/span> <span style=\"color: #24909d\">float<\/span><span style=\"color: #d0d0d0\">)-&gt;<\/span><span style=\"color: #24909d\">float<\/span><span style=\"color: #d0d0d0\">:<\/span>\n        <span style=\"color: #ed9d13\">&quot;&quot;&quot;Calculates interpolation polynomial<\/span>\n<span style=\"color: #ed9d13\">        Args:<\/span>\n<span style=\"color: #ed9d13\">            x: value<\/span>\n<span style=\"color: #ed9d13\">        Returns:<\/span>\n<span style=\"color: #ed9d13\">            Interpolated y-value<\/span>\n<span style=\"color: #ed9d13\">        &quot;&quot;&quot;<\/span>\n        <span style=\"color: #d0d0d0\">coefficients<\/span> <span style=\"color: #d0d0d0\">=<\/span> <span style=\"color: #24909d\">self<\/span><span style=\"color: #d0d0d0\">.__polynomial_coefficients(x)<\/span>\n        <span style=\"color: #6ab825;font-weight: bold\">return<\/span> <span style=\"color: #24909d\">sum<\/span><span style=\"color: #d0d0d0\">([coefficients[i]*<\/span><span style=\"color: #24909d\">self<\/span><span style=\"color: #d0d0d0\">.__y_values[i]<\/span> <span style=\"color: #6ab825;font-weight: bold\">for<\/span> <span style=\"color: #d0d0d0\">i<\/span> <span style=\"color: #6ab825;font-weight: bold\">in<\/span> <span style=\"color: #24909d\">range<\/span><span style=\"color: #d0d0d0\">(<\/span><span style=\"color: #24909d\">len<\/span><span style=\"color: #d0d0d0\">(<\/span><span style=\"color: #24909d\">self<\/span><span style=\"color: #d0d0d0\">.__x_values))])<\/span>\n<\/pre><\/td><\/tr><\/table><\/div>\n\n\n\n<p><a href=\"https:\/\/mathworld.wolfram.com\/LagrangeInterpolatingPolynomial.html\" data-type=\"URL\" data-id=\"https:\/\/mathworld.wolfram.com\/LagrangeInterpolatingPolynomial.html\" target=\"_blank\" rel=\"noreferrer noopener\">Source for Lagrange interpolation implementation<\/a><\/p>\n\n\n\n<h2 class=\"has-text-align-center wp-block-heading\">Christopher Daffinrud<\/h2>\n\n\n\n<p>This week I collaborated with Ole the entire Monday to troubleshoot and fix some multithreading issues that occurred when testing our program on the Pi. Ole has elaborated on this further, so I won&#8217;t repeat everything we did.<\/p>\n\n\n\n<p>The rest of the week I needed to prioritize another subject due to an exam submission.<\/p>\n\n\n\n<p>The plan for next week is to finally implement the motor functionalities so that our Detection Model communicates to our motors making the system aim to the target. There will be a more exciting blog post by me next week!<\/p>\n\n\n\n<h2 class=\"has-text-align-center wp-block-heading\">Hannes Weigel<\/h2>\n\n\n\n<p>The goal for this week was to find a suitable solution for a barrel with a uniform outer diameter, as well as design a projectile.<\/p>\n\n\n\n<h4 class=\"has-text-align-center wp-block-heading\">The Barrel<\/h4>\n\n\n\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/0pf4Qho6JZ0M5bMrcihyR9le5-z9p9dlLjZEJoiW27d8XlcJSkE49URhEPfKEkhRA-9uKfEP3XRKOefK2mxN0okIZiJsHviiaXIRsrsulM1bS1ehbaDy6b3Ly14S7E9-U3anYm8a7T7XPuwKQOPtQV8\" width=\"602\" height=\"207\"><\/p>\n\n\n\n<p>The biggest challenge with the barrel is that it has varying outer diameters (OD) throughout its length.&nbsp;<\/p>\n\n\n\n<p>Since we can\u2019t shoot paintball balls (due to bouncing and the paint-mess), we need a custom projectile. This projectile would have to fly straight, and thereby need to be aerodynamical.&nbsp;<\/p>\n\n\n\n<p>The easiest way to achieve this is by having a projectile that slides on the outside of the barrel.<br>Therefore, the varying OD is a problem.&nbsp;<\/p>\n\n\n\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/Uaj7UsBEijBudZNHQM0dmWLB69qoQuoh7IV33j6E1WCvb5NZGI1u2-JW3IFfrE8t11NIDMsu9Kv-6Nj0dHsAZy-8BOk3MKM6FSztXc7Paf9pQO-L0NlhmXjpTYgRbX3GLrxDfmys0K51VD0YS7s3O3M\" width=\"602\" height=\"451\"><\/p>\n\n\n\n<p>Initially, I wanted to CNC machine a new barrel, but the threads at the end of the barrel deemed this unlikely. The threads were \u215e-20 UNEF, which we don\u2019t have the tools for.<\/p>\n\n\n\n<p>Another approach to this challenge is to manufacture an insert into the barrel that protrudes long enough so that a projectile could be slid onto it.<\/p>\n\n\n\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/0dB_G2rNZmL0muQO8d8wD5o1tb1XTTM5jDD4n-gFmsG_S7gp7BFNQLPaYfYuLxjzmIUwYWrXSPVK-j_ZRkmK7t6PwbLAVk414Urdqjm0M_cSUCSmkz7rNqTpGGc0PgHIT0_z-IejDmofKnWTScFIEIA\" width=\"602\" height=\"296\"><\/p>\n\n\n\n<p>The solution is this barrel extender (yes, it\u2019s just a pipe).<\/p>\n\n\n\n<h4 class=\"has-text-align-center wp-block-heading\">The Projectile<\/h4>\n\n\n\n<p>As mentioned before, the projectile would sit on the outside of the barrel (or the extender) such that it could be made aerodynamically stable.<\/p>\n\n\n\n<p><img loading=\"lazy\" decoding=\"async\" width=\"602\" height=\"189\" src=\"https:\/\/lh7-us.googleusercontent.com\/e0Et0ZpSzBA-Zw43qySncPyH0aqhvtxyJNLNw1xQ6_pR8L92PaV_-YfeFJosFCwbF6qadt1jk5-xRRxGb6cDWzisPiFiTOcRw5FxSFIa1VdQdP1FPU6oCh8FkGi6tsUhpRzZ4uQCpVXDkhqO7my_LOU\"><\/p>\n\n\n\n<p>I designed this missile in OpenRocket given the outer diameter of the extender and an estimated length of the entire missile.<\/p>\n\n\n\n<p>For the missile to be stable, the center of mass (center of gravity\/CG, here in blue\/white) would need to be in front of the center of pressure (CP, here in red).&nbsp;<\/p>\n\n\n\n<p>With most of the mass going into the nosecone, which is an ogive, the CG is biased towards the front.<\/p>\n\n\n\n<p>The fins have to be as large as possible without crossing the CG. This resulted in a trapezoidal fin shape giving the missile a 0.673 CAL stability margin. Not great, not terrible.<\/p>\n\n\n\n<p><img loading=\"lazy\" decoding=\"async\" width=\"602\" height=\"499\" src=\"https:\/\/lh7-us.googleusercontent.com\/lv-Wa2QjgI76qjvk2RuniOensFoOTnz3CfSUku8aCu1VE7gnV8_Yg1Yn3QyQbSFCeUQnvby-IpDb8GrQ4h1NWm0uhKTreqp92LrA3SrfUvOjiurN57KFT03ozWaxACU7QtM0HPiWrh8yFZKlTkzbMBo\"><\/p>\n\n\n\n<p>As the missile will be 3D printed, the seam between the fins and fin tube need to be reinforced. Here by a 2mm fillet.<\/p>\n\n\n\n<p><img loading=\"lazy\" decoding=\"async\" width=\"602\" height=\"485\" src=\"https:\/\/lh7-us.googleusercontent.com\/jJiHv2MZsVgOAfKB7r9O2yoWXYZOo18pDoyrtdK8F3u2Ya49LUn4brgeQawyifKg519qCXqq-d03Eu1U-an3TEwy0BrLX1i6opFQEGixcQP1aBU933aAdeulSfbMMCCKIj9YGcfSQW7QgoiEsMU1-bA\"><\/p>\n\n\n\n<p>By printing the missile in two pieces, I can ensure that the nosecone is printed more weighty than the fin tube.<\/p>\n\n\n\n<p><img loading=\"lazy\" decoding=\"async\" width=\"602\" height=\"451\" src=\"https:\/\/lh7-us.googleusercontent.com\/H5UEyxBEOXHJnRDdTq77AepRwSB0WFpnLxhTnmQVOk8nbFwSYc4p8rsNe3NP6vjFI3qvbdh2bIzh2NQWbiA5Fit9wGo5hI8Ams83E6RrCWZzkWGBQRfUeU7xGR9HV6Qnoh4vJM7TNID7lsVkRPQ_Y-4\"><\/p>\n\n\n\n<p>As we have 4 motor controllers, a battery, a camera, a servo motor for the trigger, and a Raspberry Pi that need to be connected, the wiring situation was worse than it is now.<\/p>\n\n\n\n<p>Since several components cross each other several times, the wiring is quite challenging.<\/p>\n\n\n\n<h4 class=\"has-text-align-center wp-block-heading\">Further Work<\/h4>\n\n\n\n<p>The entire system needs to be mounted on a more permanent surface. Since we only have about 3 weeks left of the course, the system needs testing to verify that it meets the requirements.<\/p>\n\n\n\n<h2 class=\"has-text-align-center wp-block-heading\">Mats Bergum<\/h2>\n\n\n\n<p>Unfortunately, I did not receive the components for the regulator. So, the week went further testing of my 3D printer and learning Fusion 360. <\/p>\n\n\n\n<p>By following these videos:<\/p>\n\n\n\n<p><a href=\"https:\/\/youtu.be\/A5bc9c3S12g?list=PL40d7srwyc_Ob77ioP5314_klrB4E0W7x\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/youtu.be\/A5bc9c3S12g?list=PL40d7srwyc_Ob77ioP5314_klrB4E0W7x<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/youtu.be\/HXRMzJWo0-Q?list=PL40d7srwyc_Ob77ioP5314_klrB4E0W7x\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/youtu.be\/HXRMzJWo0-Q?list=PL40d7srwyc_Ob77ioP5314_klrB4E0W7x<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/youtu.be\/zS8dYA_Iluc?list=PL40d7srwyc_Ob77ioP5314_klrB4E0W7x\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/youtu.be\/zS8dYA_Iluc?list=PL40d7srwyc_Ob77ioP5314_klrB4E0W7x<\/a><\/p>\n\n\n\n<p>I made this box:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"703\" src=\"https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2023\/10\/image-188-1024x703.png\" alt=\"\" class=\"wp-image-8304\" srcset=\"https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2023\/10\/image-188-1024x703.png 1024w, https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2023\/10\/image-188-300x206.png 300w, https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2023\/10\/image-188-768x527.png 768w, https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2023\/10\/image-188.png 1418w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"878\" height=\"1024\" src=\"https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2023\/10\/image-189-878x1024.png\" alt=\"\" class=\"wp-image-8305\" srcset=\"https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2023\/10\/image-189-878x1024.png 878w, https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2023\/10\/image-189-257x300.png 257w, https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2023\/10\/image-189-768x895.png 768w, https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2023\/10\/image-189.png 1080w\" sizes=\"auto, (max-width: 878px) 100vw, 878px\" \/><\/figure>\n\n\n\n<p>I learned many of the essential functions of Fusion 360 and, most importantly, how to use parametric modeling properly. <\/p>\n\n\n\n<p>Another tutorial that I would recommend for people wanting to learn Fusion 360:<\/p>\n\n\n\n<p><a rel=\"noreferrer noopener\" href=\"https:\/\/youtu.be\/2NzsDcvxLyo\" target=\"_blank\">https:\/\/youtu.be\/2NzsDcvxLyo<\/a><\/p>\n\n\n\n<div style=\"height:34px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"has-text-align-center wp-block-heading\">Harald Berzinis<\/h2>\n\n\n\n<p>This week I have been designing the new camera mount for the paintball gun. The mount will placed on top of the main rail as showcased in the picture bellow:<br><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/0gw5eS16ACGF8TW5JbiGdx0XUBUFgqCHxFYfSHXJ_o_h6ohxVoVN99N-H6osdFpk6FsbClqJR5J7d62G7Az4qI6-RU7kiqz271bnyII7dQQSzDbYP-dYBiU04o2vbGP7Zxm1E1zbdSt1JBNfrdNAWcg\" width=\"624\" height=\"419\"><\/p>\n\n\n\n<h4 class=\"has-text-align-center wp-block-heading\">Initial CAD-Design<\/h4>\n\n\n\n<p>After taking measurements with a caliper tool, I started to look at how I can design a rail that is modular, and that the camera can be shifted to a specific origin if needed. This is to ensure that if there is any needed change to the camera location, I will not be needing to redesign the entire mount. The initial rail that gets mounted on top of the paintball gun became a two part solution as follows:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/HvU783-pm9Ma0jlKRVZmOVXILiRI0DCUC0iSrPR_cmYeEByZTIs7-A2JciurlyI-kb0h00qHCqQSEUXvuSMm8GnaNQdDuq9C1j3-9xqwRS_i0a3KzoawIJPH3W2MZ5bFAQmNc6cwwOwpA3Yj7nJRvQk\" alt=\"\" \/><figcaption class=\"wp-element-caption\">The bottom rail that gets mounted on top of the paintball gun<\/figcaption><\/figure>\n\n\n\n<p><img loading=\"lazy\" decoding=\"async\" width=\"624\" height=\"535\" src=\"https:\/\/lh7-us.googleusercontent.com\/9gZ9hHJezP_7upNYwhaNhOXppPtXOfDJpOjpG6DOVXfACGXWbQ4ecjWQ1031s2GE1WbDvk4_ra-BM0g67DHEdiUMxsJfVsPNaGxJbW7lInmJz06I-ua80Y59hxAQO0hOQ0v3xlaUIe2HdyV1mKS4tdM\"><br>After printing out these two parts, and fitting this to the paintball gun. I found out that the mount fitted very well, so I made a second rail which holds the camera itself. The whole new concept is described in the picture bellow:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/Icw1s7abGI8fHA8c1_IEfVqptAyIX872RiTpfMLEQ1RDHghv-uy_Car-4As7Sntio7NSNoHGoW_mYpR50HtJ1Eh5g4nRVmTti2iVpS0sEJSaXDeYDlriy0bbJu8ko7_oqNPYZLnd3f-PFGjc47EoDOw\" alt=\"\" \/><figcaption class=\"wp-element-caption\">The whole contraption<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/nmOfApYg8kRuDl5AZ5llki6AFVhjxR-F_ptoFOR-h2E-TJG1PYSUlXSMRM60Z99vOMFn-fwmZ7kk8eX_h8hh3Lxr2jwUxtb8egVWJLlXAx6Q1Jrqd_z5-0NNg71F-VEigXyMOxQIZV2gSlMzaATQbJs\" alt=\"\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-center\">This design is quite modular and the camera mount can be extended outwards to a specific camera origin as shown below:<br><\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"284\" src=\"https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2023\/10\/pasted-image-0-1024x284.png\" alt=\"\" class=\"wp-image-8308\" srcset=\"https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2023\/10\/pasted-image-0-1024x284.png 1024w, https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2023\/10\/pasted-image-0-300x83.png 300w, https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2023\/10\/pasted-image-0-768x213.png 768w, https:\/\/dronesonen.usn.no\/wp-content\/uploads\/2023\/10\/pasted-image-0.png 1331w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Maximum extension<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/hrPvkt8EWJ4F7cPZ6w-RD73UaaVQwa7uuR-rK_xbu4dMR95U3QAfPlsyK9oW3iFLr5gIqC1PsOFUlsvQN2hVD_oYmTd2XwwYYNhMVBltcSYd2FvPFpdkWsdZYVikTq-hexpkZsNIR0RjSuG-R23AXhE\" alt=\"\" width=\"650\" height=\"206\" \/><figcaption class=\"wp-element-caption\">Minimum extension<\/figcaption><\/figure>\n\n\n\n<p>I have also added some small extrusions for cable management, so that the camera cable can be wrapped through instead of hanging in the air. Furthermore, where the camera is placed, there are two rails that hold the camera in place vertically, and two small extrusions that hold it in place horizontally. I have also designed so the gun is in the middle of the camera feed and parallel to the gun, this is to make it easier for the software team and to minimize offsets to ensure accuracy.<\/p>\n\n\n\n<h4 class=\"has-text-align-center wp-block-heading\">Next week:&nbsp;<\/h4>\n\n\n\n<p>I will be 3D-printing this contraption fully, assembling it and further testing it.&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ole Eirik S.Seljordslia We started this week off on Monday by testing our implementation from last week. Our threading solution looked to work good on paper but we need to validate this by testing the implementation. I think we experienced all the typical multiprocessing problems; deadlock, race condition and starvation. But we tackled each problem [&hellip;]<\/p>\n","protected":false},"author":100,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-8269","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/dronesonen.usn.no\/index.php?rest_route=\/wp\/v2\/posts\/8269","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\/100"}],"replies":[{"embeddable":true,"href":"https:\/\/dronesonen.usn.no\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=8269"}],"version-history":[{"count":16,"href":"https:\/\/dronesonen.usn.no\/index.php?rest_route=\/wp\/v2\/posts\/8269\/revisions"}],"predecessor-version":[{"id":8317,"href":"https:\/\/dronesonen.usn.no\/index.php?rest_route=\/wp\/v2\/posts\/8269\/revisions\/8317"}],"wp:attachment":[{"href":"https:\/\/dronesonen.usn.no\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=8269"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dronesonen.usn.no\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=8269"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dronesonen.usn.no\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=8269"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}