Rotors Simulator Usage

1 创建功能包

切换到工作空间的src目录下,创建rotors_control_test功能包

# 工作空间目录下的src
cd catkin_ws/src
# 创建功能包,包名后面的参数是相关依赖
catkin_create_pkg rotors_control_test roscpp rospy std_msgs 
# sensor_msgs geometry_msgs mav_msgs gazebo_msgs

2 修改相关功能包相关依赖

如果创建功能包的时候,少或错误添加相关依赖,可以打开CMakeLists.txt,修改相关内容:

find_package(catkin REQUIRED COMPONETS
	roscpp
	rospy
	std_msgs
	# 以上三个是常用的依赖,以下是本功能包需要用到的额外的依赖
	sensor_msgs
	geometry_msgs
	mav_msgs
	gazebo_msgs
)

同时需要修改package.xml文件,在其中添加:

添加依赖XXX,在功能包中即可以使用XXX/XXX的消息类型,如mav_msgs,能够让功能包使用mav_msgs/xxx类型的消息。

3 创建源文件并修改CMakeLists.txt

rotors_control_test/src下创建rotors_control_node.cpp文件,并修改CMakeLists.txt

4 编写源文件代码

代码思路

  1. 初始化 ROS 节点;

  2. 创建position_sub订阅无人机位置信息话题:

    1. 话题名为/odometry_sensor1/position,可以通过rqt查询其他话题名称及对应的消息数据类型;

    2. 创建updateUAVPosition回调函数,位置信息类型为geometry_msgs::PointStamped

    3. 注意:当GPS初始化成功并能够接收到位置信息时,才开始执行任务;

  3. 创建名为trajectory_pub的控制指令publisher:

    1. 控制无人机移动可使用rotors_simulator包中的控制节点:当前pulisher中发布的话题即为rotors_simulator中已定义好的话题;

    2. 值得注意的是,rotors_simulator中控制节点仅对无人机位置进行控制,即发送指定位置。同时,在起点与目标位置相距较远时,无人机会侧翻(对于仿真是没有什么影响,但对于将算法投入实际使用时,物理机则需要更多考量);

    3. 为避免无人机侧翻,平滑移动轨迹仍十分重要。

相关API

mav_msgs::msgMultiDofJointTrajectoryFromPositionYaw

源代码

5 launch文件配置

rotors_control_test目录下创建launch文件夹,在launch文件夹下创建rotors_control_test.launch文件

6 编译并运行

当前文件目录结构

先切换到工作空间下,編譯,運行

Reference

Last updated