Skip to content

Repository files navigation

Lynx (Kitten)

License: MIT

A fully working 1/5 scale model of the Husarion Lynx AMR.

spin_small.mp4
nav_small.mp4

Why?!

Just for fun. I mean look at it! It's so tiny! It has such a mean scowl!

And to maybe learn a few things in the process.

Electronics Overview

To give it a decent amount of compute in a tiny package, it runs a CM4 with 32GB of eMMC. The eMMC is necessary since the Ochin V2 quadrotor carrier board omits a microSD card slot, but that makes the entire compute part almost smaller than a Pi Zero. It does need a fan so the 3D printed chassis doesn't melt (don't ask me why I know). Let's just say this isn't the first nor the second chassis...

Electronics Overview.

The VL53L7CX sensor is mounted at an angle at the front and provides as 90x90 deg FoV up to 4m, although it's only an 8x8 grid. The top two rows are used for emulating a laserscan, while the rest are used for obstacle and cliff detection. The STS3045M servos provide excellent closed loop control for slow crawling, and report odometry feedback. The wheels are so soft that they tend to deform in turns though, so the BNO085 IMU takes care of heading. The LED filaments are driven with a slimmed down MX1508 motor driver with half of the inputs pulled low and the other half driven by PWM. The crazy compact USB audio amp taken from a laptop external speaker handles audio out for the TTS and sound effects.

Most of the peripheral boards had their capacitors and other unnecessary components removed in order to fit. I had to take some creative liberties on the rear end to make everything work properly anyway.

The dock is still a WIP, though the electronics setup is relatively finalized, with one CC/CV charger, a display board, and pogo pin connectors that are input-only via a mosfet emulated diode so the pins don't get shorted if the thing runs into a metal pole or something. 3d_prints

3D Prints

There's only a few printed parts which are derived from the original Rviz/Gazebo collada model of the Lynx.

3d_prints

These can be found lynx_kitten/stl in the intended printing orientation. Note that all four servos need one of their mounting plates sawed off in order to fit, but can then be lightly press-fit into the chassis. The side pods have holes thorugh which LED filaments can be wired and pulled though, then sealed in place with UV resin.

BOM

This is very approximate, mostly for my own future reference. It's not like there's anyone else mad enough to build this thing.

Category Qty Item Notes / Specs
Compute 1 Raspberry CM4 with eMMC
1 2.4 GHz antenna 3 dBi, U.FL
1 Ochin V2 carrier board
10 M2 Brass insert 3 mm
1 Cooling fan 40 × 40 × 7 mm
Sensors 1 BNO085 IMU Bridge PS0 for UART-RVC mode
1 AMS1117 LDO regulator 3.3 V
1 VL53L7CX ToF sensor
Drive 4 STS3045M serial servo
1 XIAO Seeed Studio Bus servo board
1 FPV DC-DC converter 5 V, 3 A
4 ZH 1.5 mm female connector
1 Electrolytic capacitor 220 µF, 10 V
4 1/14 RC Crawler tires 1.0", 54×17 mm, W1004-T1014
16 M3 hex head screws M3 × 10 mm, low-profile
Lighting 2 Red LED filament 80 mm, same-end connector
2 White LED filament 80 mm, same-end connector
4 Resistor 150 Ω, LED current limiting
1 MX1508 H-bridge
2 Resistor 10 kΩ, H-bridge pulldown
Power Supply 2 21700 cell
1 HX-2S-D20 BMS 2S protection board
3 Nickel strip battery tabbing
2 2.54mm JST 2-pin Connector male + female, one for charging, one for main power
1 Magnetic pogo pin connector 5 pin, 2.8mm spacing
1 XL0401 ideal diode pogo pin isolation
1 XL4015 CC/CV supply configurable charger

CM4 Setup

The Ochin Manual and Suggestions pdfs cover flashing and wiring setup. The SPI soldering pads need to be bridged on the back side to connect the PWM pins to the actual JST plug. Note that the EEPROM gets flashed using the SPI pins on the CM4, so that needs to be unplugged if any settings need changing.

Add to /boot/firmware/config.txt

[cm4]
# Enable the USB2 outputs on the IO board
dtoverlay=dwc2,dr_mode=host

[all]
# Switch to the external antenna.
dtparam=ant2

# Uarts
dtoverlay=disable-bt
dtoverlay=uart0
dtoverlay=uart5

#I2c
dtparam=i2c_arm=on,i2c_arm_baudrate=1000000

#PWM
dtoverlay=pwm-2chan,pin=18,func=2,pin2=19,func2=2

#I am speed
arm_freq=1800

Nav deps:

sudo apt install ros-jazzy-navigation2 ros-jazzy-nav2-bringup  ros-jazzy-nav2-minimal-tb*
pip install feetech-servo-sdk --break-system-packages

Audio stuff:

sudo apt install espeak-ng alsa-utils sox libsox-fmt-mp3
cd ~/colcon_ws/src

git clone https://github.com/MoffKalast/lynx_kitten_ros

# Just like on the original Kinect Mk1 :)
git clone https://github.com/KaiserGabo/slam_gmapping_ros2.git

# For of adityakamath's VL53L7CX driver to add a PC2 publisher and LaserScan emulator
git clone https://github.com/MoffKalast/tof_imager_ros

# Visualization
git clone -b jazzy https://github.com/v-kiniv/rws.git
git clone -b ros2 https://github.com/MoffKalast/vizanti.git

cd ..
rosdep install -i --from-path src -y
colcon build

Install the pwm-permissions.service to set up the PWM pins so the node can use them without root access.

Launch

#Wheels, sensors, visualization
ros2 launch lynx_kitten_bringup boot.launch.xml

#Slam_toolbox config, no scan matching with this emulated lidar lol
ros2 launch lynx_kitten_nav slam.launch.py

#AMCL, works decently for the most part
ros2 launch lynx_kitten_nav loc.launch.py

#Nav2, drives slowly but surely
ros2 launch lynx_kitten_nav nav2.launch.py

About

Husarion Lynx, but smol

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Contributors

Languages