拥抱AI – 使用Jetson Xavier NX控制APM飞控(未完待续)

一、在Jetson Xavier NX(下面简称NX)上安装DroneKit

1、安装必要的工具包

# 这一步可能会反复出错,多次尝试后应该可以成功安装所有的工具包
sudo apt install libxml2-dev libxslt1-dev zlib1g-dev python-py

2、将你的飞控代码(ardupilot源代码,已经切换好版本并更新过子模块的)中的ardupilot/modules/mavlink文件夹复制到Jeston Xavier NX的任意目录下;

3、使用如下命令安装pymavlink包:

# 进入pymavlink子目录
cd mavlink/pymavlink

#安装pymavlink
python3 setup.py install

注意,由于我们是直接使用ardupilot源代码中的代码安装的pymavlink包,因此可以做到安装的pymavlink包支持的mavlink帧与飞控支持的mavlink帧是一模一样的(版本完全相同)。

4、从GitHub上下载Dronekit-python源代码,并进行安装:

# 下载dronekit-python源代码
git clone https://github.com/dronekit/dronekit-python.git

# 进入dronekit-python目录
cd dronekit-python

# 安装dronekit-python
python3 setup.py install

二、使用USB线将Jetson Xavier NX与飞控连起来

如下图所示,将APM飞控(准确来讲是运行APM固件的pixhawk飞控或者其升级版)的USB直接插到Jetson Xavier NX的USB上。(注意,“鹏心”飞控的USB是通过GH连接器引出的,下图中的彩色线缆是一个GH连接器转USB Type-C的线缆,内部不含任何转换芯片)。

飞控会被识别为:“ttyACM0”和“ttyACM1”(如下图所示),其中“ttyACM0”与飞控插到Windows电脑时识别出的串口是一样的,用法也是一模一样的。

注意,普通用户是没有对tty类设备的访问权限的,如果想让默认用户拥有对其的访问权限,需要将该用户添加到“dialout”用户组中,以用户名为“nfcy”为例,使用如下命令将“nfcy”用户添加到“ dialout ”用户组中:

sudo gpasswd --add nfcy dialout

三、首次连接测试

在Jetson Xavier NX上新建一个“DroneKit_test.py”的python文件,将如下代码填入此文件:

from dronekit import connect

print("connecting...")
 
# Connect to the Vehicle
vehicle = connect('/dev/ttyACM0', wait_ready=True, baud=921600)
 
# vehicle is an instance of the Vehicle class
print("Autopilot Firmware version: %s" % vehicle.version)
print("Autopilot capabilities (supports ftp): %s" % vehicle.capabilities.ftp)

print("Attitude: %s" % vehicle.attitude)
print("Velocity: %s" % vehicle.velocity)
print("GPS: %s" % vehicle.gps_0)


print("Battery: %s" % vehicle.battery)
print("EKF OK?: %s" % vehicle.ekf_ok)

print("Rangefinder: %s" % vehicle.rangefinder)
print("Rangefinder distance: %s" % vehicle.rangefinder.distance)

print("Heading: %s" % vehicle.heading)
print("Is Armable?: %s" % vehicle.is_armable)
print("System status: %s" % vehicle.system_status.state)
print("Mode: %s" % vehicle.mode.name)
print("Armed: %s" % vehicle.armed)

运行此python程序:

# 注意,必须加上sudo,否则无权限访问飞控硬件对应的串口
sudo python DroneKit_test.py

输出如下(注意,第一行“connecting…”提示出现后会等待几秒钟,这是正常的,这时二者正在进行建立连接,需要一定的时间):

从上图可以看出,NX成功连接飞控,并且读取到了飞控固件的版本号(Copter-4.0.6)、飞控姿态、GPS状态等信息。这背后使用的就是Mavlink协议,但是DroneKit帮我们把Mavlink协议的打包发送和接收解帧都封装好了,用起来非常方便。

四、首个NX控制飞控解锁、运行、重新锁定的示例

前提条件:

  • 飞机或者无人车在没有加上NX之前已经能够正常运行(手动控制、自动控制均无问题);
  • 做好安全防护:遥控器能够随时切回手动控制;人离得足够远;测试场地安全合法;

任务目标:

  1. 等待GPS定位良好,并且飞控处于可以解锁的情况下;
  2. 当检测到遥控器通道6的值从一个小于1800的值变为大于1800的值时;
  3. 自动解锁;
  4. 自动起飞到2米高度并悬停5秒;
  5. 自动飞行到正前方3米处;
  6. 自动向右飞行3米;
  7. 航向自动转到正东方向;
  8. 自动切到RTL模式(注意,请提前在飞控参数中将RTL模式的动作设置为返航后自动降落)

未完待续……

例程准备中……

视频筹划中……

此教程将会更新到我们的《无人机飞控固件开发教程》中,链接:https://study.163.com/course/introduction/1209568864.htm?share=1&shareId=1448054983 对于已经购买此教程的学员,此更新是免费的(后面其他的更新对于已经购买此教程的学员也会永远免费)。

京ICP备19049723号   |   京公网安备 11010502039327号