PX4开发中遇到的一些问题和解决方法

文章目录

  • 前言
  • 正文
    • 1. 仿真出现 FCU: Preflight Fail: Accel #0 uncalibrated等错误
    • 2.添加mavlink数据发送or提高数据发送频率
    • 3.PX4在不同硬件下的RC输入
    • 4.PX4 参数自定义
    • 5.电机输出顺序
    • 6. pixhawk硬件中,PX4不支持的部分
    • 7.PX4仿真出现raise OsNotDetected
    • 8. 删除gazebo一些没用的model path


前言

该博客主要记录PX4开发中遇到的一些问题以及解决方法,作为自己的笔记保留下来,每有新问题都会作记录,实时更新。


正文

在这里插入图片描述


1. 仿真出现 FCU: Preflight Fail: Accel #0 uncalibrated等错误

其实也不止这种错误,只要你发现仿真后,出现各种飞控初始化数据类型的报错(其他例子FCU: Preflight Fail: Baro Sensor #0 missing;takeoff altitude low …)。那我们都可以尝试输入下列命令,见电脑存储的仿真参数清空。然后我们再重新启动仿真,那么大概率问题就解决了。

rm ~/.ros/eeprom/parameters*
rm -rf ~/.ros/sitl*

2.添加mavlink数据发送or提高数据发送频率

在PX4与机载电脑通讯时,采用的是mavlink协议的数据,有时我们需要一些特定的数据,或者对其发布频率有要求。举个例子:在VINS使用飞控IMU数据时,我们需要ATTITUDE_QUATERNIONHIGHRES_IMU的数据达到200hz。得益于PX4架构的先进性,我们可以用如下方法简单的实现。

取出飞控SD卡,插入读卡器,使用电脑在该SD卡中创建etc文件夹。在该文件夹下,我们创建extras.txt文件,在里面输入如下内容(这一部是要提高飞控mavlink传输的频率,用于VINS,如果不更改其默认频率只有50hz,在VINS里是不够用的)

mavlink stream -d /dev/ttyACM0 -s ATTITUDE_QUATERNION -r 200
mavlink stream -d /dev/ttyACM0 -s HIGHRES_IMU -r 200

mavlink作为PX4中的一个顶层应用,它的具体用法,我们可以进入MAVLink console来查看:
PX4开发中遇到的一些问题和解决方法_第1张图片

当然需要注意的是上述设置输出的对应硬件设备是USB口。如果需要其他的设备输出那么我们需要注意设备名正确。

PX4中的usb和串口的设备名称,可以从硬件手册以及启动脚本中得到,如下图所示:

# start MAVLink on the USB port
mavlink start -d /dev/ttyACM0

PX4开发中遇到的一些问题和解决方法_第2张图片所以如果我们想使用别的端口输出相应的数据,只要更改正确的device 名称即可,for example:

mavlink stream -d /dev/ttyS1 -s ATTITUDE_QUATERNION -r 50

这样以来TELEM1口就可以输出ATTITUDE_QUATERNION的数据了,没有设置前是不会有的。不过需要的注意的一点是,TELEM1默认的baudrate为57600,传输速率为1200,这样的速度实际是不够的,其后果就是ATTITUDE_QUATERNIONHIGHRES_IMU的发布频率会远低于50hz,大概就只有15hz左右。

对此我们需要作如下参数修改,提高通信速度(注意!我这里的修改是针对TELEM1的,其串口的类似)

parameters vulue meaning
SER_TEL1_BAUD 115200 波特率设置
MAV_0_RATE 0 自动调整为当前baudrate理论最大传输速度的一半

最后需要说明的是,如果没有什么特别情况,飞控与机载电脑的连接还是最推荐用usb口连接,在PX4中usb对应的设备名称为/dev/tyyACM0,作为更高级的接口,它的传输速度和稳定性都高于一般的串口。而且对usb的虚拟串口进行连接时,其baudrate是可以自适应的,你随便给个baudrate都可以连接,不用去修改飞控参数。

3.PX4在不同硬件下的RC输入

最近再用两款硬件,一个是pixhawk4 mini,一个是cuav的nano。然后发现sbus信号不管插nano的sbus信号口,还是插入RC口都是可以识别信号的。结果在pixhawk4 mini下就只能在sbus口下插入可以识别,标注的那个ppm口就不行了。其实这看起来并没有什么,根据接口的标识这是理所应当的。不过,我还是很好奇为啥。于是我去看了看硬件的原理的图,pixhawk4 mini的原理图没有,但是nano的原理图很清楚:
PX4开发中遇到的一些问题和解决方法_第3张图片可以看到,RC_IN的接口在连线上与PPM和SBUS的接在了一起,所以RC口就成为了一个多用的信号接口。想来pixhawk4 mini的硬件设计必然没有这个连接,所以就各司其职,没有啥关系了。不过顺便一提的是在ardupilot的代码中,是可以采用电平信号的捕捉,只用一个引脚就实现所有输入信号的识别。

老实说这里这样的设计其实对用户并不太重要,只要能识别输入就ok了,不过好奇心又让我费了一些时间。

4.PX4 参数自定义

eg:

/**
 * Roll P gain
 *
 * Roll proportional gain, i.e. desired angular speed in rad/s for error 1 rad.
 *
 * @min 0.0
 * @max 12
 * @decimal 2
 * @increment 0.1
 * @group Multicopter Attitude Control
 */
PARAM_DEFINE_FLOAT(MC_ROLL_P, 6.5f); //so 6.5f? what does it mean? the default vuale? I guess so

定义的函数中,第一个为参数名称(地面显示出来的名称),第二个为默认参数(int类型参数值后面不用跟f,float类型的需要跟f)。

5.电机输出顺序

对于四旋翼而言,目前穿越机是非常流行的,相应的硬件也是非常的丰富和便宜。这对于我们搭建自己的四旋翼无人机来进行研究是非常方便的。不过对于4IN1电调来说,它的电机顺序定义一般是betaflight的顺序和PX4不太一样。如下图所示,左边是betaflight的默认顺序,右边是PX4的默认顺序。但是PX4中我们可以修改参数来很快的适配,装飞控的时候可以直接把4IN1的电调按照它的信号线序和飞控的main_out线序一一对应即可(即电调信号1对应飞控main输出1,电调信号2对应飞控main输出2…)而不用自己去看PX4机型输出的定义来手动完成整个对应关系了。
PX4开发中遇到的一些问题和解决方法_第4张图片 PX4开发中遇到的一些问题和解决方法_第5张图片

PX4开发中遇到的一些问题和解决方法_第6张图片

6. pixhawk硬件中,PX4不支持的部分

最近在学习和实践PX4代码中的混控器部分,找到了一些好帖子,兴致冲冲的跟着做,最后发现==“AUX"==没有按照我在sd卡里设置的混空器那样去执行。找了一晚上原因,终于!我在官方手册的nano的说明部分发现了下图。啊这!如果这几个引脚不是取名为A1,A2,A3的话,我想我可能早就察觉到了不对劲了,这实在太坑了,记录一下,避免以后再犯这样的错误!那么同样pixhawk4 mini 上面的4个cap口,PX4目前也是不能用的了。这样一看ardupilot果然是猛呀,支持的功能确实是多。
PX4开发中遇到的一些问题和解决方法_第7张图片

7.PX4仿真出现raise OsNotDetected

gazebo会出现不识别系统的提示,如下所示:

raise OsNotDetected("Could not detect OS, tried %s" % attempted)
rospkg.os_detect.OsNotDetected: Could not detect OS, tried ['zorin', 'windows', 'nixos', 'clearlinux', 'ubuntu', 'slackware', 'rocky', 'rhel', 'qnx', 'pop', 'osx', 'sailfishos', 'tizen', 'oracle', 'opensuse', 'opensuse', 'opensuse', 'opensuse', 'opensuse', 'openembedded', 'neon', 'mx', 'mint', 'linaro', 'gentoo', 'funtoo', 'freebsd', 'fedora', 'elementary', 'elementary', 'debian', 'cygwin', 'euleros', 'centos', 'manjaro', 'buildroot', 'arch', 'amazon', 'alpine', 'almalinux']

但是由于这部分报错的提示终端中并没有以红色打印出来,而是常规的字体颜色,这导致很容易让人忽略这个关键信息。一般发生这种情况还会伴随着下图所示的报错提示:
PX4开发中遇到的一些问题和解决方法_第8张图片这次检查一下:/etc/lsb-release,你会惊讶地发现怎么变成了Kylin?我明明是ubuntu呀?那么很有可能是你最近安装的一些.deb是来自于kylin的,比如微信。

DISTRIB_ID=Kylin
DISTRIB_RELEASE=V10
DISTRIB_CODENAME=kylin
DISTRIB_DESCRIPTION="Kylin V10 SP1"
DISTRIB_KYLIN_RELEASE=V10
DISTRIB_VERSION_TYPE=enterprise
DISTRIB_VERSION_MODE=normal

那么我们将他们更改成如下内容并保存(我这里是18.04.6)

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.6 LTS"

然后重启电脑即可生效

8. 删除gazebo一些没用的model path

在~/.gazebo/gui.ini文件中删除内容后,重新打开gazebo即可

你可能感兴趣的:(ubuntu,其他,经验分享)