A Python implementation for controlling Pluto Drone.
Get the latest source by cloning this repo:
git clone https://github.com/rohithvarma3000/dagger.git
Change to dagger folder:
cd dagger
Install the dependencies:
pip install -r requirements.txt
Install dagger:
pip install .
Connecting to Pluto
import dagger Pluto_IP = "192.168.4.1" Pluto_PORT = 23 pluto = dagger.PlutoConnection() pluto.connect((Pluto_IP, Pluto_PORT))
Intiating the SetRawRc Object for Controlling the pluto Drone using the RC params
rc = dagger.SetRawRC(pluto)
Arming the drone
rc.arm_drone()
Disarming the drone:
rc.disarm_drone()
Refer to our tutorial to get started with dagger
We connected to Pluto first by connecting our device to the drone's hotspot, then we used TCP sockets to connect
to the drone using IPV4 scheme and socket
library in python to do the same. The server iss hosted at 192.168.4.1:23
We sent the MSP Packet data encoded as bytes to pluto using sockets, the details about the packet is explained below.
We used MSP Packet scheme to communicate with Pluto, ie send commands, request data and calibrate the drone. The data of the packet was first encoded into bytes and then sent as a byte stream (array of bytes) to the drone. The basic structure of the packet has been explained below.
Header | Direction | Message Length | Type of Payload | Message Data | Checksum |
---|---|---|---|---|---|
2 Bytes | 1 Byte | 1 Byte | 1 Byte | N Bytes | 1 Byte |
Type of Byte | ASCII | Hexadecimal |
---|---|---|
Header | $M | 0x24 0x4d |
Direction | '<' or '>' | 0x3c (to the drone) or 0x3e (from the drone) |
Message Length | 0x00 - 0xff | |
Type of Payload | 0x01 - 0xff | |
Payload | Message Body encoded into N bytes | |
Checksum | XOR of Bytes of “Msg length”, “Command” and all bytes of “Payload” |
MSP COMMANDS | |
---|---|
MSP_RAW_IMU | MSP_ALTITUDE |
MSP_SET_RAW_RC | MSP_ANALOG |
MSP_SET_COMMAND | MSP_ACC_CALIBRATION |
MSP_ATTITUDE | MSP_MAG_CALIBRATION |
MODULE | DESCRIPTION |
---|---|
AccCalibration | Calibrates the accelerometer |
Altitude | Get the Altitude data from Pluto |
Attitude | Get the Attitude data from Pluto |
Analog | Get the Analog data from Pluto |
MagCalibration | Calibrates the magnetometer |
PlutoConnection | Defines API Connection |
PlutoControl | Controls for the Pluto Drone |
RawIMU | Get the RawIMU data from Pluto |
SetCommand | Sets the command in Pluto |
SetRawRC | Controls the pluto using RC params |