This repo contains the CAD and ECAD files needed to construct the force sensor as described in the our paper.
It is organized in the following manner:
- Single Force Sensor Assembly - (large_needle_driver_plus_mounting.sldasm)
- Dual Force Sensor on Tool Assembly (Cadiere_Forceps.sldasm)
- Calibration Assembly (calibration_setup.sldasm)
The most basic assembly which contains the important components to build the force sensor is found in the Single Force Sensor Assembly. The Calibration Assembly contains the designs for two fixtures that are meant to be mounted on to 3-axis translating stages. Please adapt these shapes to your own calibration set up or build your own.
If you use this for your research or other work, please cite our paper
Z. Chua and A.M. Okamura “A modular 3-degree-of-freedom force sensor for robot-assisted minimally invasive surgery research,” arXiv:2211.05428 [cs.RO], 2022.
@misc{chua2022modular, title={A Modular 3-Degree-of-Freedom Force Sensor for Robot-assisted Minimally Invasive Surgery Research}, author={Zonghe Chua and Allison M. Okamura}, year={2022}, eprint={2211.05428}, archivePrefix={arXiv}, primaryClass={cs.RO} }
- Force sensor board (ALPS2)
- Amplifier circuit (amplifier_board)
- component library (Parts.lbr)
- Arduino to ROS or Arduino GUI using Serial (force_sensor_ROS_interface)
The Arduino code requires installing the ROSserial library and the basic linear algebra library. It will send the force values in the local frame of the sensor to ROS as topics. When used in DEBUG mode it will print the amplified sensor output values to serial.
- script to resolve forces into robot frame (compute_pose.py)
This ROS script will compute the estimated gripper pose in the robot base frame and resolve the force measurements from each sensor frame into this base frame. To correctly compute the forces the min_angle variable should be defined in the compute_jaws_pose function. This must be set so that the script can adjust the reported gripper angle appropriately when is grasp an object. It was developed for dVRK 1.7.
To make the force sensor you will need the following components on hand.
Sensor Assembly | |||||
---|---|---|---|---|---|
Item | Qty | Part Number | Vendor | Vendor Part Number | Comment |
36 AWG wire | 3 | 4733 | Adafruit | 4854733 | |
Molex female connectors | 2 | 22552101 | Mouser | 53822552101 | |
Molex header pins | 10 | 16020074 | Mouser | 53816020074LP | |
M2x3 screws | 2 | 91801A550 | McMaster Carr | 91801A550 | |
M1.2x3 screws | 4 | 91430A153 | McMaster Carr | 91430A153 | Alternate component from actual design |
M1.2x8 screws | 4 | 91800A085 | McMaster Carr | 91800A085 | Alternate component from actual design |
1DoF force sensors | 8 | HSFPAR003A | Mouser | 688-HSFPAR003A | |
Kapton tape | 1 | Amazon | Any roll is fine | ||
Sensor Array PCB | 2 | Osh Park | |||
Jaw attachment | 1 | Protolabs | Machined in aluminum | ||
Base | 1 | Protolabs | 3D printed in aluminum | ||
Sensing plate and rod | 1 | Protolabs | Machined in stainless steel | ||
Strain relief bracket | 1 | 3D printed in Objet Verowhite | |||
Wire clamp | 1 | 3D printed in Objet Verowhite |
To solder the circuit PCB, you will need to perform surface mount soldering of the ALPS sensors. We recommend using a heat plate such as this one sold by Adafruit. When the solder paste has been liquified, you can place the sensors in the orientation shown below using tweezers. Take note of the alignment dots. DO NOT USE ADDITIONAL FLUX. This will damage the sensing nibs.
To ensure that the sensor is mounted flush to the surface of the PCB, you can lightly press the sensor into the board. You might notice some solder paste get pushed out. You can scrape those off once the all the sensors are firmly mounted on the board after cooling off.
Cut your desired length of 36 AWG wires. Strip off a length of 2mm very carefully with wire cutters. Coat the exposed bare wire with solder paste. Securely fix the PCB in place, and then solder the wire onto the contact pads.
Label each wire with tape and a marker. Carefully twist the wires coming off the board together while using your finger as a strain reliever. Strip and crimp the Molex terminals onto the other end of the wires and insert them into their housing. The PA-20 crimper is a good generic crimper to use.
A good tutorial for how to crimp wires can be found here.
To help you visualize the method for putting the sensor together, please watch the YouTube video at this link:
The amplifier board requires the following components. Each board supports a single sensor assembly.
Amplifier Board | ||||
---|---|---|---|---|
Item | Qty | Part Number | Vendor | Vendor Part Number |
Instrumentation amplifier | 8 | AD623ANZ | ||
Molex male header | 3 | 10897102 | Mouser | 53810897102 |
Murata capacitor 1uF | 8 | GRM033R61A104ME15D | Mouser | 81GRM033R61A104ME5D |
KEMET tantalum capacitor 10uF | 8 | T489A106K010ATA2K2 | Mouser | 80T489A106K10ATA2K2 |
YAGEO 5K ohm resistor | 8 | RT1206BRD075KL | Mouser | 603RT1206BRD075KL |
Vishay 25K ohm trimmer | 8 | T93YB253KT20 | Mouser | 72T93YB25K |
PCB | 2 | Oshpark | ||
2 Pos, 5mm Pitch Terminal Blk | 1 | TB001-500-02BE | DigiKey | 102-6134-ND |
Layout the components for the amplifier board according to the schematic below and solder them on in a reflow oven (or if you are really skilled you can hand solder).
The connection diagrams are shown in the image below. Once you connect your sensors to the board and to a microcontroller or oscilloscope, you should be able to read the voltage output of each of the ALPs sensors. You can use the provided Arduino sketch in DEBUG mode to read the amplified sensor values. You might need to modify the sketch to read from different analog inputs depending on how you have made your connections.
Once connected you should inspect the readings while adjusting the preloading of each sensor by tightening or loosening the four screws that compress the sensor arrays into the sensing plate. You will want the sensors to respond almost immediately to any force without any deadzone. You may need to shim the contact surfaces of the sensor plate to get good results.
The potentiometers can be used to adjust the reference voltage level of each amplifier chip. This sets the baseline voltage for zero force.
Once you are done, you can follow the methods in our paper to calibrate the sensor using a reference force sensor. We have provided an example of a calibration jig that uses 2 of these (translational) stages mounted on an acrylic base. Our jig was designed for an ATI Nano17 to act as the reference force sensor.
We are currently working on releasing a calibration program that can read the sensor outputs from the microcontroller via serial and reference force data from an ATI Nano17 through a NIDAQ data acquisition card. This will make it easier to perform calibration by allowing one to record all 8 sensor values and the reference force in a near-simultaneous manner. It will also allow for dynamic calibrations.
Note: 2 calibrated sensors will be needed to fully instrument a single tool.
Once you have 2 calibrated sensors that are mounted on the large needle driver endowrist tool, you can perform resolved force measurements for that tool in ROS. First you will need to update the calibration matrices for both sensors assemblies in the provided Arduino sketch. The sketch will open a ROS node via serial to publish the sensor values. The provided ROS script will resolve the sensor values into a grip force and a resultant force based on the estimated pose of the tool as measured from the dVRK joint encoders.
We have you Protolabs for manufacturing the metal components of the force sensor design. Specifically the base is best manufactured using 3D printing with aluminum, while the sensing plate and the gripper jaw can be machined in aluminum.
The optional strain relief can be 3D printed using a high-resolution 3D printer. We have tested the Objet30 in Vero White.
For the PCBs we have used OSHPARK to manufacture the bare boards.
For the for sensor PCB leads, we recommend using 36ga wire. We last purchased them from Adafruit in single rolls.