# 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 |
```
```