# rotors_sim **Repository Path**: liu_zhen_chang/rotors_sim ## Basic Information - **Project Name**: rotors_sim - **Description**: 本仓库合并了rotors_simulation和livox_laser_simulation两个仓库,其中rotors_simulation用于提供无人机动力学模型,livox_laser_simulation用于提供激光雷达模型。在此基础上开发了搭载Mid360激光雷达的旋翼无人机模型,以及多种仿真场景。 - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 1 - **Created**: 2024-02-02 - **Last Updated**: 2025-12-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Rotors Simulation with Livox Plugins 本仓库合并了rotors_simulation,livox_laser_simulation和realsense_ros_gazebo三个仓库,其中rotors_simulation用于提供无人机动力学模型,livox_laser_simulation用于提供激光雷达模型,realsense_ros_gazebo用于提供深度相机模型。在此基础上开发了搭载Mid360激光雷达和D435深度相机的旋翼无人机模型,以及多种仿真场景。 https://github.com/ethz-asl/rotors_simulator.git https://github.com/Livox-SDK/livox_laser_simulation https://github.com/nilseuropa/realsense_ros_gazebo ## 1. 安装依赖包 (1)首先确保电脑上已经正确安装了ROS noetic以及Gazebo,如果没有安装,建议直接安装ros-noetic-desktop-full,具体安装步骤如下: ``` $ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu `lsb_release -sc` main" > /etc/apt/sources.list.d/ros-latest.list' $ wget http://packages.ros.org/ros.key -O - | sudo apt-key add - $ sudo apt-get update $ sudo apt-get install ros-noetic-desktop-full $ sudo rosdep init $ rosdep update $ source /opt/ros/noetic/setup.bash ``` (2)安装rotors-simulation和livox_laser_simulation依赖的库,建议逐个安装,检查是否安装成功。 ``` $ sudo apt-get install ros-noetic-joy $ sudo apt-get install ros-noetic-octomap-ros $ sudo apt-get install ros-noetic-mavlink $ sudo apt-get install python3-wstool $ sudo apt-get install python3-catkin-tools $ sudo apt-get install protobuf-compiler $ sudo apt-get install libgoogle-glog-dev $ sudo apt-get install ros-noetic-control-toolbox $ sudo apt-get install ros-noetic-mavros $ sudo apt-get install libignition-math4-dev $ sudo apt-get install ros-noetic-vision-opencv $ sudo apt-get install ros-noetic-depth-image-proc $ sudo apt-get install gnome-terminal ``` (3)下载gazebo模型 Gazebo仿真中会使用一些自定义的场景,如果模型不全会导致gazebo打开时黑屏或者打开缓慢,可通过官方仓库 https://github.com/osrf/gazebo_models 下载模型,但是官方仓库很容易链接不上,建议通过本文提供的gitee链接下载,内容都一样。 ``` $ cd ~/.gazebo/models $ git clone https://gitee.com/shu-peixuan/gazebo_models.git ``` 下载结束后把gazebo_models文件夹中的模型文件复制到 ~/.gazebo/models路径下 ``` $ cp -r ~/.gazebo/models/gazebo_models/* ~/.gazebo/models $ rm -r gazebo_models ``` 模型正确存储方式如下图所示:

(4)克隆并编译本仓库。 ``` $ mkdir ~/Work $ cd ~/Work $ git clone https://gitee.com/liu_zhen_chang/rotors_sim.git $ cd rotors_sim $ catkin build ``` 编译通过后会显示如下结果:

## 2. 运行程序 (1)在Linux系统中打开一个终端,进入rotors_sim文件夹路径,输入: ``` $ source devel/setup.bash $ roslaunch rotors_gazebo mav_hovering_multi.launch ``` 此时看到Gazebo启动,并且等待一段时间后(大约10s)无人机起飞。

(2)在Linux系统中再打开一个终端,进入rotors_sim文件夹路径,输入: ``` $ source devel/setup.bash $ roslaunch rotors_gazebo rviz.launch ``` 此时在rviz中会看到无人机以及订阅到的激光点云

