PX4 与 MAVROS 实现offboard
Ubuntu:20.04 ,已安装ROS、MAVROS、PX4,gazebo机载电脑:jetson nano,已安装ROS、MAVROS以上软件安装过程不再赘述。一、虚拟机仿真环境新建文件夹,并将该文件夹变成工作空间(即catkin_ws 空间)1)创建源码文件夹(src文件夹)mkdir -p ~/catkin_ws/srccd ~/catkin_ws/srccatkin_init_worksp
目录
Ubuntu:20.04 ,已安装ROS、MAVROS、PX4,gazebo
机载电脑:jetson nano,已安装ROS、MAVROS
以上软件安装过程不再赘述,网络上都有安装教程。
一、虚拟机仿真环境
1.创建工作空间
新建文件夹,并将该文件夹变成工作空间(即catkin_ws 空间)
1)创建源码文件夹(src文件夹)
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace // 初始化文件属性,使之成为源代码文件夹,是在src 文件夹使用该命令
2)编译工作空间文件夹(catkin_ws文件夹)
回到src文件的上层文件夹进行工作空间编译
cd ~/catkin_ws
catkin_make //编译工作空间,是在catkin_ws文件夹使用该命令
source devel/setup.bash //将工作空间的信息添加到环境变量,方便系统寻找
2. 创建ROS节点功能包
1)在catkin_ws/src目录中(源码文件夹),创建功能包 offboard_pkg,运行命令:
cd src
catkin_create_pkg offboard_pkg roscpp std_msgs geometry_msgs mavros_msgs
2)添加功能包的源码文件(C++/Python编写)
在创建的功能包文件夹(offboard_pkg)的源码文件夹(src文件夹),
即定位到目录~/catkin_ws/src/offboard_pkg/src/,新建一个文件offboard_node.cpp。
打开官方MAVROS Offboard control example链接,然后复制进去
3)修改CMakeLists.txt,以编译源码文件
打开目录~/catkin_ws/src/offboard_pkg/下的CMakeLists.txt 添加下面的两行
add_executable(offboard_node src/offboard_node.cpp)
target_link_libraries( offboard_node ${catkin_LIBRARIES})
4)进行功能包的编译
然后到目录~/catkin_ws下,运行命令:
catkin_make #编译功能包
3. 运行PX4的gazebo仿真
1)如果你要在gazebo中仿真,打开PX4的固件文件夹(PX4-Auopilot),打开终端运行命令
make px4_sitl gazebo_iris //打开模拟环境
2)打开QGroundControl,在地面站上进行观察是否连接上gazebo的无人机,连接则表示正常打开
4. 启动PX4与Mavros之间的连接
1) 在终端下运行命令(新开一个终端):
roslaunch mavros px4.launch fcu_url:="udp://:14540@127.0.0.1:14557"
2)启动PX4与Mavros之间的连接之后,在节点功能包所在的catkin_ws目录下运行命令
rosrun offboard_pkg offboard_node,
然后进入gazebo中进行观察。
若要在任意终端运行节点命令要在终端窗口source一下工作空间的setup.bash 文件,比如我的就是
source amov_ros/devel/setup.bash #amov_ros 是我的工作空间
二、真机控制
1.硬件连接
使用飞控的TELEM2和机载电脑的USB口。
由于飞控TELEM2是串口,所以要使用TTL转USB模块连接
2.软件设置
1)配置Pixhawk上的Telem2作为MAVLINK端口
MAV_1_CONFIG = TELEM 2
MAV_1_MODE = Onboard
SER_TEL2_BAUD = 921600 8N1 // 这里我设置成230400 8N1
一开始参数里可能只有MAV_1_CONFIG,搜不到其他的参数,只需要先把MAV_1_CONFIG设置为TELEM2,然后把飞控重启后就有了。
2)在机载电脑上启动MAVROS和PX4的连接
roslaunch mavros px4.launch fcu_url:=/dev/ttyUSB0:230400
我这里用的是jetson nano的USB,所以就是dev/ttyUSB0,这个按照自己实际情况写就好了。最后的230400是波特率,就是1)中设置的SER_TEL2_BAUD,改成设置的值就行了。(如果用的是串口的话,应该是dev/ttyTSH*,*代表序号)
USB0是指插入的顺序是第一个,所以是USB0,如果是第二个插入机载电脑,则是USB1,系统根据插入顺序分配端口。
3.出现问题
1)报错权限问题
“FCU: DeviceError:serial:open: Permission denied”
解决方法是给对应的串口权限或者USB口权限
sudo chmod 777 /dev/ttyTHS1 #这是参考别的文章出现的问题,这里作为参考
虽然这样子mavros就正常运行了,但是节点信息会卡在xxxxxx start xxxxxxx,然后/mavros/state中的connected是false。这个问题卡了我一天,后来我把波特率往下降到460800以下就能正常使用了(有大佬指出是因为数据线太长,导致传输过程中到达不了那么高的波特率,所以不能成功连接,还有个可能是芯片原因,如果用CH340芯片,则最大波特率是115200)。
2)报错timesync的异常:RTT too high for timesync: 19.32 ms.
解决方法是:
sudo gedit /opt/ros/melodic/share/mavros/launch/px4_config.yaml
把文件中的第12行改为
timesync_rate: 0.0
3)不带参数的连接命令
编辑飞控连接 px4.launch文件的命令行是
sudo gedit /opt/ros/melodic/share/mavros/launch /px4.launch
然后更改默认的连接端口,即
<arg name="fcu_url" default="/dev/ttyACM0:57600" />
修改成
<arg name="fcu_url" default="/dev/ttyUSB0:230400" />
最后开启时候,直接运行
roslaunch mavros px4.launch
即可
更多推荐
所有评论(0)