搜索
热搜: 活动 交友 discuz
查看: 824|回复: 2

ROS在四旋翼上实现

[复制链接]

1

主题

2

帖子

17

积分

新手上路

Rank: 1

积分
17
发表于 2017-4-8 10:31:36 | 显示全部楼层 |阅读模式
各位大神你们好,
      我最近想要做无人机自主飞行的东西,我用了一块开发板在我的飞控上,并且已经安装了ros,我也稍微熟悉了ros,不知道有一起做的吗?我的飞控采用的是pixhawk的飞控,在网上找了例程,只会飞起来,但不会降落,降落需要改改程序  这个程序我不是很会,程序是c++的,我把程序放在这里,各位大神看看需要加什么语句,来实现降落就可以,不需要精准降落。程序是缓慢起飞两米的程序。我不知道发在这里合适吗?如果不合适我再发到别的地方,请大家指正。
#include <ros/ros.h>#include <geometry_msgs/PoseStamped.h>#include <mavros_msgs/CommandBool.h>#include <mavros_msgs/SetMode.h>#include <mavros_msgs/State.h>mavros_msgs::State current_state;void state_cb(const mavros_msgs::State::ConstPtr& msg){    current_state = *msg;}int main(int argc, char **argv){    ros::init(argc, argv, "offb_node");    ros::NodeHandle nh;    ros::Subscriber state_sub = nh.subscribe<mavros_msgs::State>            ("mavros/state", 10, state_cb);    ros:ublisher local_pos_pub = nh.advertise<geometry_msgs:oseStamped>            ("mavros/setpoint_position/local", 10);    ros::ServiceClient arming_client = nh.serviceClient<mavros_msgs::CommandBool>            ("mavros/cmd/arming");    ros::ServiceClient set_mode_client = nh.serviceClient<mavros_msgs::SetMode>            ("mavros/set_mode");    //the setpoint publishing rate MUST be faster than 2Hz    ros::Rate rate(20.0);    // wait for FCU connection    while(ros:k() && current_state.connected){        ros::spinOnce();        rate.sleep();    }    geometry_msgs:oseStamped pose;    pose.pose.position.x = 0;    pose.pose.position.y = 0;    pose.pose.position.z = 2;    //send a few setpoints before starting    for(int i = 100; ros:k() && i > 0; --i){        local_pos_pub.publish(pose);        ros::spinOnce();        rate.sleep();    }    mavros_msgs::SetMode offb_set_mode;    offb_set_mode.request.custom_mode = "OFFBOARD";    mavros_msgs::CommandBool arm_cmd;    arm_cmd.request.value = true;    ros::Time last_request = ros::Time::now();    while(ros:k()){        if( current_state.mode != "OFFBOARD" &&            (ros::Time::now() - last_request > ros:uration(5.0))){            if( set_mode_client.call(offb_set_mode) &&                offb_set_mode.response.success){                ROS_INFO("Offboard enabled");            }            last_request = ros::Time::now();        } else {            if( !current_state.armed &&                (ros::Time::now() - last_request > ros:uration(5.0))){                if( arming_client.call(arm_cmd) &&                    arm_cmd.response.success){                    ROS_INFO("Vehicle armed");                }                last_request = ros::Time::now();            }        }        local_pos_pub.publish(pose);        ros::spinOnce();        rate.sleep();    }    return 0;
回复

使用道具 举报

1

主题

2

帖子

17

积分

新手上路

Rank: 1

积分
17
 楼主| 发表于 2017-4-8 10:35:24 | 显示全部楼层
代码乱了,我发截图试试
回复 支持 反对

使用道具 举报

0

主题

1

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2017-4-14 18:14:48 | 显示全部楼层
我也想做,你的ros可以跑在嵌入式板子上吗
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|ROS中文网 ( 粤ICP备13079875号-1

GMT+8, 2017-8-18 22:24 , Processed in 0.137647 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2013 Design S!|ƽ̶

快速回复 返回顶部 返回列表