addition of some additional buzz hooks

This commit is contained in:
David St-Onge 2016-11-18 14:05:31 -05:00
parent 66574a6653
commit 27bdabeda4
10 changed files with 250 additions and 37 deletions

View File

@ -28,8 +28,13 @@ void set_goto(double pos[]);
void rc_call(int rc_cmd); void rc_call(int rc_cmd);
/* sets the battery state */ /* sets the battery state */
void set_battery(float voltage,float current,float remaining); void set_battery(float voltage,float current,float remaining);
/* sets current position */
void set_currentpos(double latitude, double longitude, double altitude);
/*retuns the current go to position */ /*retuns the current go to position */
double* getgoto(); double* getgoto();
/* updates flight status*/
void flight_status_update(uint8_t state);
/* /*
* Commands the UAV to takeoff * Commands the UAV to takeoff
*/ */
@ -47,6 +52,14 @@ int buzzuav_gohome(buzzvm_t vm);
* Updates battery information in Buzz * Updates battery information in Buzz
*/ */
int buzzuav_update_battery(buzzvm_t vm); int buzzuav_update_battery(buzzvm_t vm);
/*
* Updates current position in Buzz
*/
int buzzuav_update_currentpos(buzzvm_t vm);
/*
* Updates flight status in Buzz
*/
int buzzuav_update_flight_status(buzzvm_t vm);
/* /*
* Updates IR information in Buzz * Updates IR information in Buzz

View File

@ -4,6 +4,7 @@
#include "mavros_msgs/GlobalPositionTarget.h" #include "mavros_msgs/GlobalPositionTarget.h"
#include "mavros_msgs/CommandCode.h" #include "mavros_msgs/CommandCode.h"
#include "mavros_msgs/CommandInt.h" #include "mavros_msgs/CommandInt.h"
#include "mavros_msgs/ExtendedState.h"
#include "mavros_msgs/State.h" #include "mavros_msgs/State.h"
#include "mavros_msgs/BatteryStatus.h" #include "mavros_msgs/BatteryStatus.h"
#include "mavros_msgs/Mavlink.h" #include "mavros_msgs/Mavlink.h"
@ -50,6 +51,7 @@ private:
ros::Subscriber current_position_sub; ros::Subscriber current_position_sub;
ros::Subscriber battery_sub; ros::Subscriber battery_sub;
ros::Subscriber payload_sub; ros::Subscriber payload_sub;
ros::Subscriber flight_status_sub;
/*Create node Handler*/ /*Create node Handler*/
ros::NodeHandle n_c; ros::NodeHandle n_c;
/*Commands for flight controller*/ /*Commands for flight controller*/
@ -61,36 +63,40 @@ private:
/*Obtain data from ros parameter server*/ /*Obtain data from ros parameter server*/
void Rosparameters_get(); void Rosparameters_get();
/*compiles buzz script from the specified .bzz file*/
void Compile_bzz(); void Compile_bzz();
/*Prepare messages and publish*/ /*Prepare messages and publish*/
inline void prepare_msg_and_publish(); void prepare_msg_and_publish();
/*Refresh neighbours Position for every ten step*/ /*Refresh neighbours Position for every ten step*/
inline void maintain_pos(int tim_step); void maintain_pos(int tim_step);
/*Maintain neighbours position*/ /*Maintain neighbours position*/
inline void neighbours_pos_maintain(int id, buzz_utility::Pos_struct pos_arr ); void neighbours_pos_maintain(int id, buzz_utility::Pos_struct pos_arr );
/*Set the current position of the robot callback*/ /*Set the current position of the robot callback*/
inline void set_cur_pos(double latitude, void set_cur_pos(double latitude,
double longitude, double longitude,
double altitude); double altitude);
/*convert from catresian to spherical coordinate system callback */ /*convert from catresian to spherical coordinate system callback */
inline double* cvt_spherical_coordinates(double neighbours_pos_payload []); double* cvt_spherical_coordinates(double neighbours_pos_payload []);
/*battery status callback*/ /*battery status callback*/
inline void battery(const mavros_msgs::BatteryStatus::ConstPtr& msg); void battery(const mavros_msgs::BatteryStatus::ConstPtr& msg);
/*flight status callback*/
void flight_status_update(const mavros_msgs::ExtendedState::ConstPtr& msg);
/*current position callback*/ /*current position callback*/
inline void current_pos(const sensor_msgs::NavSatFix::ConstPtr& msg); void current_pos(const sensor_msgs::NavSatFix::ConstPtr& msg);
/*payload callback callback*/ /*payload callback callback*/
inline void payload_obt(const mavros_msgs::Mavlink::ConstPtr& msg); void payload_obt(const mavros_msgs::Mavlink::ConstPtr& msg);
/* RC commands service */ /* RC commands service */
inline bool rc_callback(mavros_msgs::CommandInt::Request &req, bool rc_callback(mavros_msgs::CommandInt::Request &req,
mavros_msgs::CommandInt::Response &res); mavros_msgs::CommandInt::Response &res);

