• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

ROS无人机自主飞行数传和串口和PX4配置问题

武飞扬头像
SLASH^
帮助1

ROS无人机自主飞行与PX4配置问题

文中引用均为参考,部分内容转载!特感谢提供了参考!

PX4的配置

  • 首先需要对PX4烧写固件,版本问题上其实没有很多区别,目前我所用的最新版本——1.12.3版本的px4_fmu_v3_default,下载这个后在固件处烧写
  • 完成基本飞控配置参考阿木实验室第五条基本配置
    • 固件刷写
    • 机架选择
    • 传感器校准
    • 遥控器校准
    • 飞形模式调整
    • 电池校准
    • 电调校准(参考后面,这里的px4校准会有问题)

常见问题:

首先可以参考:常见参数配置pixhawk 2.4.8所有问题

!电调校准

把这个问题直接放到了最前方,因为这个问题困惑了快一周,因为想要测试无人机在offboard模式下用ros控制自主飞行,但是数次尝试后发现竟然莫名其妙的把电调动了,根本原因应该是错误操作使油门上下阈值变化了!

问题现象:

主要是解锁后,会出现一个甚至多个电机不转,但是给大油门后会转,然后用QGC的motor测试,发现给相同的油门响应,“坏的电机”会不反应,只有给很大才会转。

尝试与发现:

其实就是需要电调校准,校准方法非常讲究。。。

因为我们实验室用的是阿木实验室Z410飞机,原先似乎是APM固件,而我们一般都会用PX4固件。这里就牵扯到他电机校准上的不同了。我发现用QGC里面这个方法不太管用,没有效果。

学新通

于是我查了很多方法,比如用MissionPlanner中刷APM固件再电调校准,理论上是可以,就连售后也这么说的。。。

但是奈何不太会用MP,于是找了很多不需要地面站的校准方法,主要就是插拔上电,给遥控器油门的上下阈值。

具体校准方法:
  • 第一步:要先烧写APM固件(没错就是这么迷惑,先烧成APM校准完电调再烧回PX4就好)

    • 在QGC里选择自定义固件版本,烧写APM固件ArduCopter-v3.px4,这个是我找到的比较合适的版本。
  • 第二步:可以直接在QGC里操作,只用选择机型和校准遥控器,可以先不校准传感器,遥控器校准了才能校准电调。

  • 第三步:校准电调。我主要参考了这个

    • 断掉所有与飞控的连接,包括桨叶、usb线
    • 遥控器打开把油门给到最大,然后给飞控上电(电池上电),当PIXHAWK红绿蓝灯周期闪烁(大led灯)后,给飞控断电
    • 油门继续保持最大状态,重新给飞控上电,当听到滴滴的声音结束后,长按安全开关直至变成红色常亮(原来是闪烁),此时进入电调校准状态
    • 电调校准状态下听到“滴”的一声(或两声,甚至出现一阵音乐声都有可能),此时就捕获了最大油门。然后迅速把遥控器油门下压到最小,再听到类似“滴”的一声后,捕获了最小油门。
    • 此时校准完成,改变油门可以控制电机转速。终于可以看到四个电机又能同时转了!
  • 第四步:解锁尝试,油门推至右下角,解锁成功就会四旋翼怠速旋转。bingo!

  • 补充:别忘了现在是APM固件,记得在QGC里重新烧写PX4固件。完成除了电调校准的其他步骤即可。(也就是别点上面那张图里的)

1. compass xx inconsistent

提示罗盘某个角度未被包含,而且经常不同。 解决方法:COM_ARM_MAG_ANG设为-1

可能会提示不让设置,然后弹出点击强制保存。

学新通

2. high Accelerometer bios

提示加速度计偏移过大。解决方法:把com_arm_ekf_ab这个参数调大一些

学新通

3. Accels inconsistent - check cal

把这个参数COM_ARM_IMU_ACC改大一些,以加速度计为例,如果陀螺仪出现类似报错也是修改相应的参数。

