目录

一、虚拟机仿真环境

1. 创建工作空间        

2. 创建ROS节点功能包

3. 运行PX4的gazebo仿真

4. 启动PX4与Mavros之间的连接

二、真机控制

1.硬件连接

2.软件设置

3.出现问题


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.  启动PX4Mavros之间的连接

        1) 在终端下运行命令(新开一个终端):

roslaunch mavros px4.launch fcu_url:="udp://:14540@127.0.0.1:14557"

        2)启动PX4Mavros之间的连接之后,在节点功能包所在的catkin_ws目录下运行命令

rosrun offboard_pkg offboard_node,

                          然后进入gazebo中进行观察。

       若要在任意终端运行节点命令要在终端窗口source一下工作空间的setup.bash 文件,比如我的就是

  source amov_ros/devel/setup.bash   #amov_ros 是我的工作空间

二、真机控制

1.硬件连接

使用飞控的TELEM2和机载电脑的USB

由于飞控TELEM2是串口,所以要使用TTLUSB模块连接

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 nanoUSB,所以就是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

即可

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