MAVROS与机载电脑Jetson nano通信
ROS系统镜像——Jetson nano b01 4G
链接: 百度云镜像链接
链接:https://pan.baidu.com/s/1NoIEvVdsiYLPvVOWM98hjQ
提取码:cwkj
简介:MAVROS和Jetson nano通信,设置飞控参数和MAVROS文件,实现飞控和机载电脑的通信。MAVROS相当于PX4飞控中的MAVLINK模块。MAVROS将话题转为MAVLINK格式消息发送给飞控,飞控中的MAVLINK模块将MAVLINK格式消息转化为uORB消息给PX4各模块间传递消息使用,也可以反过来从uORB消息一直到ROS话题。
MAVROS简介
ROS结合PX4的或者APM的开发方式,关键在于实现ROS和他们之间的通信,这里我们使用ROS官方提供的MAVROS功能包实现飞控Pixhawk和ROS主控间的通信。
简单的来说,mavros的作用是实现ROS和PX4间的通信,mavros功能包起到了实现上层ROS和底层PX4固件的双向通信。基于此,在一般的开发应用中,我们通常在ROS层面进行功能开发,并发布相关控制指令给底层即可。同时底层会实时的把无人机的相关状态通过mavros上传给ROS。
注意:此处仅以Pixhawk2.4.8飞控为例,其他飞控原理一致,皆可参考。
我们的无人机ROS主控Jetson nano通过串口ttyTHS1和飞控的telem2口进行通信。需要的硬件包括安装了系统镜像的Jetson nano和下载了固件的飞控pixhawk2.4.8,另外需要一根连接线。如图中所示标注所示:
Jetson nano引脚按序号排列如下:上述图片则是通过telem2连接6,8,10一脚。其中telem2中的GND连接6-GND,telem2中的TX连接10-RX,RX连接8-TX。Telem2中只需要此三根线连接即可,其余不用管。
打开QGC地面站,设置如下:
①、选中MAVlink设置参数如下,设置telem2通信
②、紧接着设置Serial,波特率设置为921600。
③、找到启动mavros的px4.launch文件,设置通信的串口为/dev/ttyTHS1:921600即可
④、确保硬件和参数设置完成后,启动mavros
⑤、出现以下内容表示MAVROS实现双向通信
总结:MAVROS在ROS+PX4/APM的开发方式中属于重点中的重点,一定要深刻理解MAVROS的功能和作用,在此基础上进行开发,可以极大的提高开发效率。基于此,我们推荐采用这种开发方式的朋友静下心研究一番MAVROS,可以参考网上相关博客资料等,也可以直接查看官网介绍。推荐MAVROS官网地址如下:
http://wiki.ros.org/mavros
步骤整理如下:
一、配置Pixhawk上的Telem2作为MAVLINK端口
MAV_1_CONFIG = TELEM 2
MAV_1_MODE = Onboard
SER_TEL2_BAUD = 921600 8N1
注:一开始参数里可能只有MAV_1_CONFIG,搜不到其他的参数,只需要先把MAV_1_CONFIG设置为TELEM 2,然后把飞控重启后就有了。
二、在机载电脑上启动MAVROS
这里用的是Jetson nano的串口2,也就是dev/ttyTHS1。最后的921600是波特率,就是1.1中设置的SER_TEL2_BAUD,改成设置的值就行了。
roslaunch mavros px4.launch fcu_url:=serial:///dev/ttyTHS1:921600 gcs_url:=udp://@192.168.0.0
gcs_url为运行QGC的主机的IP
三、设置为以下参数表示自动寻址,直到连上QGC
roslaunch mavros px4.launch fcu_url:=serial:///dev/ttyTHS1:921600 gcs_url:=udp-b://@
可能会报错
FCU: DeviceError:serial:open: Permission denied
四、解决方法是给对应的串口权限
sudo chmod 777 /dev/ttyTHS1
补充:绑定串口权限,确保开机能自动识别,可以参考我们提供的详细教程
链接: 串口绑定教程
https://blog.csdn.net/qq_35598561/article/details/116295689
五、添加永久生效的权限
每次要在后面加一堆参数很烦,所以直接修改launch文件,使用sudo权限打开/opt/ros/melodic/share/mavros/launch/px4.launch,将
<arg name="fcu_url" default="/dev/ttyACM0:57600" />
修改为自己的端口和波特率
<arg name="fcu_url" default="/dev/ttyTHS1:921600" />