Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

setThrust is work or not? #15

Open
qwertyuiop7370 opened this issue Sep 18, 2016 · 3 comments
Open

setThrust is work or not? #15

qwertyuiop7370 opened this issue Sep 18, 2016 · 3 comments

Comments

@qwertyuiop7370
Copy link

Hello
I am newbie in crazyflie2.
I built your code in windows and it works in mainly.
But I have a trouble with setting thrust from program. I do the next

int main(int argc, char **argv) {
    CCrazyRadio crRadio("radio://0/80/250K");
    if(crRadio.startRadio())
    {
        CCrazyflie cflieCopter(&crRadio);
        cflieCopter.setThrust(10001);
        cflieCopter.setSendSetpoints(true);
        for (int i=0;cflieCopter.cycle()&&i<100; ++i)
        {
            std::cout << cflieCopter.yaw() << " " << cflieCopter.pitch() << " " << cflieCopter.roll() << " " << cflieCopter.thrust() << " " << cflieCopter.batteryLevel()<< std::endl;
            std::this_thread::sleep_for(std::chrono::milliseconds(10));
            // Range: 10001 - (approx.) 60000
            cflieCopter.setThrust(10001+i*20);
        }
    } else {
        std::cerr << "Could not connect to dongle. Did you plug it in?" << std::endl;
    }
}

I get

Opening radio 0/80/250K
Got device version 0.83
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
Registered logging block `stabilizer'
Registered logging block `gyroscope'
Registered logging block `accelerometer'
Registered logging block `battery'
Registered logging block `magnetometer'
Registered logging block `altimeter'
0 0 0 0 0
-2.03507 0.462907 0.134263 0 3.73724
-2.03507 0.462907 0.134263 0 3.73724
-2.03507 0.462907 0.134263 0 3.73724
...
-1.9969 0.464878 0.142745 0 3.74252
libusb: warning [winusbx_submit_control_transfer] ControlTransfer failed: [87] The parameter is incorrect.
libusb: warning [winusbx_submit_control_transfer] ControlTransfer failed: [87] The parameter is incorrect.
libusb: warning [winusbx_submit_control_transfer] ControlTransfer failed: [87] The parameter is incorrect.
libusb: warning [winusbx_submit_control_transfer] ControlTransfer failed: [87] The parameter is incorrect.
libusb: warning [winusbx_submit_control_transfer] ControlTransfer failed: [87] The parameter is incorrect.
libusb: warning [winusbx_submit_control_transfer] ControlTransfer failed: [87] The parameter is incorrect.
libusb: warning [winusbx_submit_control_transfer] ControlTransfer failed: [87] The parameter is incorrect.
libusb: warning [winusbx_submit_control_transfer] ControlTransfer failed: [87] The parameter is incorrect.
libusb: warning [winusbx_submit_control_transfer] ControlTransfer failed: [87] The parameter is incorrect.

I am not able to set thrust and engines are not work.
Could you advice me, whatI do incorrectly?

@fairlight1337
Copy link
Owner

Hi @qwertyuiop7370, thanks for getting in touch.

This could be related to this other issue where the setThrust command doesn't work until you sent a thrust of 0. You could try that and see whether this solves your problem. This is related to changes in the firmware from Crazyflie 1.0 to Crazyflie 2.0 as pointed out by others in that issue thread.

libcflie was specifically written for the Crazyflie 1.0 (as 2.0 wasn't out back then) and doesn't account for weirdness in compatibility yet. Let me know if the workaround works for you.

Apart from that, I have never seen the error message you mentioned:

libusb: warning [winusbx_submit_control_transfer] ControlTransfer failed: [87] The parameter is incorrect.

Given that winusbx is mentioned, I guess this is a compatibility problem between the libusb I used and the one present on your windows system. Can you verify that libusb's version? libcflie was built using, compiled, and tested with libusb-1.0. This could be a versioning problem.

Cheers,
Jan

@qwertyuiop7370
Copy link
Author

Win7 x64,
libusb from here https://sourceforge.net/projects/libusb/files/libusb-1.0/libusb-1.0.20/. Used WinGW64 static lib.
All built with mingw x86_64-5.2.0-posix-seh-rt_v4-rev1.
I set libusb_set_debug(m_ctxContext, LIBUSB_LOG_LEVEL_INFO);

crazyflie client from original site is work, but without Joystic the copter is not controlled. (i tried with Android client - the copter flies OK)

These libusb warnings are received somewhere in destructors after cycle was done.

I tried with
CCrazyflie cflieCopter(&crRadio);
cflieCopter.setThrust(0);
Result is some as above.

@cspk17
Copy link

cspk17 commented Feb 1, 2018

Hi,

Recently, I bought Crazyflie 2.0 and I am trying to setup the environment using libcflie.
I have now managed to get the 'setThrust' function working by modifying CCrazyflie.h and CCrazyflie.cpp.
I hope this can help you slove the issue.

-------- CCrazyflie.h----------

class CCrazyflie {
 private:
	bool m_bLocked; //cspk: add this member variable
...
};

-------- CCrazyflie.cpp---------

CCrazyflie::CCrazyflie(CCrazyRadio *crRadio) {
	m_bLocked = true; //cspk: initialize it in the constructor
        ....
}
bool CCrazyflie::sendSetpoint(float fRoll,float fPitch,float fYaw,unsigned short sThrust) {
	fPitch = -fPitch;

	if(m_bLocked) sThrust = 0; //cspk: add this line

	int nSize = 3 * sizeof(float) + sizeof(unsigned short);
	char cBuffer[nSize]; 
	memcpy(&cBuffer[0 * sizeof(float)],&fRoll,sizeof(float));
	memcpy(&cBuffer[1 * sizeof(float)],&fPitch,sizeof(float));
	memcpy(&cBuffer[2 * sizeof(float)],&fYaw,sizeof(float));
	memcpy(&cBuffer[3 * sizeof(float)],&sThrust,sizeof(unsigned short));

	CCRTPPacket *crtpPacket = new CCRTPPacket(cBuffer,nSize,3);
	CCRTPPacket *crtpReceived = m_crRadio->sendPacket(crtpPacket);

	delete crtpPacket;
	if(crtpReceived != NULL) {
		delete crtpReceived;
		m_bLocked = false;  //cspk: Motors are unlocked. Now we can use setThrust!!
		return true;
	}
	else {
		return false;
	}
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants