MiniMuck – Week 8


Hello Wørld!

This week we presented the mid-term and continued work on power supply, Lidar visualization and hardware interfacing:

  • Got the LIDAR point map working in RVIZ
  • Ordered the PCB from JLCPCB and parts from Digikey
  • Continued work on the controller for MVP

Herman

Actuator and Power Supply Module PCB

During the past week, I finished laying out the PCB for the Actuator and Power Supply Module, making some final design changes by fixing some mistakes, and adding a battery voltage measurement through a voltage divider to an ADC input. Additionally, I selected other electrolytic capacitors on the battery side with similar characteristics, because the original was out of stock. Following this, I ordered the PCB from JLCPCB, and the components from Digikey. Sadly, it is already clear we are experiencing some issues regarding the transport, where UPS is having issues with a misprint, and I hope this will be resolved quickly, so we can start to assemble and test the PCB.

Mechanical Brainstorming

Ask had brought some LEGO Technic bricks from home, and together with him, we brainstormed and tested a few concepts for our mechanical structure. We came up with the structure below.

Controlling the Dynamixel Servos

Finally, I was able to solder the headers kit onto the OpenCM 9.04 and start testing the Dynamixel XM430-W210-T servos we are borrowing. I was able to get the light to blink, but the servos did not respond to my instructions of target position, and I suspect this has to do with the configuration of the several parameters, which I will continue to research and test throughout the next week. I use Arduino IDE to program the board, and the board files are found here: https://raw.githubusercontent.com/ROBOTIS-GIT/OpenCM9.04/master/arduino/opencm_release/package_opencm9.04_index.json

I also use the Dynamixel2Arduino Library, with all of its examples and built-in functions to ease the development: https://docs.arduino.cc/libraries/dynamixel2arduino/

Simultaneously, I met with Leon to discuss the motor controller on the Arduino Uno on our differential drive vehicle and got some help with the servos.  

Next week

I will continue to research and look into control of the Dynamixel Servos and hopefully receive the PCB parts if UPS fixes the deviation, however I fear this might take longer than this.


Leon

This week started with some run-throughs of the presentation, before the midterm. Moving on after the midterm presentation the rest of the week went to setting up code for the hardware interface to get the mvp running.

Hardware Interface

I started by looking at existing hardware interfaces, here is a link to one of the hardware interfaces I looked at. I concluded that I wanted to make my own hardware interface code from scratch.

https://github.com/dynamixel-community/dynamixel_hardware/tree/jazzy?tab=readme-ov-file

The minimuck_system_hardware.hpp file contains a class that inherits from the SystemInterface class that is in the hardware_interface namespace. Using these I set up the class with expected functions like configure, export_state_interfaces, export_command_interfaces, read and write.

Follow the link to see expected returns and other details.
https://jaron-l.github.io/control.ros.org/api/classhardware__interface_1_1SystemInterface.html

Code implementation

Moving on to the minimuck_system_hardware.cpp file, I have implemented functionalities for all the functions. Here is a short snippet that shows how we send commands to the motor controller. Since the motors we are using are open loop, the read function does practically nothing.

I met a problem with downloading serial libraries that work with ros2 jazzy, therefore I chose to implement serial communication using POSIX Functions like you can see on this page.

https://www.geeksforgeeks.org/cpp/serial-port-connection-in-cpp/

After completing the implementation of the functions, next up in this department is making a launch file, as well as updating the cmakelists.txt and package.xml so that we can test the controller with the real mvp. After finishing the implementation of the cpp file I spent some time with Herman looking at how to get the Dynamixel servos working.


Ask

Hei bloggen!

Lidar Progress:

This week I have made some progress regarding the LiDAR and visualizing the data. After last weeks discovery that I should just use the native message type LaserScan , I decided to switch over. The main reason for this is Rviz. Rviz already has support LaserScan natively, so it is easier to use this with other ROS2 programs.  

My first task this week was to update the parts of the publisher code that use this message type.  As I mentioned, this will make it easier to use the Lidar data with other ROS2 programs like Rviz for visualization.

The LaserScan type consists of these parameters:

std_msgs/msg/Header header
float angle_min
float angle_max
float angle_increment
float time_increment
float scan_time
float range_min
float range_max
float[] ranges
float[] intensities

In short, this message contains all the needed information to represent a full 2D scan form the LiDAR.

After making these changes, the publisher is ready to share the lidar data with other nodes that need it.

This was the result in Rviz:

As you can see in the video, the moving line on the screen represents my arm. After some testing, I’ve confirmed that the LiDAR is working as expected.

Mechanical structure (drive train):

To get our miniMuck vehicle to be a true miniMuck vehicle we need to design a drive train with the 4 adjustable arms. Since we are just 2 Software and 1 Electrical engineer with limited CAD knowledge and skill. I thought that maybe building with Legos can be a method we can use to try out some concepts quite fast and easy. So, as Herman mentioned in his part, we have tried out some different concepts and found a concept that will make us able to have a somewhat stable vehicle with 4 adjustable arms.

Next week:

Next week I am going to start researching SLAM algorithms to get the car to use the LiDAR data to drive around autonomously and map the surrounding area. I am also going to continue looking at and refining the mechanical structure.


Mini Muck 2025


Leave a Reply