DJI Ronin - ROS Control Unit
This is probably the worst way to control the DJI Ronin gimbal, but hey! it works great and nowadays that's the only way to control it.
DJI Ronin, 3 Axis gimbal, DJI decided to release their device without any API for developers, which makes it absolutely useless.
The Easy Way - Just buy gimbal which is based on Basecam/Alexmos, they DO have Serial API.
The Hard Way - Creating a server which runs the DJI Ronin app on android and continuously transmits screen capture of the app to a server on the robot through ADB(using sji), using KNN to recognize the digits from the screen capture and publish Pan, Tilt, Roll as custom ROS message.
The control node will subscribe to the angles and rotate the gimbal using an Arduino board(will explained below) to a given angle using the rosservice call.
In my case, The gimbal is mounted on the front of robot aiming the sensing unit at different directions, i already had the ronin so instead of buying a new gimbal i looked for a 'creative' way to control it.
- Arduino Uno
Android Cellphone - Runs DJI Ronin Assistant link:
Micro USB Cable
Thanks to Learning about Electronics
Instead of LED at the diagram you should connect one of the axis from the DJI remote pan/tilt/roll potentiometer.
After creating the circuit you should calibrate the poteniometer to the DJI remote using USB cable and windows application, this will give you the settings to speed var at the DJIRonin_Control.py
The package will do most of the things for you, download DJI Ronin App to your android mobile, connect it through usb.
Running the launch file will open the app on your mobile, just press 'MOTORS'.
The phone capturing resolution will set to 360x640, the script will locate your phone capturing address(SJI) automatically.
- SJI Android Capture Server
- Python Dependencies: Naked, pySerial, numpy, PIL, matplotlib. (use pip install)
In order to rotate the gimbal CCW/CW, we need to calibrate our custom remote to fit the MCP41050 pot, using DJI ronin app set the Arduino to a value that fits your RC scale, set these values as default.
In order to find the values that rotates the gimbal open a serial communication with the Arduino board (via Putty or so) at baud 9600, and enter 1 SPEED, and 2 SPEED, 1/2 refers to CW, CCW.
Write this value in the speed variable in DJIRonin_Control.py.
Image processing using OpenCV
DJI Ronin controlled by dji_ronin node
Arduino RC Circuit
- Publisher - /GimbalAngle
msg - Pan,Tilt,Roll
- TF update from ronin_base_link to base_link based on yaw angle
- launch file -
Publish_Digits - 1/0 will publish an opencv image to /DJI_Ronin_App_Digits
Publish_App - 1/0 will publish SJI capture to /DJI_Ronin_App
- Service - /DJI_RotateTo dir ang
For Example - in order to rotate to -20 will write rosservice call /DJI_RotateTo 2 20
- Add timeout to rotation service
M.Sc Student Mechanical Engineering Faculty at Tel Aviv University, Israel
Email - Itamare@gmail.com