View File

@ -0,0 +1,100 @@
#pragma once
#include "ros/ros.h"
#include "sensor_msgs/NavSatFix.h"
#include "mavros_msgs/GlobalPositionTarget.h"
#include "mavros_msgs/CommandCode.h"
#include "mavros_msgs/CommandInt.h"
#include "mavros_msgs/State.h"
#include "mavros_msgs/BatteryStatus.h"
#include "mavros_msgs/Mavlink.h"
#include "sensor_msgs/NavSatStatus.h"
#include <sstream>
#include <buzz/buzzasm.h>
#include "buzzuav_closures.h"
#include "buzz_utility.h"
#include "uav_utility.h"
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <signal.h>
#include <ostream>
#include <map>
using namespace std;
namespace rosbzz_node{
class roscontroller{
public:
roscontroller();
~roscontroller();
//void RosControllerInit();
void RosControllerRun();
private:
double cur_pos[3];
uint64_t payload;
std::map< int, buzz_utility::Pos_struct> neighbours_pos_map;
int timer_step=0;
int robot_id=0;
int oldcmdID=0;
int rc_cmd;
std::string bzzfile_name, fcclient_name, rcservice_name,bcfname,dbgfname; //, rcclient;
bool rcclient;
ros::ServiceClient mav_client;
ros::Publisher payload_pub;
ros::ServiceServer service;
ros::Subscriber current_position_sub;
ros::Subscriber battery_sub;
ros::Subscriber payload_sub;
/*Create node Handler*/
ros::NodeHandle n_c;
/*Commands for flight controller*/
mavros_msgs::CommandInt cmd_srv;
void Initialize_pub_sub();
/*Obtain data from ros parameter server*/
void Rosparameters_get();
void Compile_bzz();
/*Prepare messages and publish*/
inline void prepare_msg_and_publish();
/*Refresh neighbours Position for every ten step*/
inline void maintain_pos(int tim_step);
/*Maintain neighbours position*/
inline void neighbours_pos_maintain(int id, buzz_utility::Pos_struct pos_arr );
/*Set the current position of the robot callback*/
inline void set_cur_pos(double latitude,
double longitude,
double altitude);
/*convert from catresian to spherical coordinate system callback */
inline double* cvt_spherical_coordinates(double neighbours_pos_payload []);
/*battery status callback*/
inline void battery(const mavros_msgs::BatteryStatus::ConstPtr& msg);
/*current position callback*/
inline void current_pos(const sensor_msgs::NavSatFix::ConstPtr& msg);
/*payload callback callback*/
inline void payload_obt(const mavros_msgs::Mavlink::ConstPtr& msg);
/* RC commands service */
inline bool rc_callback(mavros_msgs::CommandInt::Request &req,
mavros_msgs::CommandInt::Response &res);
};
}

View File