如果希望控制无人机运动请参照本文第5部分,或者rflysim_explore仓库中的Version_2.0_traj分支。 ## 3. 配置传感器 本仓库支持设置传感器类型、安装位置和安装角度。首先打开文件: src/rotors_simulator/rotors_description/urdf/firefly_base.xacro 通过以下程序设置传感器类型及安装方式: ``` ``` 其中“rpy”代表传感器在机体坐标系下的安装角(roll, pith, yaw),单位为rad,“xyz”代表传感器在机体坐标系下的安装位置,单位为m。 值得注意的是完成传感器在xacro文件的配置后,还需要对坐标转换节点参数进行修改,打开文件: src/rotors_simulator/rotors_gazebo/launch/mav_hovering_single.launch 对launch文件中的sensor_converter节点参数进行修改: ``` ``` 注意需要使传感器的安装角度和位置与firefly_base.xacro文件中的数值保持一致。修改深度相机安装角的效果如下图所示:

## 4. 编译问题 (1)在编译过程中如果遇到报错缺少future安装包,报错如下: ``` ImportError: No module named future make[2]: *** [uAvionix-v2.0-cxx-stamp] Error 1 make[1]: *** [CMakeFiles/uAvionix.xml-v2.0.dir/all] Error 2 make: *** [all] Error 2 ``` 参照以下链接进行修改 https://github.com/ethz-asl/rotors_simulator/issues/587 (2)编译过程中如果遇到protoc报错,可能是因为缺少protoc包或者版本不匹配的问题。首先在终端中输入protoc --version查看是否存在小于等于3.6.1的版本,如果存在,输出结果应为: ``` root@ROG-Hyperion:~/Work/rotors_sim# protoc --version libprotoc 3.6.1 ``` 如果不存在,参照以下链接进行安装 https://blog.csdn.net/weixin_42129772/article/details/128708211 如果存在多个protoc 版本,通过whereis protoc命令查看哪些路径下安装了protoc 如果只存在一个protoc,输出结果为: ``` root@ROG-Hyperion:~/Work/rotors_sim# whereis protoc protoc: /usr/bin/protoc /usr/share/man/man1/protoc.1.gz ``` 通过which protoc 可以查看默认选用protoc的路径: ``` root@ROG-Hyperion:~/Work/rotors_sim# which protoc /usr/bin/protoc ``` 如果存在多个protoc版本,可以通过在~/.barchrc文件中注释其他版本的protoc路径只保留,3.6.1版本的protoc路径,即可使程序编译通过。 ## 5. vscode初始化 本仓库.vscode文件夹中的c_cpp_properties.json文件通过读取compile_commands.json文件识别程序的头文件。在程序编译时输入: ``` catkin build --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ``` 编译后compile_commands.json会生成在每个功能包里,使用jq工具合并json文件,将合并后的compile_commands.json文件放置在build目录下。 ``` sudo apt install jq jq -s 'map(.[])' ./build/**/compile_commands.json > ./build/compile_commands.json ``` 在~/Work/rotors_sim目录下输入code . 打开vscode后程序中的头文件就能被正确识别。如果个别文件的头文件还是无法识别,说明该文件在编译中没有被使用。 ## 6. 控制接口说明 进入rotors_sim/src/rotors_simulation/rotors_gazebo/launch路径,打开mav_hovering_multi.launch文件,通过修改“world_name”可以修改无人机出生地图 ``` ``` 打开mav_hovering_single.launch文件,以下内容定义了无人机对外发布/接收的点云和里程计信息 | original topic name | sensor/frame | type | | ------------------- | --------------- | ------------------------ | | /scan | lidar/local | sensor_msgs::PointCloud | | /cloud_world_lidar | lidar/global | sensor_msgs::PointCloud2 | | /cloud_world_depth | depth/global | sensor_msgs::PointCloud2 | | /ground_truth/pose | odometry/global | geometry_msgs::Pose | ``` ``` 以下内容定义了无人机接收到的飞行控制指令 | original topic name | frame | type | | -------------------------- | ------ | -------------------------- | | /exploration_node/waypoint | global | geometry_msgs::PoseStamped | ``` ```