Code Monkey home page Code Monkey logo

inrol-quadrotor-platform-for-research's Introduction

InRoL Quadrotor Platform for Research

This is a repository for the system developed as a quadrotor research platform for interactive / network robotics laboratory in Seoul Natinal University

Overview

The system is built in two versions. USB2PPm system and ROS System. Each system consists of several subsystems as below.

  • USB2PPM System

    • PC USB2PPM interface
    • USB2PPM
    • Quadrotor
  • ROS System

    • GCS
    • Quadrotor

USB2PPM System

PC USB2PPM interface software

PC USB2PPM interface is the ground control software which interfaces with the USB2PPM. It is a library which provides functions to send RC commands throught the trainer port of the transmitter. Turnigy 9X is used as a transmitter in the current system.

USB2PPM

USB2PPM is a hardware developed to be enable the PC to interface with the Turnigy 9X transmitter. The USB2PPM receives commands through USB connection with the PC(UART Communication) and transmitts PPM signals to the trainer port of Turnigy 9X

Quadrotor

A custom quadrotor was developed to seve variable purposes such as aerial manipulation .etc The quadrotor is powered by a NAZE 32 flight controller.

inrol-quadrotor-platform-for-research's People

Contributors

jaeyoung-lim avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar

Forkers

leeoxe xiaoye-a

inrol-quadrotor-platform-for-research's Issues

ROS Installation memory problem

Process for installation is shown in the ROS onboard setup Odroid U3 in the pixhawk.org web

Issue 01 150513/18:01 ' [Errno 28] No space left on device: '/home/odroid/.ros' ' Problem is due to the memory partition in the sd card. A preinstalled SD Card was used. Shows the partition of memory usage ' sudo parted -l '

Problems with rate control

Control with angle mode of using usb2ppm in the vicon environment has been confirmed

However, rate control is not working properly and showing high oscillatory motions

This could be a result of

a. Bias of each channels on roll / pitch
b. control frequency - gain tuning issues
c. control resolution issue

Loiter Formation does not fly consistent

Loiter formation does not seem to be consistent.

Currently we use Stabilize mode to fly to the location and trigger loiter. This way, Loiter formation is not consistent

Offboard control Node Examples

Here is a offboard control node example

//Conversion Node

include <ros/ros.h>

include <std_msgs/String.h>

include <stdio.h>

include "geometry_msgs/PoseStamped.h"

include "geometry_msgs/TwistStamped.h"

include "geometry_msgs/TransformStamped.h"

geometry_msgs::PoseStamped msg_pose;
geometry_msgs::TwistStamped msg_vel;
double x_pre= 0.0, y_pre = 0.0, z_pre = 0.0;
double v_x_fil = 0.0, v_y_fil = 0.0, v_z_fil = 0.0;
double t_p = 0.0, t_n = 0.0, dt;

void Callback(const geometry_msgs::TransformStamped msg)
{
t_p = t_n;
t_n = ros::Time::now().toSec();
dt = t_n - t_p;

x_pre = msg_pose.pose.position.x;
y_pre = msg_pose.pose.position.y;
z_pre = msg_pose.pose.position.z;
msg_pose.pose.position.x = msg.transform.translation.x;
msg_pose.pose.position.y = msg.transform.translation.y;
msg_pose.pose.position.z = msg.transform.translation.z;

msg_pose.pose.orientation.x = msg.transform.rotation.x;
msg_pose.pose.orientation.y = msg.transform.rotation.y;
msg_pose.pose.orientation.z = msg.transform.rotation.z;
msg_pose.pose.orientation.w = msg.transform.rotation.w;

double gain = 0.5;
v_x_fil = gain*v_x_fil + (1-gain)*(msg_pose.pose.position.x-x_pre)/dt;
v_y_fil = gain*v_y_fil + (1-gain)*(msg_pose.pose.position.y-y_pre)/dt;
v_z_fil = gain*v_z_fil + (1-gain)*(msg_pose.pose.position.z-z_pre)/dt;

msg_vel.twist.linear.x = v_x_fil;
msg_vel.twist.linear.y = v_y_fil;
msg_vel.twist.linear.z = v_z_fil;

}

int main(int argc, char **argv)
{
ros::init(argc, argv, "conversion_node");
ros::NodeHandle n;
ros::Subscriber pose_sub = n.subscribe("/controller/measurements",240, Callback);
ros::Publisher pose_pub = n.advertise<geometry_msgs::PoseStamped>("/controller/controller_node/pose",480);
ros::Publisher vel_pub = n.advertise<geometry_msgs::TwistStamped>("/controller/controller_node/vel",480);
ros::Rate loop_rate(480);
ros::spinOnce();

int count = 0;
while (ros::ok())
{
msg_pose.header.stamp = ros::Time::now();
msg_pose.header.seq = count;
msg_pose.header.frame_id = 1;

pose_pub.publish(msg_pose);
vel_pub.publish(msg_vel);
ros::spinOnce();
loop_rate.sleep();
++count;

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.