♻️ refactor(app): update company assets and references
This commit is contained in:
@@ -12,7 +12,7 @@ vi.mock('./envVars.js', () => ({
|
||||
VAT: 'Test VAT',
|
||||
PHONE: '+123456789',
|
||||
EMAIL: 'test@example.com',
|
||||
LINKEDIN: 'testlinkedin',
|
||||
FACEBOOK: 'testfacebook',
|
||||
}))
|
||||
|
||||
// Mock window.print
|
||||
@@ -59,7 +59,7 @@ describe('BusinessCardPage', () => {
|
||||
const websiteLink = screen.getByText('www.m-tartari.eu').closest('a')
|
||||
expect(websiteLink).toHaveAttribute('href', 'https://www.m-tartari.eu')
|
||||
|
||||
// Check LinkedIn link
|
||||
// Check Facebook Link
|
||||
const linkedinLink = screen.getByText('testlinkedin').closest('a')
|
||||
expect(linkedinLink).toHaveAttribute('href', 'https://www.linkedin.com/in/testlinkedin/')
|
||||
})
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* istanbul ignore file */
|
||||
export const NAME = import.meta.env.VITE_BC_NAME || '[FULL NAME]'
|
||||
export const POSITION = import.meta.env.VITE_BC_POSITION || '[POSITION]'
|
||||
export const VAT = import.meta.env.VITE_BC_VAT || '[VAT NUMBER]'
|
||||
export const PHONE = import.meta.env.VITE_BC_PHONE || '[Redacted for privacy]'
|
||||
export const POSITION = import.meta.env.VITE_BC_POSITION || 'Ass. di rievocazione storica affiliata C.E.R.S. (XIV-XV secolo)'
|
||||
export const PHONE = import.meta.env.VITE_BC_PHONE || null
|
||||
export const EMAIL = import.meta.env.VITE_BC_EMAIL || '[Redacted for privacy]'
|
||||
export const LINKEDIN = import.meta.env.VITE_BC_LINKEDIN || '[Redacted for privacy]'
|
||||
export const FACEBOOK = import.meta.env.VITE_BC_FACEBOOK || 'compagniadarmedelsantoluca'
|
||||
export const INSTAGRAM = import.meta.env.VITE_BC_INSTAGRAM || 'compagnia_darme_santo_luca'
|
||||
|
||||
@@ -1,5 +1,19 @@
|
||||
import { Box, Typography, Stack, Button, Paper, Link, TypographyProps, SvgIcon, PaperProps, ThemeProvider, createTheme } from '@mui/material'
|
||||
import { Email, LinkedIn, Print, PhoneInTalk, Public } from '@mui/icons-material'
|
||||
import {
|
||||
Box,
|
||||
Typography,
|
||||
Stack,
|
||||
Button,
|
||||
Paper,
|
||||
Link,
|
||||
TypographyProps,
|
||||
SvgIcon,
|
||||
PaperProps,
|
||||
ThemeProvider,
|
||||
createTheme,
|
||||
SxProps,
|
||||
Theme,
|
||||
} from '@mui/material'
|
||||
import { Email, Facebook, Print, PhoneInTalk, Public, Instagram } from '@mui/icons-material'
|
||||
|
||||
import { Page } from 'components/templates/index.js'
|
||||
import typography from 'style/typography/index.js'
|
||||
@@ -43,8 +57,9 @@ type BusinessCardProps = {
|
||||
mode?: 'light' | 'dark'
|
||||
src: string
|
||||
alt?: string
|
||||
srcSx?: SxProps<Theme>
|
||||
} & PaperProps
|
||||
const BusinessCard = ({ mode = 'dark', src, alt, sx, ...props }: BusinessCardProps) => (
|
||||
const BusinessCard = ({ mode = 'dark', src, srcSx, alt, sx, ...props }: BusinessCardProps) => (
|
||||
<ThemeProvider theme={theme[mode]}>
|
||||
<Paper
|
||||
className="print-business-card"
|
||||
@@ -85,6 +100,7 @@ const BusinessCard = ({ mode = 'dark', src, alt, sx, ...props }: BusinessCardPro
|
||||
height: 'fit-content',
|
||||
objectFit: 'cover',
|
||||
// borderRadius: '50%',
|
||||
...srcSx,
|
||||
}}
|
||||
/>
|
||||
|
||||
@@ -119,14 +135,7 @@ const BusinessCardPage = () => {
|
||||
gap: 0,
|
||||
},
|
||||
}}>
|
||||
<BusinessCard src="/fav-icon.svg" alt="logo">
|
||||
<Typography variant="h5" component="h1" fontFamily="Oswald, sans-serif" textTransform="uppercase" fontWeight={700}>
|
||||
{env.NAME}
|
||||
</Typography>
|
||||
<Typography variant="subtitle2" color="text.secondary" sx={{ fontSize: '0.55rem', mb: 0.5 }}>
|
||||
{env.POSITION}
|
||||
</Typography>
|
||||
</BusinessCard>
|
||||
<BusinessCard src="/logo_text.png" alt="logo" srcSx={{ width: '100%' }} />
|
||||
|
||||
<BusinessCard src="/images/qr.svg" alt="Qr Code" mode="light">
|
||||
<Stack
|
||||
@@ -146,19 +155,24 @@ const BusinessCardPage = () => {
|
||||
{env.NAME}
|
||||
</Typography>
|
||||
<Typography variant="caption" color="text.secondary" fontSize="0.55rem" mb={0.5}>
|
||||
{env.VAT}
|
||||
{env.POSITION}
|
||||
</Typography>
|
||||
<TypographyLink icon={PhoneInTalk} href={`tel:${env.PHONE.replace(/[^\d+]/g, '').replace(/^\+?/, '+')}`}>
|
||||
{env.PHONE}
|
||||
</TypographyLink>
|
||||
{env.PHONE != null && (
|
||||
<TypographyLink icon={PhoneInTalk} href={`tel:${env.PHONE.replace(/[^\d+]/g, '').replace(/^\+?/, '+')}`}>
|
||||
{env.PHONE}
|
||||
</TypographyLink>
|
||||
)}
|
||||
<TypographyLink icon={Email} href={`mailto:${env.EMAIL}`}>
|
||||
{env.EMAIL}
|
||||
</TypographyLink>
|
||||
<TypographyLink icon={Public} href="https://www.m-tartari.eu">
|
||||
www.m-tartari.eu
|
||||
<TypographyLink icon={Public} href="https://www.compagniadarmedelsantoluca.it/">
|
||||
www.compagniadarmedelsantoluca.it
|
||||
</TypographyLink>
|
||||
<TypographyLink icon={LinkedIn} href={`https://www.linkedin.com/in/${env.LINKEDIN}/`}>
|
||||
{env.LINKEDIN}
|
||||
<TypographyLink icon={Facebook} href={`https://facebook.com/${env.FACEBOOK}/`}>
|
||||
@{env.FACEBOOK}
|
||||
</TypographyLink>
|
||||
<TypographyLink icon={Instagram} href={`https://www.instagram.com/${env.INSTAGRAM}/`}>
|
||||
@{env.INSTAGRAM}
|
||||
</TypographyLink>
|
||||
</Stack>
|
||||
</BusinessCard>
|
||||
|
||||
@@ -17,22 +17,22 @@ describe('ContactPage', () => {
|
||||
|
||||
expect(screen.getAllByText('Contacts')).toHaveLength(2) // Page title and the Appbar drawer link
|
||||
expect(screen.getByLabelText('Email link')).toBeInTheDocument()
|
||||
expect(screen.getByLabelText('LinkedIn link')).toBeInTheDocument()
|
||||
expect(screen.getByLabelText('GitHub link')).toBeInTheDocument()
|
||||
expect(screen.getByLabelText('Facebook Link')).toBeInTheDocument()
|
||||
expect(screen.getByLabelText('Instagram link')).toBeInTheDocument()
|
||||
})
|
||||
|
||||
test.each([
|
||||
{
|
||||
label: 'Email link',
|
||||
href: 'mailto:info@m-tartari.eu',
|
||||
href: 'mailto:compagniasantoluca@gmail.com',
|
||||
},
|
||||
// {
|
||||
// label: 'LinkedIn link',
|
||||
// href: 'https://www.linkedin.com/in/m-tartari/',
|
||||
// label: 'Facebook Link',
|
||||
// href: 'https://facebook.com/compagniadarmedelsantoluca/',
|
||||
// },
|
||||
// {
|
||||
// label: 'GitHub link',
|
||||
// href: 'https://www.github.com/m-tartari/',
|
||||
// label: 'Instagram link',
|
||||
// href: 'https://www.instagram.com/compagnia_darme_santo_luca/',
|
||||
// },
|
||||
])('leads to the right place when the $label is clicked', ({ label, href }) => {
|
||||
render(<ContactPage />)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { Link, List, ListItem, Stack, Typography } from '@mui/material'
|
||||
import DraftsIcon from '@mui/icons-material/Drafts'
|
||||
import LinkedInIcon from '@mui/icons-material/LinkedIn'
|
||||
import GitHubIcon from '@mui/icons-material/GitHub'
|
||||
import FacebookIcon from '@mui/icons-material/Facebook'
|
||||
import Instagram from '@mui/icons-material/Instagram'
|
||||
|
||||
import { Page } from 'components/templates/index.js'
|
||||
|
||||
@@ -39,29 +39,29 @@ const ListItemLink: React.FC<ListItemProps> = ({ children, ...props }) => (
|
||||
|
||||
const ContactPage = () => {
|
||||
return (
|
||||
<Page title="Contacts">
|
||||
<Page title="Contatti">
|
||||
<Typography align="left" variant="h6">
|
||||
Feel free to contact me using any of the following:
|
||||
Sentiti libero di contattatarci con uno qualsiasi dei seguenti:
|
||||
</Typography>
|
||||
<List>
|
||||
<ListItemLink href="mailto:info@m-tartari.eu" aria-label="Email link">
|
||||
<ListItemLink href="mailto:compagniasantoluca@gmail.com" aria-label="Email link">
|
||||
<DraftsIcon fontSize="large" />
|
||||
<Typography variant="h6" ml={2}>
|
||||
info
|
||||
compagniasantoluca
|
||||
<wbr />
|
||||
@m-tartari.eu
|
||||
@gmail.com
|
||||
</Typography>
|
||||
</ListItemLink>
|
||||
<ListItemLink aria-label="LinkedIn link" href="https://www.linkedin.com/in/m-tartari/">
|
||||
<LinkedInIcon fontSize="large" />
|
||||
<ListItemLink aria-label="Facebook Link" href="https://facebook.com/compagniadarmedelsantoluca">
|
||||
<FacebookIcon fontSize="large" />
|
||||
<Typography variant="h6" ml={2}>
|
||||
m-tartari
|
||||
@compagniadarmedelsantoluca
|
||||
</Typography>
|
||||
</ListItemLink>
|
||||
<ListItemLink aria-label="GitHub link" href="https://www.github.com/m-tartari/">
|
||||
<GitHubIcon fontSize="large" />
|
||||
<ListItemLink aria-label="Instagram link" href="https://www.instagram.com/compagnia_darme_santo_luca/">
|
||||
<Instagram fontSize="large" />
|
||||
<Typography variant="h6" ml={2}>
|
||||
m-tartari
|
||||
@compagnia_darme_santo_luca
|
||||
</Typography>
|
||||
</ListItemLink>
|
||||
</List>
|
||||
|
||||
@@ -1,100 +0,0 @@
|
||||
import { screen } from '@testing-library/react'
|
||||
import userEvent from '@testing-library/user-event'
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
import { useAnalytics } from 'use-analytics'
|
||||
|
||||
import { renderWithRouter as render } from 'components/utils/tests'
|
||||
|
||||
import CurriculumPage from './index.js'
|
||||
|
||||
vi.stubGlobal('open', vi.fn())
|
||||
vi.mock('use-analytics', () => ({
|
||||
useAnalytics: () => ({ plugins: { enable: vi.fn(), disable: vi.fn() } }),
|
||||
}))
|
||||
|
||||
describe('Curriculum component', () => {
|
||||
const open = vi.spyOn(window, 'open')
|
||||
|
||||
test('renders without crashing', () => {
|
||||
render(<CurriculumPage />)
|
||||
|
||||
expect(screen.getAllByText('Curriculum')).toHaveLength(3) // title, appbar button and appbar drawer button
|
||||
})
|
||||
|
||||
test('displays the correct work experience', () => {
|
||||
render(<CurriculumPage />)
|
||||
|
||||
expect(screen.getByText('Work Experience')).toBeInTheDocument()
|
||||
|
||||
// check some of the positions
|
||||
expect(screen.getAllByText('Software Engineer')).toHaveLength(2) // large and smallscreen versions
|
||||
expect(screen.getAllByText('Embedded Engineer')).toHaveLength(2) // large and smallscreen versions
|
||||
})
|
||||
|
||||
test('displays the correct education', async () => {
|
||||
render(<CurriculumPage />)
|
||||
|
||||
// Education
|
||||
expect(screen.getByText('Education')).toBeInTheDocument()
|
||||
|
||||
// check the subsections links
|
||||
let link = screen.getByText('EMARO+ Program - Master Studies')
|
||||
expect(link).toHaveAttribute('href', 'https://master-emaro.ec-nantes.fr/')
|
||||
expect(link).toHaveAttribute('rel', 'noopener noreferrer')
|
||||
expect(link).toHaveAttribute('target', '_blank')
|
||||
|
||||
link = screen.getByText('Almatong Project - Bachelor Studies')
|
||||
expect(link).toHaveAttribute('href', 'https://corsi.unibo.it/2cycle/AutomationEngineering/almatong-bachelor-programme')
|
||||
expect(link).toHaveAttribute('rel', 'noopener noreferrer')
|
||||
expect(link).toHaveAttribute('target', '_blank')
|
||||
|
||||
// check some of the entries
|
||||
expect(screen.getAllByText('M.Eng. in Robotics and Control')).toHaveLength(2) // large and smallscreen versions
|
||||
expect(screen.getAllByText('M.S. in Robotics and Control Engineering')).toHaveLength(2) // large and smallscreen versions
|
||||
expect(screen.getAllByText('B.S. in Control Theory and Control Engineering')).toHaveLength(2) // large and smallscreen versions
|
||||
})
|
||||
|
||||
test('displays the correct skills', () => {
|
||||
render(<CurriculumPage />)
|
||||
|
||||
expect(screen.getByText('Skills')).toBeInTheDocument()
|
||||
|
||||
// check the subsection titles
|
||||
expect(screen.getByText('Languages')).toBeInTheDocument()
|
||||
expect(screen.getByText('Digital')).toBeInTheDocument()
|
||||
expect(screen.getByText('Softskills')).toBeInTheDocument()
|
||||
})
|
||||
|
||||
test('displays the correct accomplishments', async () => {
|
||||
render(<CurriculumPage />)
|
||||
|
||||
expect(screen.getByText('Accomplishments')).toBeInTheDocument()
|
||||
|
||||
// check some of the awards
|
||||
expect(screen.getByText('Awards')).toBeInTheDocument()
|
||||
expect(screen.getByText('Premio Innovazione Robotica ed Automazione - Horizon')).toBeInTheDocument()
|
||||
|
||||
// check some of the press releases
|
||||
expect(screen.getByText('Press Releases')).toBeInTheDocument()
|
||||
await userEvent.click(screen.getByText("Covid-19: L'impatto sui giovani talenti"))
|
||||
expect(open).toHaveBeenCalledWith('https://www.youtube.com/watch?v=Blat-e2Vyzk&feature=youtu.be', '_blank')
|
||||
|
||||
// check some of the certifications
|
||||
expect(screen.getByText('Publications')).toBeInTheDocument()
|
||||
expect(screen.getByText('Control System Design for Human Assisting Robot')).toBeInTheDocument()
|
||||
})
|
||||
|
||||
test('displays the correct extracurricular activites', () => {
|
||||
render(<CurriculumPage />)
|
||||
|
||||
expect(screen.getByText('Extracurricular')).toBeInTheDocument()
|
||||
|
||||
// check some of the activities
|
||||
expect(screen.getByText('Volunteering')).toBeInTheDocument()
|
||||
expect(screen.getByText('Blood Donor, Bone Marrow Donor at AVIS & ADMO')).toBeInTheDocument()
|
||||
|
||||
// check some of the hobbies
|
||||
expect(screen.getByText('Interests')).toBeInTheDocument()
|
||||
expect(screen.getByText('Ju-jitsu')).toBeInTheDocument()
|
||||
})
|
||||
})
|
||||
@@ -1,435 +0,0 @@
|
||||
import { Box, Divider, Link, Stack, Table, TableBody, TableCell, TableRow, Typography } from '@mui/material'
|
||||
|
||||
import { Award, ExternalIconLink, Extracurricular, Publication, SectionHeader, SectionSubheader } from 'components/atoms/index.js'
|
||||
import { CurriculumItem } from 'components/molecules/index.js'
|
||||
import { Page } from 'components/templates/index.js'
|
||||
|
||||
const Curriculum = () => {
|
||||
return (
|
||||
<Page title="Curriculum">
|
||||
<Box component="section" id="work">
|
||||
<SectionHeader>Work Experience</SectionHeader>
|
||||
|
||||
{/* id="selfemployed-software" */}
|
||||
<CurriculumItem title="Software Engineering Consultant" dates="04/24 - Today" company="Self-Employed" location="Remote">
|
||||
<Typography component="ul" sx={{ paddingLeft: '1em', marginTop: 0 }}>
|
||||
<li>
|
||||
Design and development of customized graphical interfaces and software components to facilitate the use of robots and industrial
|
||||
machines.
|
||||
</li>
|
||||
<li>Production and maintenance of revisions of the documentation.</li>
|
||||
<li>Providing technical assistance for R&D activities.</li>
|
||||
</Typography>
|
||||
</CurriculumItem>
|
||||
{/* id="MinHub-lead" */}
|
||||
<CurriculumItem title="Business Partner & Technical Lead" dates="03/23 - 12/24" company="MindHub Ferrara" location="Ferrara, Italy">
|
||||
<Typography component="div">
|
||||
Co-founded{' '}
|
||||
<Link
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
// href="https://www.facebook.com/profile.php?id=61550278936416"
|
||||
// href="https://mind-hub.it/contact-hall/mindhub-ferrara/"
|
||||
href="https://www.linkedin.com/company/mindhub-ferrara/">
|
||||
MindHub Ferrara
|
||||
</Link>
|
||||
, the first programming school for children in Ferrara, under the{' '}
|
||||
<Link target="_blank" rel="noopener noreferrer" href="https://mind-hub.it/">
|
||||
MindHub Academy franchise
|
||||
</Link>
|
||||
, dedicated to teaching programming fundamentals and enhancing logical and analytical skills. My duties include:
|
||||
<ul style={{ paddingLeft: '1em', marginTop: 0 }}>
|
||||
<li>Selecting and validating the hardware, the software, and the curriculum taught at our hall.</li>
|
||||
<li>Supporting the hiring process and training of instructors and teachers.</li>
|
||||
<li>Providing technical assistance for educational activities.</li>
|
||||
</ul>
|
||||
</Typography>
|
||||
</CurriculumItem>
|
||||
{/* id="IIT-software" */}
|
||||
<CurriculumItem title="Software Engineer" dates="06/21 - 04/24" company="Istituto Italiano di Tecnologia" location="Remote">
|
||||
<Typography component="div">
|
||||
Worked in{' '}
|
||||
<Link target="_blank" rel="noopener noreferrer" href="https://web.archive.org/web/20220706131402/https://alberobotics.it/">
|
||||
Alberobotics
|
||||
</Link>
|
||||
: a technology transfer project within the{' '}
|
||||
<Link
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
href="assets/archive/iit-hhcm/www.iit.it/it/web/humanoids-human-centered-mechatronics.html">
|
||||
Humanoid and Human Centred Mechatronics (HHCM) Research Line
|
||||
</Link>{' '}
|
||||
of the Italian Institute of Technology (IIT). My duties included:
|
||||
<ul style={{ paddingLeft: '1em', marginTop: 0 }}>
|
||||
<li>developing customized graphical interfaces and front-end/back-end software components to facilitate the use of robots.</li>
|
||||
<li>evaluating, integrating, and maintaining perception systems for the development of new use cases and demonstrators.</li>
|
||||
<li>
|
||||
participating in the company stands at trade fairs and interacting with potential investors for the promotion of our project and
|
||||
robot.
|
||||
</li>
|
||||
<li>producing and maintaining revisions of documentation.</li>
|
||||
<li>providing technical assistance for research activities.</li>
|
||||
</ul>
|
||||
</Typography>
|
||||
</CurriculumItem>
|
||||
{/* id="IIT-embedded" */}
|
||||
<CurriculumItem title="Embedded Engineer" dates="04/20 - 06/21" company="Istituto Italiano di Tecnologia" location="Genoa, Italy">
|
||||
<Typography component="div">
|
||||
Worked in{' '}
|
||||
<Link target="_blank" rel="noopener noreferrer" href="https://web.archive.org/web/20220706131402/https://alberobotics.it/">
|
||||
Alberobotics
|
||||
</Link>
|
||||
: a technology transfer project within the{' '}
|
||||
<Link
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
href="assets/archive/iit-hhcm/www.iit.it/it/web/humanoids-human-centered-mechatronics.html">
|
||||
Humanoid and Human Centred Mechatronics (HHCM) Research Line
|
||||
</Link>{' '}
|
||||
of the Italian Institute of Technology (IIT). My duties included:
|
||||
<ul style={{ paddingLeft: '1em', marginTop: 0 }}>
|
||||
<li>developing tests and procedures for the automatic calibration of EtherCAT actuators and robotic modules.</li>
|
||||
<li>developing a suite of tests for the evaluation of prototypes' hardware and firmware.</li>
|
||||
<li>developing firmware for electronic boards associated with customized sensing.</li>
|
||||
<li>producing and maintaining revisions of documentation.</li>
|
||||
<li>providing technical assistance for research activities.</li>
|
||||
</ul>
|
||||
</Typography>
|
||||
</CurriculumItem>
|
||||
{/* id="WUT-intern" */}
|
||||
<CurriculumItem
|
||||
title="Researcher - Internship"
|
||||
dates="01/19 - 06/19"
|
||||
company="Warsaw University of Technology - Division of Theory of Machines and Robots"
|
||||
location="Warsaw, Poland">
|
||||
<Typography component="div">
|
||||
My main duties included:
|
||||
<ul style={{ paddingLeft: '1em', marginTop: 0 }}>
|
||||
<li>Developing a voice interface and some user detection strategies for low-power robotic systems using ROS.</li>
|
||||
<li>Developing a robotic setup for educational purposes.</li>
|
||||
<li>Updating older robotics equipment.</li>
|
||||
</ul>
|
||||
</Typography>
|
||||
</CurriculumItem>
|
||||
{/* id="WUT-intern" */}
|
||||
<CurriculumItem title="Researcher - Internship" dates="01/17 - 02/17" company="LAR - University of Bologna" location="Bologna, Italy">
|
||||
<Typography component="div">
|
||||
My main duties included:
|
||||
<ul style={{ paddingLeft: '1em', marginTop: 0 }}>
|
||||
<li>Developing a setup to control a shape memory alloy material using an embedded PC (a Beagle Bone Black).</li>
|
||||
<li>Developing two X20 PLC systems to control synchronous motors connected to flexible joints.</li>
|
||||
<li>Implementating the control logic using Matlab and Automation Studio.</li>
|
||||
</ul>
|
||||
</Typography>
|
||||
</CurriculumItem>
|
||||
|
||||
<Divider sx={{ mt: 4, mb: 4 }} />
|
||||
<SectionHeader>Education</SectionHeader>
|
||||
|
||||
<SectionSubheader fontWeight={300}>Certifications</SectionSubheader>
|
||||
{/* id="WUT" */}
|
||||
<CurriculumItem title="IBM Full Stack Software Developer Professional Certificate" dates="03/24">
|
||||
<Stack direction="row" alignItems="center" gap={0.5}>
|
||||
<Typography>Credential ID: EZ34GWQLRHEG</Typography>
|
||||
<ExternalIconLink fontSize="inherit" href="https://www.coursera.org/account/accomplishments/professional-cert/EZ34GWQLRHEG" />
|
||||
</Stack>
|
||||
</CurriculumItem>
|
||||
|
||||
<SectionSubheader fontWeight={300} mt={2}>
|
||||
<Link
|
||||
rel="noopener noreferrer"
|
||||
target="_blank"
|
||||
underline="hover"
|
||||
href="https://master-emaro.ec-nantes.fr/"
|
||||
sx={{
|
||||
color: 'inherit',
|
||||
cursor: 'pointer',
|
||||
}}>
|
||||
EMARO+ Program - Master Studies
|
||||
</Link>
|
||||
</SectionSubheader>
|
||||
{/* id="WUT" */}
|
||||
<CurriculumItem
|
||||
title="M.Eng. in Robotics and Control"
|
||||
company="Warsaw University of Technology"
|
||||
// (grade: 5/5,summa cum laude)
|
||||
location="Warsaw, Poland"
|
||||
dates="09/18 - 06/19">
|
||||
<Typography component="ul" sx={{ paddingLeft: '1em', marginTop: 0 }}>
|
||||
<li>Consortium scholarship issued for EMARO+ students based on academic merits and offered to top applicants only.</li>
|
||||
<li>Relevant courses: Research Methodology, Bio-Robotics, Dynamics of Multi-Body Systems, Advanced Mechanical Design.</li>
|
||||
<li>Other relevant courses: 2 exams of Polish language and 1 of Polish culture.</li>
|
||||
<li>
|
||||
Thesis:{' '}
|
||||
<Link
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
href="https://drive.google.com/drive/folders/1Y7TJJN8z1llCkSTnpVHMELD3PqsX8VF9?usp=sharing">
|
||||
Voice Controlled Mobile Robot for Indoor Applications
|
||||
</Link>{' '}
|
||||
(research publication available{' '}
|
||||
<Link target="_blank" rel="noopener noreferrer" href="https://doi.org/10.1007/978-3-030-58380-4_7">
|
||||
<em>here</em>
|
||||
</Link>
|
||||
).
|
||||
</li>
|
||||
</Typography>
|
||||
</CurriculumItem>
|
||||
{/* id="ECN" */}
|
||||
<CurriculumItem
|
||||
title="M.S. in Robotics and Control Engineering"
|
||||
company="Ecole Centrale de Nantes"
|
||||
location="Nantes, France"
|
||||
dates="09/17 - 06/18">
|
||||
<Typography component="ul" sx={{ paddingLeft: '1em', marginTop: 0 }}>
|
||||
<li>Consortium scholarship issued for EMARO+ students based on academic merits and offered to top applicants only.</li>
|
||||
<li>
|
||||
Relevant courses: Mobile Robotics, Non-linear Control Theory, Software Architecture for Robotics, Artificial Intelligence, Computer
|
||||
Vision, Real Time Systems, Mechanical Design Methods in Robotics, Optimization Techniques.
|
||||
</li>
|
||||
<li>Other relevant courses: 2 exams of French language.</li>
|
||||
<li>
|
||||
Project:{' '}
|
||||
<Link
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
href="https://drive.google.com/file/d/1wBfvAzy9N8uChNxNj9Kd_hcvI0Qq3uQj/view?usp=sharing">
|
||||
Recharging electric cars with a mobile robot
|
||||
</Link>
|
||||
.
|
||||
</li>
|
||||
</Typography>
|
||||
</CurriculumItem>
|
||||
|
||||
<SectionSubheader fontWeight={300} mt={2}>
|
||||
<Link
|
||||
rel="noopener noreferrer"
|
||||
target="_blank"
|
||||
underline="hover"
|
||||
href="https://corsi.unibo.it/2cycle/AutomationEngineering/almatong-bachelor-programme"
|
||||
sx={{
|
||||
color: 'inherit',
|
||||
cursor: 'pointer',
|
||||
}}>
|
||||
Almatong Project - Bachelor Studies
|
||||
</Link>
|
||||
</SectionSubheader>
|
||||
{/* id="TJ" */}
|
||||
<CurriculumItem
|
||||
title="B.S. in Control Theory and Control Engineering"
|
||||
company="Tongji Univeristy"
|
||||
// (grade: 5/5)
|
||||
location="Shanghai, China"
|
||||
dates="09/14 - 06/17">
|
||||
<Typography component="ul" sx={{ paddingLeft: '1em', marginTop: 0 }}>
|
||||
<li>Relevant courses: Automation Controls, Electrical Circuit, Logical Design of Digital Systems.</li>
|
||||
<li>Other relevant courses: 2 Exams about Chinese Language and 3 Exams about Chinese Culture.</li>
|
||||
<li>
|
||||
Thesis:{' '}
|
||||
<Link target="_blank" rel="noopener noreferrer" href="https://drive.google.com/file/d/0B1z42QMR-0UtYzBYSVhRV3ZPWk0/view?usp=sharing">
|
||||
Solar Panel Fault Detection Method Based on Infrared Image Processing
|
||||
</Link>
|
||||
.
|
||||
</li>
|
||||
</Typography>
|
||||
</CurriculumItem>
|
||||
{/* id="UniBo" */}
|
||||
<CurriculumItem
|
||||
title="B.S. in Automation Engineering"
|
||||
company="Alma Mater Studiorum - University of Bologna"
|
||||
location="Bologna, Italy"
|
||||
//(grade: 102/110)
|
||||
dates="09/13 - 12/16">
|
||||
<Typography component="ul" sx={{ paddingLeft: '1em', marginTop: 0 }}>
|
||||
<li>Scholarship issued for Almatong Project student based on academic merits and offered to top applicants only.</li>
|
||||
<li>Relevant courses: Foundation of Industrial Robotics, Automatic Machines, Computer Architectures.</li>
|
||||
<li>Other relevant courses: 2 exams of French language.</li>
|
||||
<li>
|
||||
Thesis:{' '}
|
||||
<Link target="_blank" rel="noopener noreferrer" href="https://drive.google.com/file/d/0B1z42QMR-0UtSkxRVzJPTk1IX0k/view?usp=sharing">
|
||||
Design of a Testing Machine for Flexure Hinges
|
||||
</Link>
|
||||
.
|
||||
</li>
|
||||
</Typography>
|
||||
</CurriculumItem>
|
||||
|
||||
<SectionSubheader fontWeight={300} mt={2}>
|
||||
High School Studies
|
||||
</SectionSubheader>
|
||||
{/* id="Roiti" */}
|
||||
<CurriculumItem
|
||||
title="Scientific High School Diploma"
|
||||
company="Liceo scientifico “Antonio Roiti”"
|
||||
location="Ferrara, Italy"
|
||||
// (grade: 92/100)
|
||||
dates="09/08 - 06/13">
|
||||
<Typography>
|
||||
Liceo scientifico “Antonio Roiti” is a public high school in Ferrara, Italy. There I followed a P.N.I. specialism (“National Plan of
|
||||
Computer studies”). This curriculum is devised by the Ministry of Education, and emphasises the link between the humanistic tradition and
|
||||
scientific culture. It covers a complete and widespread range of disciplines, including Italian language and literature, mathematics,
|
||||
physics, chemistry, biology, history, philosophy, Latin language and culture, English language and culture, art history and technical
|
||||
drawing. At the end of the fifth year all students sit for the esame di Stato, a final examination which leads to the maturità
|
||||
scientifica.
|
||||
<br />
|
||||
The school website can be found{' '}
|
||||
<Link target="_blank" rel="noopener noreferrer" href="https://www.liceoroiti.edu.it">
|
||||
here
|
||||
</Link>
|
||||
.
|
||||
</Typography>
|
||||
</CurriculumItem>
|
||||
{/* id="EMHS" */}
|
||||
<CurriculumItem title="Foreign Exchange Student Program" company="El Modena High School" dates="09/11 - 06/12" location="California, US">
|
||||
<Typography>
|
||||
El Modena High School is a traditional 4 year public high school located in the El Modena neighborhood in the eastern portion of the city
|
||||
of Orange in Orange County, California. I studied there as a senior year stundent through a foreign exchange student program. <br />
|
||||
The school website can be found{' '}
|
||||
<Link target="_blank" rel="noopener noreferrer" href="https://www.elmodenahs.org/">
|
||||
here
|
||||
</Link>
|
||||
.
|
||||
</Typography>
|
||||
</CurriculumItem>
|
||||
|
||||
<Divider sx={{ mt: 4, mb: 4 }} />
|
||||
<SectionHeader>Skills</SectionHeader>
|
||||
<Table>
|
||||
<TableBody>
|
||||
<TableRow>
|
||||
<TableCell width="15%">
|
||||
<Typography variant="h6" component="b" fontWeight={600}>
|
||||
Languages
|
||||
</Typography>
|
||||
</TableCell>
|
||||
<TableCell width="85%">Italian (Native Speaker), English (Proficient, IELTS 7.5), French (Good), Chinese (Basic, HSK3)</TableCell>
|
||||
</TableRow>
|
||||
|
||||
<TableRow>
|
||||
<TableCell rowSpan={4} width="15%" id="digital_skills">
|
||||
<Typography variant="h6" component="b" fontWeight={600}>
|
||||
Digital
|
||||
</Typography>
|
||||
</TableCell>
|
||||
<TableCell width="85%">
|
||||
<b>Languages:</b> TypeScript/Javascript (Proficient), Python (Proficient), Bash (Good), C++ (Good), C (Fair)
|
||||
</TableCell>
|
||||
</TableRow>
|
||||
<TableRow>
|
||||
<TableCell>
|
||||
<b>Softwares:</b> git (Proficient), Matlab (Good), LaTeX (Good), CATIA (Fair)
|
||||
</TableCell>
|
||||
</TableRow>
|
||||
<TableRow>
|
||||
<TableCell>
|
||||
<b>Middleware:</b> Robotic Operative System (ROS, Good)
|
||||
</TableCell>
|
||||
</TableRow>
|
||||
<TableRow>
|
||||
<TableCell>
|
||||
<b>OS Used:</b> Linux, Microsoft
|
||||
</TableCell>
|
||||
</TableRow>
|
||||
<TableRow sx={{ '&:last-child td': { borderBottom: 0 } }}>
|
||||
<TableCell width="15%">
|
||||
<Typography variant="h6" component="b" fontWeight={600}>
|
||||
Softskills
|
||||
</Typography>
|
||||
</TableCell>
|
||||
<TableCell width="85%">
|
||||
Adaptability, Communication, Creativity, Critical Thinking, Problem-Solving, Self-Organization, Teamworking
|
||||
</TableCell>
|
||||
</TableRow>
|
||||
</TableBody>
|
||||
</Table>
|
||||
|
||||
{/* Accomplishments */}
|
||||
<Divider sx={{ mt: 4, mb: 4 }} />
|
||||
<SectionHeader>Accomplishments</SectionHeader>
|
||||
<Box pb={1}>
|
||||
<SectionSubheader fontWeight={300}>Awards</SectionSubheader>
|
||||
|
||||
<Award
|
||||
year="2021"
|
||||
title="Premio Innovazione Robotica ed Automazione - Horizon"
|
||||
organization={
|
||||
<>
|
||||
21
|
||||
<sup>
|
||||
<small>st</small>
|
||||
</sup>{' '}
|
||||
MECSPE fair
|
||||
</>
|
||||
}
|
||||
location="Bologna, Italy"
|
||||
/>
|
||||
{/* https://twitter.com/IITalk/status/1466745516851617796 */}
|
||||
{/* https://www.linkedin.com/feed/update/urn:li:activity:6869549011855032321/ */}
|
||||
<Award year="2018" title="Consortium schoolarship" organization="EMARO+ Consortium" location="Warsaw, Poland" />
|
||||
<Award year="2017" title="Consortium schoolarship" organization="EMARO+ Consortium" location="Nantes, France" />
|
||||
<Award year="2014" title="Study Grant" organization="Università di Bologna" location="Bologna, Italy" />
|
||||
</Box>
|
||||
|
||||
<Box pb={1}>
|
||||
<SectionSubheader fontWeight={300}>Press Releases</SectionSubheader>
|
||||
<Award
|
||||
year="2020"
|
||||
title="Covid-19: L'impatto sui giovani talenti"
|
||||
titleProps={{
|
||||
onClick: () => window.open('https://www.youtube.com/watch?v=Blat-e2Vyzk&feature=youtu.be', '_blank'),
|
||||
sx: {
|
||||
cursor: 'pointer',
|
||||
':hover': {
|
||||
backgroundColor: 'transparent',
|
||||
color: 'primary.main',
|
||||
},
|
||||
},
|
||||
}}
|
||||
organization="Talents in Motion"
|
||||
location="Rome, Italy"
|
||||
/>
|
||||
</Box>
|
||||
|
||||
<Box py={1}>
|
||||
<SectionSubheader fontWeight={300}>Publications</SectionSubheader>
|
||||
<Publication
|
||||
year="2020"
|
||||
title="Control System Design for Human Assisting Robot"
|
||||
authors={
|
||||
<>
|
||||
Zielinska T.,{' '}
|
||||
<Typography component="span" color="text.primary">
|
||||
Tartari M.
|
||||
</Typography>
|
||||
</>
|
||||
}
|
||||
location="ROMANSY 23 - Robot Design, Dynamics and Control. CISM International Centre for Mechanical Sciences (Courses and Lectures), vol
|
||||
601. Springer, Cham."
|
||||
href="https://doi.org/10.1007/978-3-030-58380-4_7"
|
||||
/>
|
||||
</Box>
|
||||
|
||||
{/* Extacurricoular */}
|
||||
<Divider sx={{ mt: 4, mb: 4 }} />
|
||||
<SectionHeader>Extracurricular</SectionHeader>
|
||||
{/* Volunteering */}
|
||||
<SectionSubheader fontWeight={300}>Volunteering</SectionSubheader>
|
||||
<Box component="ul" pl={4} mt={0}>
|
||||
<Extracurricular Component="li" year="2013 - Today" title="Blood Donor, Bone Marrow Donor at AVIS & ADMO" />
|
||||
<Extracurricular Component="li" year="2008 - 2014" title="Scoutism and associated volunteering activities in Agesci" />
|
||||
<Extracurricular Component="li" year="2011 - 2012" title="Boy Scout of America (BSA)" />
|
||||
</Box>
|
||||
{/* Other */}
|
||||
{/* Interests */}
|
||||
<SectionSubheader fontWeight={300}>Interests</SectionSubheader>
|
||||
<Box component="ul" pl={4} mt={0}>
|
||||
<Extracurricular Component="li" title="Historical Handcrafting & Reenactment" />
|
||||
<Extracurricular Component="li" title="Hiking/Travelling" />
|
||||
<Extracurricular Component="li" title="Ju-jitsu" />
|
||||
</Box>
|
||||
</Box>
|
||||
</Page>
|
||||
)
|
||||
}
|
||||
|
||||
export default Curriculum
|
||||
@@ -1 +0,0 @@
|
||||
export { default } from './CurriculumPage'
|
||||
@@ -1,106 +1,45 @@
|
||||
import React from 'react'
|
||||
import { Box, Stack, Typography } from '@mui/material'
|
||||
import { Box } from '@mui/material'
|
||||
|
||||
import { ViewportProvider } from 'components/utils/viewport'
|
||||
import { AcademyIconLink, DescriptionIconLink, ExternalAppIconLink, GitHubIconLink, VideoIconLink } from 'components/atoms/index.js'
|
||||
import { Footer, Hero, Toolbar, ProjectSpotlight } from 'components/molecules/index.js'
|
||||
|
||||
const MainPage = () => {
|
||||
React.useEffect(() => {
|
||||
document.title = 'Michele Tartari'
|
||||
document.title = "Compagnia d'Arme del Santo Luca"
|
||||
}, [])
|
||||
|
||||
const refIITLinfa = React.useRef<HTMLSelectElement>(null)
|
||||
const refIITModular = React.useRef<HTMLSelectElement>(null)
|
||||
const refIITCalibration = React.useRef<HTMLSelectElement>(null)
|
||||
const refWUTThesis = React.useRef<HTMLSelectElement>(null)
|
||||
const refAboutUs = React.useRef<HTMLSelectElement>(null)
|
||||
const refTeaching = React.useRef<HTMLSelectElement>(null)
|
||||
const refTraining = React.useRef<HTMLSelectElement>(null)
|
||||
|
||||
return (
|
||||
<ViewportProvider>
|
||||
<Box aria-label="page" sx={{ flexGrow: 1 }}>
|
||||
<Toolbar />
|
||||
<Hero scrollTarget={refIITLinfa} />
|
||||
{/* 1 IIT - Linfa */}
|
||||
<Hero scrollTarget={refAboutUs} />
|
||||
{/* 1 Chi Siamo */}
|
||||
<ProjectSpotlight
|
||||
ref={refIITLinfa}
|
||||
scrollTarget={refIITModular}
|
||||
anchor="bottom"
|
||||
image="images/IIT_Linfa.webp"
|
||||
title="LINFA: An Intuitive Block-Programming Interface for Reconfigurable Robots"
|
||||
caption={
|
||||
<Stack direction="row" gap={1} alignItems="center">
|
||||
<VideoIconLink fontSize="small" pt={0.5} href="https://www.linkedin.com/feed/update/urn:li:activity:7034480841569284096/" />
|
||||
<Typography color="text.secondary">Software Engineer @ IIT</Typography>
|
||||
</Stack>
|
||||
}>
|
||||
This project aims to simplify the control, monitoring, and programming of reconfigurable robots through an intuitive block-programming
|
||||
interface. It includes a front-end web app, built with TypeScript and React, allowing users to effortlessly change robot operating modes and
|
||||
settings, monitor the robot's state, and assemble programs by dragging and dropping code blocks representing various robot capabilities.
|
||||
Additionally, back-end services, developed with TypeScript and Python, translate these programs into formats compatible with the underlying
|
||||
systems and manage mission execution. The project emphasizes extensibility, enabling users with Python experience to integrate custom blocks
|
||||
and capabilities. Automated CI/CD pipelines further streamline integration and deployment processes.
|
||||
</ProjectSpotlight>
|
||||
{/* 2 IIT - Modular */}
|
||||
<ProjectSpotlight
|
||||
ref={refIITModular}
|
||||
scrollTarget={refIITCalibration}
|
||||
ref={refAboutUs}
|
||||
scrollTarget={refTeaching}
|
||||
anchor="right"
|
||||
// anchor="left"
|
||||
image="images/IIT_Modular.png"
|
||||
mobileImage="images/IIT_Modular_Mobile.webp"
|
||||
title="Revamping HHCM's Modular: Swift Generation of Modular Robot Models"
|
||||
caption={
|
||||
<Stack direction="row" gap={1} alignItems="center">
|
||||
<GitHubIconLink pt={0.5} fontSize="small" href="https://github.com/ADVRHumanoids/modular_hhcm" />
|
||||
<ExternalAppIconLink pt={0.5} fontSize="small" href="https://modular.alberobotics.it" />
|
||||
<Typography color="text.secondary">Software Engineer @ IIT</Typography>
|
||||
</Stack>
|
||||
}>
|
||||
This project focused on overhauling HHCM's Modular, enhancing its graphical interface, API, and deployment pipeline. Modular serves as a web
|
||||
application for the swift generation of modular robot models, with an offline approach (Building Mode) enabling users to set up robots in a
|
||||
virtual environment by selecting and assembling reconfigurable modules, immediately visualized in 3D. Additionally, an online approach
|
||||
(Discovery Mode) allows users to query the EtherCAT master for network topology, recognizing and displaying robots built from physical
|
||||
modules in 3D. The system seamlessly produces URDF, SRDF, and a full ROS package that can then be utilized for simulating and controlling
|
||||
the robot.
|
||||
image="images/about-us.png"
|
||||
mobileImage="images/about-us.png"
|
||||
title="Chi Siamo">
|
||||
La Compagnia d'Arme del Santo Luca è un gruppo di rievocazione storica di Ferrara affiliato al C.E.R.S. (Consorzio Europeo Rievocazioni
|
||||
Storiche). Il periodo rievocato dalla Compagnia è il tardo XIV secolo (1380-1410).
|
||||
</ProjectSpotlight>
|
||||
{/* 3 IIT - Motor Calibration */}
|
||||
<ProjectSpotlight
|
||||
ref={refIITCalibration}
|
||||
scrollTarget={refWUTThesis}
|
||||
anchor="left"
|
||||
image="images/IIT_Modules.webp"
|
||||
title="Automated Actuators and Robotic Modules Calibration"
|
||||
caption={
|
||||
<Stack direction="row" gap={1} alignItems="center">
|
||||
<GitHubIconLink pt={0.5} fontSize="small" href="https://github.com/ADVRHumanoids/motor_calibration" />
|
||||
<Typography color="text.secondary">Embedded Engineer @ IIT</Typography>
|
||||
</Stack>
|
||||
}>
|
||||
This project focused on automating the calibration of EtherCAT actuators and robotic modules, aiming for a fully automated procedure for
|
||||
newly assembled actuators. The process involved testing the PDO, conducting phase angle calibration, torque sensor calibration, ripple and
|
||||
position-dependent torque offset calibration, inertia and friction identification, and frequency response calibration. The goal was to
|
||||
optimize motor performance and collect necessary data for accurate characterization, with results stored centrally and presented in a
|
||||
comprehensive PDF report.
|
||||
{/* 2. Attività didattiche */}
|
||||
<ProjectSpotlight ref={refTeaching} scrollTarget={refTraining} anchor="left" image="images/didattica.png" title="Attività didattiche">
|
||||
La Compagnia d'Arme del Santo Luca propone percorsi didattici sulla vita nel Medioevo attraverso la spiegazione delle attività che venivano
|
||||
svolte all'interno del campo armato e che erano parte integrante della vita dell'uomo d'arme dell'epoca.
|
||||
</ProjectSpotlight>
|
||||
{/* 4 WUT - Master Thesis */}
|
||||
<ProjectSpotlight
|
||||
ref={refWUTThesis}
|
||||
anchor="bottom"
|
||||
image="images/thesis.jpg"
|
||||
mobileImage="images/thesis.webp"
|
||||
title="Voice Controlled Mobile Robot for Indoor Applications"
|
||||
caption={
|
||||
<Stack direction="row" gap={1} alignItems="center">
|
||||
<AcademyIconLink pt={0.5} fontSize="small" href="https://doi.org/10.1007/978-3-030-58380-4_7" />
|
||||
<DescriptionIconLink pt={0.5} href="https://drive.google.com/drive/folders/1Y7TJJN8z1llCkSTnpVHMELD3PqsX8VF9?usp=sharing" />
|
||||
<Typography color="text.secondary">Master Thesis @ WUT</Typography>
|
||||
</Stack>
|
||||
}>
|
||||
This thesis proposes a design for a small mobile robot controlled by voice. Firstly a preliminary analysis of the state of art of
|
||||
human-robot interaction has been conducted. Then, an analysis of the equipment selected took place, and, later, appropriate methodologies
|
||||
for voice recognition and user detection have been evaluated for this specific case. Finally, an overview of the complete software
|
||||
architecture of the system was given with three possible structures and their comparison. The results obtained show both the feasibility of
|
||||
using low power boards and some of their limitations.
|
||||
{/* 3. Scuola d'arme */}
|
||||
<ProjectSpotlight ref={refTraining} anchor="bottom" image="images/battle.png" mobileImage="images/battle.png" title="Scuola d'arme">
|
||||
Altra attività di rilevante importanza è la scherma medievale. Il gruppo in arme si allena settimanalmente per studiare e riproporre i
|
||||
trattati di scherma più importanti, dedicandosi allo studio e la messa in pratica delle tecniche di combattimento con differenti tipologie
|
||||
di armi.
|
||||
</ProjectSpotlight>
|
||||
<Footer />
|
||||
</Box>
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
import { screen } from '@testing-library/react'
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
import { useAnalytics } from 'use-analytics'
|
||||
|
||||
import { renderWithRouter as render } from 'components/utils/tests/index.js'
|
||||
import ProjectsPage from '.'
|
||||
|
||||
// Mock the analytics module
|
||||
vi.mock('use-analytics', () => ({
|
||||
useAnalytics: () => ({ plugins: { enable: vi.fn(), disable: vi.fn() } }),
|
||||
}))
|
||||
|
||||
vi.stubGlobal('open', vi.fn())
|
||||
describe('ProjectsPage component', () => {
|
||||
test('renders without crashing and displays the correct project titles', () => {
|
||||
render(<ProjectsPage />)
|
||||
|
||||
// check the section titles
|
||||
expect(screen.getByText('Robotics')).toBeInTheDocument()
|
||||
expect(screen.getByText('Engineering')).toBeInTheDocument()
|
||||
expect(screen.getByText('Hobbies')).toBeInTheDocument()
|
||||
|
||||
// check some of the projects
|
||||
expect(screen.getByText('LINFA: An Intuitive Block-Programming Interface for Reconfigurable Robots')).toBeInTheDocument()
|
||||
expect(screen.getByText("Revamping HHCM's Modular: Swift Generation and Control of Modular Robot Models")).toBeInTheDocument()
|
||||
expect(screen.getByText('Voice Controlled Mobile Robot for Indoor Applications')).toBeInTheDocument()
|
||||
})
|
||||
|
||||
test('opens the correct links when the link buttons are clicked', async () => {
|
||||
render(<ProjectsPage />)
|
||||
|
||||
// inspect one of the many links
|
||||
const link = screen.getByLabelText('Video-button')
|
||||
expect(link).toHaveAttribute('href', 'https://www.linkedin.com/feed/update/urn:li:activity:7034480841569284096/')
|
||||
expect(link).toHaveAttribute('target', '_blank')
|
||||
expect(link).toHaveAttribute('rel', 'noopener noreferrer')
|
||||
})
|
||||
})
|
||||
@@ -1,422 +0,0 @@
|
||||
import { Box, Divider, Link, Typography } from '@mui/material'
|
||||
|
||||
import { GitHubIconLink, DescriptionIconLink, VideoIconLink, AcademyIconLink, ExternalAppIconLink } from 'components/atoms/index.js'
|
||||
import { Project } from 'components/molecules/index.js'
|
||||
import { Page } from 'components/templates/index.js'
|
||||
|
||||
const ProjectsPage = () => {
|
||||
return (
|
||||
<Page title="Projects">
|
||||
<Box component="section" id="robotics">
|
||||
<Typography variant="h4" color="primary.main" gutterBottom>
|
||||
Robotics
|
||||
</Typography>
|
||||
<Typography gutterBottom>
|
||||
Here is a collection of all the projects that are strictly related to the design, development and functioning of robots:
|
||||
</Typography>
|
||||
<Project
|
||||
title="Behavior Tree Web Editor and Runtime for Robotics Applications"
|
||||
subtitle={<Typography color="text.secondary">Software Engineering Consultant @ IIT</Typography>}>
|
||||
<Typography>
|
||||
This project aims to simplify the remote control, monitoring, programming of behavior trees through an intuitive web interface. It
|
||||
includes a frontend web app, built with TypeScript and React, allowing users to effortlessly add, remove, replace nodes by dragging and
|
||||
dropping them on the a behavior trees canvas. It also allows to start, stop, pause, and resume tree execution. Additionally, backend
|
||||
services, developed with C++ and Python, translate these programs into formats compatible with the underlying libraries, stream them to
|
||||
target systems, and manage the behavior-trees lifecycle. Automated CI/CD pipelines further streamline integration and deployment
|
||||
processes.
|
||||
</Typography>
|
||||
</Project>
|
||||
<Project
|
||||
title="Digital Twin Interface for Reconfigurable Robots"
|
||||
subtitle={<Typography color="text.secondary">Software Engineering Consultant @ IIT</Typography>}>
|
||||
<Typography>
|
||||
This project focuses on the development of a user interface for the control and monitoring of the digital twin of modular reconfigurable
|
||||
robots. It includes a frontend web app, built with TypeScript and React, allowing users to effortlessly monitor and control the digital
|
||||
twin of their robots. The backend is powered by Python, and provides robust APIs for seamless communication between the frontend and the
|
||||
digital twin simulation. Automated CI/CD pipelines further streamline integration and deployment processes.
|
||||
</Typography>
|
||||
</Project>
|
||||
<Project
|
||||
title="LINFA: An Intuitive Block-Programming Interface for Reconfigurable Robots"
|
||||
subtitle={
|
||||
<>
|
||||
<Typography color="text.secondary" display={{ sm: 'none' }}>
|
||||
Software Engineer @ IIT
|
||||
</Typography>
|
||||
<VideoIconLink
|
||||
pt={0.5}
|
||||
fontSize="small"
|
||||
href="https://www.linkedin.com/feed/update/urn:li:activity:7034480841569284096/"
|
||||
sx={{ color: 'text.secondary' }}
|
||||
/>
|
||||
{/* <Typography color="text.secondary" display="inline-block"> */}
|
||||
<Typography color="text.secondary" display={{ xs: 'none', sm: 'inline' }}>
|
||||
Software Engineer @ IIT
|
||||
</Typography>
|
||||
</>
|
||||
}>
|
||||
<Typography>
|
||||
This project aims to simplify the control, monitoring, and programming of reconfigurable robots through an intuitive block-programming
|
||||
interface. It includes a frontend web app, built with TypeScript and React, allowing users to effortlessly change robot operating modes
|
||||
and settings, monitor the robot's state, and assemble programs by dragging and dropping code blocks representing various robot
|
||||
capabilities. Additionally, backend services, developed with TypeScript and Python, translate these programs into formats compatible with
|
||||
the underlying systems and manage mission execution. The project emphasizes extensibility, enabling users with Python experience to
|
||||
integrate custom blocks and capabilities. Automated CI/CD pipelines further streamline integration and deployment processes.
|
||||
</Typography>
|
||||
</Project>
|
||||
<Project
|
||||
title="Revamping HHCM's Modular: Swift Generation and Control of Modular Robot Models"
|
||||
subtitle={
|
||||
<>
|
||||
<Typography color="text.secondary" display={{ sm: 'none' }}>
|
||||
Software Engineer @ IIT
|
||||
</Typography>
|
||||
<GitHubIconLink pt={0.5} fontSize="small" href="https://github.com/ADVRHumanoids/modular_hhcm/" sx={{ color: 'text.secondary' }} />
|
||||
<ExternalAppIconLink pt={0.5} fontSize="small" href="https://modular.alberobotics.it" sx={{ color: 'text.secondary' }} />
|
||||
<Typography color="text.secondary" display={{ xs: 'none', sm: 'inline' }}>
|
||||
Software Engineer @ IIT
|
||||
</Typography>
|
||||
</>
|
||||
}>
|
||||
<Typography>
|
||||
This project centered on overhauling HHCM's Modular by redesigning its graphical interface, API, and deployment pipeline. Modular serves
|
||||
as a web application for swiftly generating models of modular robots. Starting with a collection of fundamental robotic modules, the
|
||||
system produces URDF, SRDF, and a full ROS package seamlessly and without coding. These can then be utilized for simulating and
|
||||
controlling the robot.
|
||||
</Typography>
|
||||
</Project>
|
||||
<Project
|
||||
title="Voice Controlled Mobile Robot for Indoor Applications"
|
||||
subtitle={
|
||||
<>
|
||||
<Typography color="text.secondary" display={{ sm: 'none' }}>
|
||||
Master Thesis @ WUT
|
||||
</Typography>
|
||||
<AcademyIconLink pt={0.5} fontSize="small" href="https://doi.org/10.1007/978-3-030-58380-4_7" sx={{ color: 'text.secondary' }} />
|
||||
<DescriptionIconLink
|
||||
pt={0.5}
|
||||
fontSize="small"
|
||||
href="https://drive.google.com/drive/folders/1Y7TJJN8z1llCkSTnpVHMELD3PqsX8VF9?usp=sharing"
|
||||
sx={{ color: 'text.secondary' }}
|
||||
/>
|
||||
<Typography color="text.secondary" display={{ xs: 'none', sm: 'inline' }}>
|
||||
Master Thesis @ WUT
|
||||
</Typography>
|
||||
</>
|
||||
}>
|
||||
<Typography>
|
||||
This thesis proposes a design for a small mobile robot controlled by voice. Firstly a preliminary analysis of the state of art of
|
||||
human-robot interaction has been conducted. Then, an analysis of the equipment selected took place, and, later, appropriate methodologies
|
||||
for voice recognition and user detection have been evaluated for this specific case. Finally, an overview of the complete software
|
||||
architecture of the system was given with three possible structures and their comparison. The results obtained show both the feasibility
|
||||
of using low power boards and some of their limitations.
|
||||
</Typography>
|
||||
</Project>
|
||||
<Project
|
||||
title="Recharging Electric Cars with a Mobile Robot"
|
||||
subtitle={
|
||||
<DescriptionIconLink
|
||||
pt={0.5}
|
||||
fontSize="small"
|
||||
href="https://drive.google.com/file/d/1wBfvAzy9N8uChNxNj9Kd_hcvI0Qq3uQj/view?usp=sharing"
|
||||
sx={{ color: 'text.secondary' }}
|
||||
/>
|
||||
}>
|
||||
<Typography>
|
||||
The aim of this project was to prove the possibility to design an autonomous mobile robot whose task was to recharge electric cars in a
|
||||
parking lot. This was done in simulation, using the Gazebo and ROS.
|
||||
</Typography>
|
||||
</Project>
|
||||
<Project
|
||||
title="Mobile Robot Self-Localization"
|
||||
subtitle={
|
||||
<>
|
||||
<GitHubIconLink pt={0.5} fontSize="small" href="https://github.com/m-tartari/ekf_matlab" sx={{ color: 'text.secondary' }} />
|
||||
<DescriptionIconLink
|
||||
pt={0.5}
|
||||
fontSize="small"
|
||||
href="https://drive.google.com/file/d/1BgPj-fgtYDDEsFHmDk2fGVm7DCPFWEeN/view?usp=sharing"
|
||||
sx={{ color: 'text.secondary' }}
|
||||
/>
|
||||
</>
|
||||
}>
|
||||
<Typography>
|
||||
For this project we worked using Matlab on data retrieved from a differential drive robot for its localization in a certain area by the
|
||||
means of the Extended Kalman filter (EKF).
|
||||
</Typography>
|
||||
</Project>
|
||||
<Project
|
||||
title="Onychophora-Inspired Firefighting Robot"
|
||||
subtitle={
|
||||
<>
|
||||
<GitHubIconLink pt={0.5} fontSize="small" href="https://github.com/m-tartari/firebot" sx={{ color: 'text.secondary' }} />
|
||||
<DescriptionIconLink
|
||||
pt={0.5}
|
||||
fontSize="small"
|
||||
href="https://drive.google.com/open?id=1a_ZvgaQjzvedeo296zrDpdvNL_VJDWTX"
|
||||
sx={{ color: 'text.secondary' }}
|
||||
/>
|
||||
</>
|
||||
}>
|
||||
<Typography>
|
||||
This project proposes a conceptual design for a firefighting robot suitable for indoor environments by taking inspiration from the
|
||||
biological world.
|
||||
</Typography>
|
||||
</Project>
|
||||
<Project
|
||||
title="Point-to-Point Trajectory Optimization"
|
||||
subtitle={
|
||||
<>
|
||||
{/* */}
|
||||
<GitHubIconLink
|
||||
pt={0.5}
|
||||
fontSize="small"
|
||||
href="https://github.com/m-tartari/simple_trajectory_optimization"
|
||||
sx={{ color: 'text.secondary' }}
|
||||
/>
|
||||
<DescriptionIconLink
|
||||
pt={0.5}
|
||||
fontSize="small"
|
||||
href="https://drive.google.com/open?id=11m7r7fLda_jpDEZ-9qAWvnfRN2kLkhlA"
|
||||
sx={{ color: 'text.secondary' }}
|
||||
/>
|
||||
</>
|
||||
}>
|
||||
<Typography>
|
||||
For this project we worked to find the optimal trajectory for a simple model of a robot performing point-to-point navigation in a room
|
||||
with some obstacles using MATLAB.
|
||||
</Typography>
|
||||
</Project>
|
||||
<Project
|
||||
title="3RRR Planar Parallel Manipulator"
|
||||
subtitle={
|
||||
<>
|
||||
<GitHubIconLink
|
||||
pt={0.5}
|
||||
fontSize="small"
|
||||
href="https://github.com/m-tartari/3RRR_planar_parallel_manipulator"
|
||||
sx={{ color: 'text.secondary' }}
|
||||
/>
|
||||
<DescriptionIconLink
|
||||
pt={0.5}
|
||||
fontSize="small"
|
||||
href="https://drive.google.com/open?id=11lCJM3EjVsua379BKD5NcEDHQLL4jdQn"
|
||||
sx={{ color: 'text.secondary' }}
|
||||
/>
|
||||
</>
|
||||
}>
|
||||
<Typography>This project concerns the design and optimization of a 3RRR planar parallel manipulator using MATLAB and CATIA</Typography>
|
||||
</Project>
|
||||
<Project
|
||||
title="Simple Swarm"
|
||||
subtitle={
|
||||
<>
|
||||
<GitHubIconLink pt={0.5} fontSize="small" href="https://github.com/m-tartari/simple_swarm" sx={{ color: 'text.secondary' }} />
|
||||
</>
|
||||
}>
|
||||
<Typography>
|
||||
Simple simulation and visualization of swarms of differential drive robots following a leader. Developed using C++ and ROS.
|
||||
</Typography>
|
||||
</Project>
|
||||
<Project
|
||||
title="Industrial Robot Programming"
|
||||
subtitle={
|
||||
<>
|
||||
<GitHubIconLink
|
||||
pt={0.5}
|
||||
fontSize="small"
|
||||
href="https://github.com/m-tartari/industrial_robot_programming"
|
||||
sx={{ color: 'text.secondary' }}
|
||||
/>
|
||||
</>
|
||||
}>
|
||||
<Typography>Industrial Robot Programming using VAL II and V+ tested on a PUMA and a RX90 robots.</Typography>
|
||||
</Project>
|
||||
<Project
|
||||
title="Modelling and Control of Manipulators"
|
||||
subtitle={
|
||||
<>
|
||||
<GitHubIconLink
|
||||
pt={0.5}
|
||||
fontSize="small"
|
||||
href="https://github.com/m-tartari/modelling_and_control_of_manipulators"
|
||||
sx={{ color: 'text.secondary' }}
|
||||
/>
|
||||
</>
|
||||
}>
|
||||
<Typography>
|
||||
This contains several projects regarding modelling and control of various manipulators using MATLAB, Simulink and ADAMS.
|
||||
</Typography>
|
||||
</Project>
|
||||
</Box>
|
||||
<Divider sx={{ mt: 4, mb: 4 }} />
|
||||
<Box component="section" id="engineering">
|
||||
<Typography variant="h4" color="primary.main" gutterBottom sx={{ mt: 4 }}>
|
||||
Engineering
|
||||
</Typography>
|
||||
<Typography gutterBottom>Here there is a collection of all the projects that are related to all the other fields of engineering:</Typography>
|
||||
<Project
|
||||
title="Replacing Legacy CNC Software with a Rust-based G-code Converter"
|
||||
subtitle={<Typography color="text.secondary">Software Engineering Consultant</Typography>}>
|
||||
<Typography>
|
||||
This project focuses on the replacement of mission-critical software which was previously handled by a prioritary solution on an unsecure
|
||||
legacy machine. The converter developed here is a standalone, cross-platform command-line tool written in Rust that transforms ISO-style
|
||||
G-code programs into explicit Fanuc CNC format. Scripts and guides were provided to facilitate adoption for non-technical users, and
|
||||
automation workflows were setup to enable seamless compilation and distribution of the converter across Windows, Linux, and macOS
|
||||
platforms.
|
||||
</Typography>
|
||||
</Project>
|
||||
<Project
|
||||
title="Automated Actuators and Robotic Modules Calibration"
|
||||
subtitle={
|
||||
<>
|
||||
<Typography color="text.secondary" display={{ sm: 'none' }}>
|
||||
Embedded Engineer @ IIT
|
||||
</Typography>
|
||||
<GitHubIconLink pt={0.5} fontSize="small" href="https://github.com/ADVRHumanoids/motor_calibration" sx={{ color: 'text.secondary' }} />
|
||||
<Typography color="text.secondary" display={{ xs: 'none', sm: 'inline' }}>
|
||||
Embedded Engineer @ IIT
|
||||
</Typography>
|
||||
</>
|
||||
}>
|
||||
<Typography>
|
||||
This project focused on automating the calibration of EtherCAT actuators and robotic modules, aiming for a fully automated procedure for
|
||||
newly assembled actuators. The process involved testing the PDO, conducting phase angle calibration, torque sensor calibration, ripple and
|
||||
position-dependent torque offset calibration, inertia and friction identification, and frequency response calibration. The goal was to
|
||||
optimize motor performance and collect necessary data for accurate characterization, with results stored centrally and presented in a
|
||||
comprehensive PDF report.
|
||||
</Typography>
|
||||
</Project>
|
||||
<Project
|
||||
title="Solar Panel Fault Detection Method Based on Infrared Image
|
||||
Processing"
|
||||
subtitle={
|
||||
<>
|
||||
<Typography color="text.secondary" display={{ sm: 'none' }}>
|
||||
Bachelor Thesis @ TONGJI
|
||||
</Typography>
|
||||
<DescriptionIconLink
|
||||
pt={0.5}
|
||||
fontSize="small"
|
||||
href="https://drive.google.com/file/d/0B1z42QMR-0UtYzBYSVhRV3ZPWk0/view?resourcekey=0-3O0frJlyho7TRKwNcy8f4g"
|
||||
sx={{ color: 'text.secondary' }}
|
||||
/>
|
||||
<Typography color="text.secondary" display={{ xs: 'none', sm: 'inline' }}>
|
||||
Bachelor Thesis @ TONGJI
|
||||
</Typography>
|
||||
</>
|
||||
}>
|
||||
<Typography>
|
||||
My Chinese bachelor thesis that proposes a method to detect malfunctioning solar panels by processing thermal images using MATLAB.
|
||||
</Typography>
|
||||
</Project>
|
||||
<Project
|
||||
title="Design of a Testing Machine for Flexure Hinges"
|
||||
subtitle={
|
||||
<>
|
||||
<Typography color="text.secondary" display={{ sm: 'none' }}>
|
||||
Bachelor Thesis @ UNIBO
|
||||
</Typography>
|
||||
<DescriptionIconLink
|
||||
pt={0.5}
|
||||
fontSize="small"
|
||||
href="https://drive.google.com/file/d/0B1z42QMR-0UtSkxRVzJPTk1IX0k/view?resourcekey=0-LN4KALZlLWc_lKekqqQbIw"
|
||||
sx={{ color: 'text.secondary' }}
|
||||
/>
|
||||
<Typography color="text.secondary" display={{ xs: 'none', sm: 'inline' }}>
|
||||
Bachelor Thesis @ UNIBO
|
||||
</Typography>
|
||||
</>
|
||||
}>
|
||||
<Typography>
|
||||
My Italian bachelor thesis that proposes a design from scratch of a machine for the empirical characterization of flexure hinges.
|
||||
</Typography>
|
||||
</Project>
|
||||
<Project
|
||||
title="Control of a Nonlinear System"
|
||||
subtitle={
|
||||
<>
|
||||
<GitHubIconLink pt={0.5} fontSize="small" href="https://github.com/m-tartari/nonlinear_control" sx={{ color: 'text.secondary' }} />
|
||||
<DescriptionIconLink
|
||||
pt={0.5}
|
||||
fontSize="small"
|
||||
href="https://drive.google.com/file/d/1TE3TWkXZjVq8OuBkLl497c_MQSs3MiLQ/view?usp=sharing"
|
||||
sx={{ color: 'text.secondary' }}
|
||||
/>
|
||||
</>
|
||||
}>
|
||||
<Typography>
|
||||
The aim of this project was to implement control laws for a nonlinear system (based on the model of a PVTOL aircraft).
|
||||
</Typography>
|
||||
</Project>
|
||||
<Project
|
||||
title="Multi-Body System's Kinematic Analysis"
|
||||
subtitle={
|
||||
<>
|
||||
<GitHubIconLink pt={0.5} fontSize="small" href="https://github.com/m-tartari/multi-body-kinematics" sx={{ color: 'text.secondary' }} />
|
||||
<DescriptionIconLink
|
||||
pt={0.5}
|
||||
fontSize="small"
|
||||
href="https://drive.google.com/file/d/15yrDU2blkb34Jy2GXkCIe4qNmDRmp31w/view?usp=sharing"
|
||||
sx={{ color: 'text.secondary' }}
|
||||
/>
|
||||
</>
|
||||
}>
|
||||
<Typography>
|
||||
For this project the kinematic analysis has been performed upon agiven mechanism using MATLAB. It has been then validated by comparing it
|
||||
to the ADAMS model of the same mechanism.
|
||||
</Typography>
|
||||
</Project>
|
||||
<Project
|
||||
title="Signal Processing"
|
||||
subtitle={
|
||||
<GitHubIconLink pt={0.5} fontSize="small" href="https://github.com/m-tartari/signal_processing" sx={{ color: 'text.secondary' }} />
|
||||
}>
|
||||
<Typography>Several Signal processing projects developed using MATLAB.</Typography>
|
||||
</Project>
|
||||
<Project
|
||||
title="Real Time Systems"
|
||||
subtitle={
|
||||
<GitHubIconLink pt={0.5} fontSize="small" href="https://github.com/m-tartari/real_time_systems" sx={{ color: 'text.secondary' }} />
|
||||
}>
|
||||
<Typography>Several real-time systems' projects developed using C++ and OIL, and run using Trampoline RTOS on a Teensy board.</Typography>
|
||||
</Project>
|
||||
</Box>
|
||||
<Divider sx={{ mt: 4, mb: 4 }} />
|
||||
<Box component="section" id="hobbies">
|
||||
<Typography variant="h4" color="primary.main" gutterBottom sx={{ mt: 4 }}>
|
||||
Hobbies
|
||||
</Typography>
|
||||
<Typography gutterBottom>Here there is a collection of projects related to things I do for fun:</Typography>
|
||||
<Project
|
||||
title="Medieval Furniture"
|
||||
subtitle={
|
||||
<GitHubIconLink pt={0.5} fontSize="small" href="https://github.com/m-tartari/medieval_furniture" sx={{ color: 'text.secondary' }} />
|
||||
}>
|
||||
<Typography>
|
||||
A collection of pdf and CAD models to create late XIV century furniture and medieval camp equipment. These objects are being realized by{' '}
|
||||
<Link target="_blank" rel="noopener noreferrer" href="http://www.compagniadarmedelsantoluca.it/">
|
||||
Compagnia d'Arme del Santo Luca
|
||||
</Link>
|
||||
.
|
||||
</Typography>
|
||||
</Project>
|
||||
<Project
|
||||
title="Pinterest Pinner"
|
||||
subtitle={
|
||||
<GitHubIconLink pt={0.5} fontSize="small" href="https://github.com/m-tartari/pinterest_pinner" sx={{ color: 'text.secondary' }} />
|
||||
}>
|
||||
<Typography>
|
||||
Publishes all photos from a{' '}
|
||||
<Link target="_blank" rel="noopener noreferrer" href="http://www.compagniadarmedelsantoluca.it/">
|
||||
selected website
|
||||
</Link>{' '}
|
||||
into a target Pinterest board using Python3 and the Pinterest API
|
||||
</Typography>
|
||||
</Project>
|
||||
</Box>
|
||||
</Page>
|
||||
)
|
||||
}
|
||||
|
||||
export default ProjectsPage
|
||||
@@ -1 +0,0 @@
|
||||
export { default } from './ProjectsPage'
|
||||
@@ -1,7 +1,5 @@
|
||||
export { default as MainPage } from './MainPage'
|
||||
export { default as ContactPage } from './ContactPage'
|
||||
export { default as CurriculumPage } from './CurriculumPage'
|
||||
export { default as ProjectsPage } from './ProjectsPage'
|
||||
export { default as BusinessCardPage } from './BusinessCardPage'
|
||||
|
||||
export { default as ErrorPage } from './ErrorPage'
|
||||
|
||||
Reference in New Issue
Block a user