#servo #motor #herkulex #servo-motor #dongbu

no-std drs-0x01

Easily communicate with Dongbu Robot servomotors Herkulex DRS 0101 and DRS 0201

12 releases

Uses old Rust 2015

0.3.0 May 9, 2019
0.2.2 Nov 28, 2018
0.1.7 Sep 18, 2018
0.1.6 Jul 17, 2018

#583 in Embedded development


Used in 2 crates

MIT/Apache

95KB
2K SLoC

Latest version Documentation dependency status

Documentation

This crate provides basic functionalities to communicate with Herkulex DRS (both 0101 and 0201) servomotors. It is heavily based on the documentation published by Dongbu Robot which is available here.

Examples

Sending data

The best way to use this library to send data to the servomotor is to use the Servo struct. For example, this how you can set a servomotor (id : 0x40) into continuous rotation.

extern crate drs_0x01;
use drs_0x01::Servo;

fn main() {
    let servo = Servo::new(0x40);
    let message = servo.set_speed(512, Rotation::Clockwise);
    // ... send the message
}

There is also some more advanced type for user experienced with the herkulex datasheet.

This is how to do the same task (set a servomotor into continuous rotation), but using those types. Moreover we changed the color from blue to red to show how those types give more control.

extern crate drs_0x01;
use drs_0x01::*;
use drs_0x01::builder::MessageBuilder;

fn main() {
    let message = MessageBuilder::new().id(0x40).s_jog(/* Playtime : datasheet value : */ 60, 
                                                       JogMode::continuous{speed : 512}, 
                                                       JogColor::red, 
                                                       0x40)
                                                 .build();
    // ... send the message.
}


To reboot all the servomotors you can use this message :

extern crate drs_0x01;
use drs_0x01::builder::MessageBuilder;

fn main () {
   let message = MessageBuilder::new().id(0xFE).reboot().build();  // 0xFE is the broadcast ID
}

Here is how to enable torque for the servomotor labelled 35 :

extern crate drs_0x01;
use drs_0x01::builder::MessageBuilder;
use drs_0x01::WritableRamAddr::TorqueControl;
fn main() {
   let message = MessageBuilder::new_with_id(35).write_ram(TorqueControl(1)).build();
}

Receiving Data

You can easily parse incoming bytes and transform them into ACKPacket by using an ACKReader.

See the examples folder for a code snippet.

Dependencies

~105KB