@ -301,7 +301,9 @@ void buzz_script_step() {
*/ */
buzzuav_closures::buzzuav_update_battery(VM); buzzuav_closures::buzzuav_update_battery(VM);
buzzuav_closures::buzzuav_update_prox(VM); buzzuav_closures::buzzuav_update_prox(VM);
/* buzzuav_closures::buzzuav_update_currentpos(VM);
buzzuav_closures::buzzuav_update_flight_status(VM);
/*
* Call Buzz step() function * Call Buzz step() function
*/ */
if(buzzvm_function_call(VM, "step", 0) != BUZZVM_STATE_READY) { if(buzzvm_function_call(VM, "step", 0) != BUZZVM_STATE_READY) {

View File

@ -10,6 +10,8 @@
namespace buzzuav_closures{ namespace buzzuav_closures{
static double goto_pos[3]; static double goto_pos[3];
static float batt[3]; static float batt[3];
static double cur_pos[3];
static uint8_t status;
static int cur_cmd; static int cur_cmd;
static int rc_cmd=0; static int rc_cmd=0;
/****************************************/ /****************************************/
@ -148,6 +150,51 @@ int buzzuav_update_battery(buzzvm_t vm) {
buzzvm_gstore(vm); buzzvm_gstore(vm);
return vm->state; return vm->state;
} }
/****************************************/
/*current pos update*/
/***************************************/
void set_currentpos(double latitude, double longitude, double altitude){
cur_pos[0]=latitude;
cur_pos[1]=longitude;
cur_pos[2]=altitude;
}
/****************************************/
int buzzuav_update_currentpos(buzzvm_t vm) {
buzzvm_pushs(vm, buzzvm_string_register(vm, "position", 1));
buzzvm_pusht(vm);
buzzvm_dup(vm);
buzzvm_pushs(vm, buzzvm_string_register(vm, "latitude", 1));
buzzvm_pushf(vm, cur_pos[0]);
buzzvm_tput(vm);
buzzvm_dup(vm);
buzzvm_pushs(vm, buzzvm_string_register(vm, "longitude", 1));
buzzvm_pushf(vm, cur_pos[1]);
buzzvm_tput(vm);
buzzvm_dup(vm);
buzzvm_pushs(vm, buzzvm_string_register(vm, "altitude", 1));
buzzvm_pushf(vm, cur_pos[2]);
buzzvm_tput(vm);
buzzvm_gstore(vm);
return vm->state;
}
/****************************************/
/*flight status update*/
/***************************************/
void flight_status_update(uint8_t state){
status=state;
}
/****************************************/
int buzzuav_update_flight_status(buzzvm_t vm) {
buzzvm_pushs(vm, buzzvm_string_register(vm, "flight", 1));
buzzvm_pusht(vm);
buzzvm_dup(vm);
buzzvm_pushs(vm, buzzvm_string_register(vm, "status", 1));
buzzvm_pushf(vm, status);
buzzvm_tput(vm);
buzzvm_gstore(vm);
return vm->state;
}
/****************************************/ /****************************************/
/*To do !!!!!*/ /*To do !!!!!*/

View File

@ -1,4 +1,4 @@
!11 !21
'init 'init
'i 'i
'uav_takeoff 'uav_takeoff
@ -7,6 +7,16 @@
'bzz print: remaining: 'bzz print: remaining:
'battery 'battery
'capacity 'capacity
'latitude :
'position
'latitude
' longitude:
'longitude
' altitude :
'altitude
'flight status:
'flight
'status
'uav_land 'uav_land
'reset 'reset
'destroy 'destroy
@ -17,10 +27,10 @@
pushs 3 pushs 3
pushcn @__label_2 pushcn @__label_2
gstore gstore
pushs 9 pushs 19
pushcn @__label_5 pushcn @__label_5
gstore gstore
pushs 10 pushs 20
pushcn @__label_6 pushcn @__label_6
gstore gstore
nop nop
@ -50,26 +60,54 @@
tget |10,48,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz tget |10,48,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
pushi 2 |10,49,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz pushi 2 |10,49,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
callc |10,49,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz callc |10,49,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
pushs 1 |11,4,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz pushs 4 |11,5,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
gload |11,4,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz gload |11,5,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
pushi 20 |11,5,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz pushs 8 |11,6,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
gt |11,7,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz pushs 9 |11,28,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
jumpz @__label_3 |11,8,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz gload |11,28,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
pushs 8 |11,17,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz pushs 10 |11,29,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
gload |11,17,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz tget |11,37,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
pushi 0 |11,19,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz pushs 11 |11,38,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
callc |11,19,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz pushs 9 |11,61,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
@__label_3 |12,0,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz gload |11,61,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
pushs 1 |12,1,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz pushs 12 |11,62,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
pushs 1 |12,3,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz tget |11,71,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
gload |12,3,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz pushs 13 |11,72,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
pushi 1 |12,4,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz pushs 9 |11,96,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
add |12,5,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz gload |11,96,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
gstore |12,5,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz pushs 14 |11,97,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
ret0 |14,1,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz tget |11,105,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
pushi 6 |11,106,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
callc |11,106,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
pushs 4 |12,5,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
gload |12,5,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
pushs 15 |12,6,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
pushs 16 |12,30,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
gload |12,30,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
pushs 17 |12,31,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
tget |12,37,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
pushi 2 |12,38,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
callc |12,38,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
pushs 1 |13,4,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
gload |13,4,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
pushi 10 |13,6,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
eq |13,8,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
jumpz @__label_3 |13,9,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
pushs 18 |13,18,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
gload |13,18,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
pushi 0 |13,20,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
callc |13,20,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
@__label_3 |14,0,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
pushs 1 |14,1,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
pushs 1 |14,3,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
gload |14,3,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
pushi 1 |14,4,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
add |14,5,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
gstore |14,5,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
ret0 |16,1,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
@__label_5 @__label_5
ret0 |18,1,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz ret0 |20,1,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz
@__label_6 @__label_6
ret0 |22,1,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz ret0 |24,1,/home/ubuntu/ROS_WS/src/ROSBuzz/src/test.bzz

Binary file not shown.

Binary file not shown.

View File

@ -79,9 +79,10 @@ namespace rosbzz_node{
void roscontroller::Initialize_pub_sub(){ void roscontroller::Initialize_pub_sub(){
/*subscribers*/ /*subscribers*/
current_position_sub = n_c.subscribe("/dji_sdk/global_position", 1000, &roscontroller::current_pos,this); current_position_sub = n_c.subscribe("/mav/global_position", 1000, &roscontroller::current_pos,this);
battery_sub = n_c.subscribe("/mav/power_status", 1000, &roscontroller::battery,this); battery_sub = n_c.subscribe("/mav/power_status", 1000, &roscontroller::battery,this);
payload_sub = n_c.subscribe("inMavlink", 1000, &roscontroller::payload_obt,this); payload_sub = n_c.subscribe("inMavlink", 1000, &roscontroller::payload_obt,this);
flight_status_sub =n_c.subscribe("/mav/flight_status",100, &roscontroller::flight_status_update,this);
/*publishers*/ /*publishers*/
payload_pub = n_c.advertise<mavros_msgs::Mavlink>("outMavlink", 1000); payload_pub = n_c.advertise<mavros_msgs::Mavlink>("outMavlink", 1000);
/* Clients*/ /* Clients*/
@ -140,7 +141,7 @@ namespace rosbzz_node{
cout<<" [Debug:] sent message "<<*it<<endl; cout<<" [Debug:] sent message "<<*it<<endl;
i++; i++;
}*/ }*/
/*publish prepared messages in respective topic*/ /*publish prepared messages in respective topic*/
payload_pub.publish(payload_out); payload_pub.publish(payload_out);
delete[] out; delete[] out;
delete[] payload_out_ptr; delete[] payload_out_ptr;
@ -191,10 +192,14 @@ namespace rosbzz_node{
buzzuav_closures::set_battery(msg->voltage,msg->current,msg->remaining); buzzuav_closures::set_battery(msg->voltage,msg->current,msg->remaining);
//ROS_INFO("voltage : %d current : %d remaining : %d",msg->voltage, msg->current, msg ->remaining); //ROS_INFO("voltage : %d current : %d remaining : %d",msg->voltage, msg->current, msg ->remaining);
} }
/*flight status update*/
void roscontroller::flight_status_update(const mavros_msgs::ExtendedState::ConstPtr& msg){
buzzuav_closures::flight_status_update(msg->landed_state);
}
/*current position callback*/ /*current position callback*/
void roscontroller::current_pos(const sensor_msgs::NavSatFix::ConstPtr& msg){ void roscontroller::current_pos(const sensor_msgs::NavSatFix::ConstPtr& msg){
set_cur_pos(msg->latitude,msg->longitude,msg->altitude); set_cur_pos(msg->latitude,msg->longitude,msg->altitude);
buzzuav_closures::set_currentpos(msg->latitude,msg->longitude,msg->altitude);
} }
/*payload callback callback*/ /*payload callback callback*/

View File

@ -8,7 +8,9 @@ uav_takeoff()
function step() { function step() {
print("bzz print: remaining: ", battery.capacity) print("bzz print: remaining: ", battery.capacity)
if(i>20){uav_land()} print("latitude : ",position.latitude," longitude: ",position.longitude," altitude : ", position.altitude)
print("flight status: ",flight.status)
if(i==10){uav_land()}
i=i+1 i=i+1
} }