提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一:硬件准备
- 两种界面化显示的方式
- 无线连接
- 有线连接
- 二:软件准备
- 1:远程登录软件 NoMachine
- 2:安装ros
- 3:源码安装mavros(示例的ros版本为noetic)
- PX4和NX通信
- 硬件连接
- 软件配置
- 连接验证
- 基于机载电脑利用==optitrack==为PX4提供定位
- ubuntu机载电脑环境配置
前言
- 基于NVIDIA Xavier NX(ubuntu20.04)的Optitrack视觉定位 PX4+ros noetic(实 物运行记录)
- 这里的NVIDIA Xavier Nx使用的瑞泰新时代(北京的)
- 使用的源码安装mavros
- NX不支持QGC地面站 因此飞控的调参需要用主机调整
一:硬件准备
一台主电脑
Nx
网线 (我是没有wifi模块 需要网线联网)
无线网卡(远程连接安有movelt的pc机时需要)
两种界面化显示的方式
无线连接
不需要显示屏和网线,用主机电脑
通过nomachine 软件,后面会讲解怎么用
有线连接
需要显示屏和网线
nx是HDMI接口,根据显示屏的不同,需要HDMI转DVI或者HDMI转VGA
二:软件准备
1:远程登录软件 NoMachine
(1)Linux系统Nomachine的下载
主机 Linux版的下载地址:https://downloads.nomachine.com/linux/?id=1
英伟达 NX Linux版的下载地址:https://downloads.nomachine.com/linux/?id=30&distro=Arm
(2)解压安装包
在所在路径终端输入 解压命令
参考命令(版本号不同,可以用Tab补全):
sudo tar zxvf nomachine_8.1.2_1_x86_64.tar.gz
(3)添加权限
sudo chmod -R 777 NX
(4)下载安装包
转到NX目录 运行nxserver自动完成下载
cd NX
sudo ./nxserver --install
(5)在linux主机下控制NVIDIA Xavier NX(ubuntu)
这里第一次使用,可能会弹出一些窗口,不过不影响,全部next,或对就可以用了。
注意:对于windows控制linux同理
2:安装ros
小鱼一键安装ros代码
wget http://fishros.com/install -O fishros && bash fishros
3:源码安装mavros(示例的ros版本为noetic)
参考:https://blog.csdn.net/jppdss/article/details/128392484
(1)依赖安装
sudo apt-get install python3-catkin-tools python3-rosinstall-generator -y
pip3 install importlib-metadata
(2)创建mavros的工作空间并初始化,终端运行以下命令:
mkdir -p ~/my_mavros_ws/src
cd ~/my_mavros_ws
catkin init
wstool init src
(3)更新获取最新的mavlink和mavros:
在my_mavros_ws目录下获取Mavlink:
rosinstall_generator --rosdistro noetic mavlink | tee /tmp/mavros.rosinstall
解决raw.githubusercontent.com无法访问的问题
在my_mavros_ws目录下获取mavros:
rosinstall_generator --upstream mavros | tee -a /tmp/mavros.rosinstall
(4)归并链接,开始准备安装:
第一步
wstool merge -t src /tmp/mavros.rosinstall
第二步
wstool update -t src -j8
若报错
解决方法:
手动下载源码包,将其放到 my_mavros_ws/src,源码包下载链接源码包https://download.csdn.net/download/jppdss/87326158
第三步
rosdep install --from-paths src --ignore-src -y
(5)安装GeographicLib数据集:
在my_mavros_ws目录下终端运行:
sudo ./src/mavros/mavros/scripts/install_geographiclib_datasets.sh
(6)编译源码
在my_mavros_ws目录下终端运行:
catkin build
(7)添加环境变量
sudo gedit ~/.bashrc
在.bashrc最后加上:
source ~/my_mavros_ws/devel/setup.bash
保存,退出,运行
source ~/.bashrc
PX4和NX通信
硬件连接
Nx硬件接口
px4硬件接口
软件配置
(1)飞控参数设置
由于Jetson Xavier NX采用arm架构,QGC官方未推出该版本软件,所以使用Windows或Mac对飞控调参
参数配置如下
MAV_1_CONFIG= TELEM 2
MAV_1_MODE = Onboard
可能一开始只有 MAV_1_CONFIG 这一个参数,将其设置为 TELEM2 后重启飞控即可。
SER_TEL2_BAUD = 921600
EKF2_AID_MASK =24 (即选择选择vision position fusion和vision yaw fusion)
EKF2_HGT_MODE 设置为 Vision,有激光定高的可设为Range sensor
MAV_ODOM_LP设置为1(这个设置之后可以在QGC中Analyse Tools 中的Mavlink控制台查看相应的数据)
详细说明看官方文件:https://docs.px4.io/main/en/advanced_config/tuning_the_ecl_ekf.html
特殊的如果没有下拉菜单,只让你填数字,可以参考
(2)网卡驱动安装
此处是绿联AC650M,根据商家的教程,显示我ubuntu内核太高。因此不能用他们提供的驱动
【1】
首先无线网卡插上系统应该是识别到了,只不过没有驱动用不了而已。命令行输入ls usb应该可以看到Realtek Semiconductor 802.11ac啥的,就是无线网卡设备
【2】
下载8821驱动(注意下面都是需要网络的,使用网线连接提供网络)
git clone https://github.com/KwanWaiPang/8821cu.git
【3】
下载完驱动以后,进入文件夹编译
cd 8821cu
make
如果报错,应该是没有安装make和gcc,输入下面的命令
sudo apt-get install make
sudo apt-get install gcc
【4】
编译完成后安装
make install
【5】重启
如果没报错,就可以重启台式机了,然后就能看到无线网络
连接验证
Mavros测试
首先更改连接方式,本人采用Nx的串口2与飞控连接
sudo vim /opt/ros/melodic/share/mavros/launch/px4.launch
修改串口位置以及波特率
串口位置要看你机载电脑说明文档(串口说明部分)
运行以下指令,若能显示飞控状态信息并能打印mavros信息,则证明Mavros与px4通讯成功。
注意:下面第一条,赋予串口权限,注销或关机后需再次赋予权限
sudo chmod 666 /dev/ttyTHS0
roslaunch mavros px4.launch
如果此时正常启动,最后会显示mavros的ID号
然后另起终端,打印topic echo mavros消息,验证是否通讯
注意!!!
此时要给你的飞控(pxhawk)插上电池,不然通讯不了。如果只让nx的串口供电为他通讯不了
(1)输入
rostopic list
如果可以显示很多mavros topic名称就k
(2)根据上面命令显示的topic话题名称,随便找几个echo下
比如
rostopic echo mavros/state
显示connection true 就ok
rostopic echo mavros/imu/date
显示当前imu实时数据就ok
基于机载电脑利用optitrack为PX4提供定位
在前面通信成功的基础上,在机载电脑利用optitrack为PX4提供定位
ubuntu机载电脑环境配置
(1)在合适的路径下安装vrpn ,这里演示是在home文件下
使用vrpn将机载电脑与主机(安装Motive的)进行通信
cd ~
mkdir testws
cd testws
mkdir src
cd src
catkin_init_workspace
cd ..
catkin_make
git clone git clone https://github.com/clearpathrobotics/vrpn_client_ros.git
sudo apt-get install ros-melodic-vrpn #这里需要根据对应的ROS版本填写 我是18.04
catkin_make
source devel/setup.bash
roslaunch vrpn_client_ros sample.launch server:=192.168.1.2 #这里的IP地址是运行Motive主机的地址
#然后另外开启一个终端
rostopic list #此时正常的话应该可以查看到目标位置信息了
验证
如果你rostopic list可以看见年所见的刚体的名字,然后rostopic echo
一下这个topic,如果可以显示位置信息,就没问题
(2)Mocap->Pixhawk
将optitrack的位置数据通过mavros传送给飞控
【1】运行vrpn_client_node
#这里的IP地址是运行Motive主机的地址,这里运行程序的机载电脑需要和运行Motive主机在一个网段
比如,主机三192.168.100.5,那么机载电脑也需要在192.168.100网段下。
roslaunch vrpn_client_ros sample.launch server:=192.168.100.2
【2】运行PX4和mavros
roslaunch mavros px4.launch fcu_url:=/dev/ttyUSB0:921600 gcs_url:=udp://@192.168.0.105:14550
【3】运行ros节点,通过mavros,将位置信息传给px4
rosrun topic_tools relay /vrpn_client_node/<rigid_body_name>/pose /mavros/vision_pose/pose
- fcu_url 连接树莓派和飞控的串口号
- 用ls /dev/ttyUSB* 指令查看串口号是否连接
- 参数 gcs_url:=udp://@192.168.0.119:14550 用来接收 QGroundControl
数据(同一WIFI路由) - MAVROS 直接通过 /mavros/vision_pose/pose 给 PX4发布消息
- remap从Mocap获取的位置主题 /vrpn_client_node/<rigid_body_name>/pose 成
/mavros/vision_pose/pose
或者【3】也可以通过阿木实验室坐标转换代码代替
地址:https://github.com/amov-lab/Prometheus
代码在上面代码中的Modules/control/src/px4_pos_estimator.cpp路径下,有详细注释
验证
【1】rostopic echo /mavros/vision_pose/pose 查看是否有数据
【2】打开QGC,查看是否可以把飞控设置为position模式,如果可以就ok