|
发表于 2021-3-13 11:56:01
10479 浏览 9 回复
固定翼飞行到目标点仿真gazebo
目的:机载计算机用mavros控制固定翼飞机飞到某一个点。仿真gazebo中显示已经切入offboard模式了,但是飞机就是不懂,地面站也提示进入offboard
代码如下:
或者说应该怎么实现固定翼飞机没到目标点
但是飞机不飞向目标点。
- /**
- * @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 2Hz
- ros::Rate rate(20.0);
- // wait for FCU connection
- while(ros::ok() && !current_state.connected){
- ros::spinOnce();
- rate.sleep();
- }
- geometry_msgs::PoseStamped pose;
- pose.pose.position.x =200;
- pose.pose.position.y = 200;
- pose.pose.position.z = 25;
- //send a few setpoints before starting
- for(int i = 5; 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(2.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(2.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;
- }
复制代码
eason已获得悬赏 1 阿木币最佳答案
固定翼的指点飞行指的是在某个位置为中心进行盘旋.
|
 扫一扫浏览分享
|
|
|
|
|
|
|
发表于 2021-3-13 14:21:01
|
|
|
|
|
|
|
楼主|
发表于 2021-3-13 14:24:36
如果是这样的话,那应该会飞到pose位置进行盘旋啊,可是切换道offboard模式以后飞不了 |
|
|
|
|
|
|
|
发表于 2021-3-13 14:27:15
不是这么简单的。先让飞机飞起来,在空中进行盘旋,然后你在发期望位置,发完之后切换到offboard模式。 |
|
|
|
|
|
|
|
发表于 2021-3-13 14:28:04
|
|
|
|
|
|
|
楼主|
发表于 2021-3-13 14:28:23
飞机已经在空中了,切到offboard模式发送pose完,飞机慢慢下降到地面了 |
|
|
|
|
|
|
|
发表于 2021-3-13 14:53:46
总之off_node应该不能直接用在固定翼上面的,px4_command应该是可以。off_node只是个简单的demo,系统状态,指令发送都没有。 |
|
|
|
|
|
|
|
楼主|
发表于 2021-3-13 16:38:12
|
|
|
|
|
|
|
发表于 2021-3-18 18:19:36
本帖最后由 qq286907986 于 2021-3-18 18:20 编辑
你要先takeoff,然后再offboard |
|
|
|
|
|
|
|
发表于 2021-3-19 09:14:51
px_command是阿木实验室 GitHub的一个包 你可以去GitHub搜搜看 是开源的 |
|
|
|
|
|
|
|