PX4 Offboard Control with MAVROS

编程入门 行业动态 更新时间:2024-10-12 05:55:20

PX4 <a href=https://www.elefans.com/category/jswz/34/1426802.html style=Offboard Control with MAVROS"/>

PX4 Offboard Control with MAVROS

警告:请先在仿真环境下进行测试,能达到预期效果后在进行实际飞行测试,以免发生意外。本篇文章只是用作学习交流,实际飞行时如出现意外情况作者不予以负责。

所需材料

———————————————————————————————————————————

1、PIXhawk或者Pixracer

2、能够运行MAVROS的树莓派3B

3、一根micro USB 数据线

———————————————————————————————————————————

 在上一个片文章当中介绍了如何搭建ROS系统,并且运行MAVROS包来监听一个飞控消息,本篇文章将讨论如何使用MAVROS来控制无人机进行一键起飞功能。

一、创建一个offboard节点

1、在/catkin_ws/src目录中创建一个新的offb_node.cpp文件

roscd px4_mavros/src
vim offb_node.cpp

2、写入控制代码

 参考官网给出的历程

/*** @file offb_node.cpp* @brief Offboard control example node, written with MAVROS version 0.19.x, PX4 Pro Flight* Stack and tested in Gazebo SITL*/#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::Publisher local_pos_pub = nh.advertise<geometry_msgs::PoseStamped>("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 2Hzros::Rate rate(20.0);// wait for FCU connectionwhile(ros::ok() && !current_state.connected){ros::spinOnce();rate.sleep();}geometry_msgs::PoseStamped pose;pose.pose.position.x = 0;pose.pose.position.y = 0;pose.pose.position.z = 2;//send a few setpoints before startingfor(int i = 100; ros::ok() && 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::ok()){if( current_state.mode != "OFFBOARD" &&(ros::Time::now() - last_request > ros::Duration(5.0))){if( set_mode_client.call(offb_set_mode) &&offb_set_mode.response.mode_sent){ROS_INFO("Offboard enabled");}last_request = ros::Time::now();} else {if( !current_state.armed &&(ros::Time::now() - last_request > ros::Duration(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;
}

3、编辑CMakeLists.txt文件

rosed px4_mavros CMakeLists.txt
加入一下代码:

add_executable(offb_node src/offb_node.cpp)target_link_libraries(offb_node ${catkin_LIBRARIES})

4、编译源码

cd ~/catkin_ws
catkin_make

二、运行offboard节点

警告:在进行下面操作前请将螺旋桨摘除再进行测试,避免误伤。

1、运行启动文件

roslaunch mavros px4.launch

2、启动按钮解锁

 长按启动爱开关进行解锁操作。


3、运行节点

 如果有仿真环境,则可以看到飞行器缓缓升高,直至保持在一个高度。

rosrun px4_mavros offb_node


—————————————————————END———————————————————


参考文章:

.html









更多推荐

PX4 Offboard Control with MAVROS

本文发布于:2024-02-26 07:36:04,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1701759.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Offboard   MAVROS   Control

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!