4. USB连接检查

这个参数是检查起飞时是否有USB连接,默认情况下有USB连接时是无法解锁的,如果需要插USB解锁,需要设置为197848
学新通

5. 安全开关检查

默认情况下安全开关是慢闪状态,设置该参数为22027时,上电后安全开关自动切换为双闪。
学新通

注意,如果改了后可能会出现:只有插上usb线同时上电才能解锁飞机的情况,而没有插usb单独用遥控器解锁的话,可能无法解锁。当时我遇到这个问题困惑了半天,最后发现是这个问题,所以最后又改回了0。

ROS控制PX4

因为我最终目标是NX板载控制,所以其实只用有线连接就可以,但是真机飞行很危险而且代价较高,所以建议用无线数传先做测试。

1. 有线控制

usb线连接无人机pixhawk,先查看下端口连接的信息:

ls /dev/tty*        # 下面两句只运行一句即可(根据有 ttyUSB0 还是 ttyACM0)

终端运行:(我的是ACM0)

roslaunch mavros px4.launch fcu_url:=/dev/ttyUSB0:57600  #有ttyUSB0
roslaunch mavros px4.launch fcu_url:=/dev/ttyACM0:57600  #有ttyACM0

此时就是用串口连接了无人机,我们可以运行我们的代码:

依旧是官方的offb_node文件实例

/**
 * @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 = 0;
    pose.pose.position.y = 0;
    pose.pose.position.z = 2;

    //send a few setpoints before starting
    for(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;
}
学新通

终端运行:(ros包流程)

cd ~/catkin_ws/src
catkin_create_pkg offb geometry_msgs mavros roscpp
#程序包名称 pi_offboard_px4,依赖的包 geometry_msgs, mavros 和 roscpp

cd offb/src
touch offb_node.cpp
vim offb_node.cpp    #添加上面的代码

注意别忘了在CMakeLists文件里配置。

cd ~/catkin_ws/src/offb/
vim CMakeLists.txt

更改添加:

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

编译:

catkin_make 				#编译
catkin_make install
source devel/setup.bash     #配置catkin 工作空间

在上面运行了roslaunch之后就可以运行:

rosrun offb offb_node
注意

offboard模式一定要gps信息,所以只能在室外测试。我们在roslaunch端中看不到提示NO GPS FIX 信息就代表搜到了星,或者查看mavros话题:

rostopic list
rostopic echo /mavros/altitude								# 高度信息
rostopic echo /mavros/local_position/local       # 这个是绝对的gps信息

上电后,没有上桨的话可能电机会一直转,甚至加速,我们上下移动飞机,会发现电机转速变化。所以测试一下就断电吧。

我们查看local里的信息发现信息位置并不是0,0,0。而且会跳变,这就牵扯到了我们在代码里写的0,0,2。但是起点不是0,0,0,这是非常危险的!!!因为根本不知道会朝哪里飞。所以后续会不使用绝对位置飞行,而采用线速度飞行,以时间控制距离结束自主降落。

2. 无线数传

现在很多数传都直接使用wifi,我们只需要在pc端连接飞机数传wifi信息:

例如:

wifi名: cuavwlink_xxxxx
wifi密码:xxxxxx
UDP: 14550

连接了WiFi后,先查看WiFi设置里看到IPV4端口,其实就是找到位置如192.168.4.2之类的(结尾应该是2因为飞机是1)

运行:(注意格式):前面的是udp后面是端口,最后的24580好像随便输一个就行,感觉类似自定义命名。

roslaunch mavros px4.launch fcu_url:=udp://:14550@192.168.4.2:24580

看到类似这样的黄色提示是正常的(除了GPS,因为我现在在室内敲得这段)。

然后就可以继续rosrun了。注意安全!!!

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgehjji
系列文章
更多 icon
同类精品
更多 icon
继续加载