多移动机器人的概念就不叙述了,直接讲如何正确的在ROS系统下构建基于stdr simulation和gazebo平台下的仿真实验。
1 前提准备
安装好如下几个基本的包:
- stdr simulation
- amcl
- move_base
- gazebo_ros
- turtlebot2的完整包
等其他必要的ROS环境
2 单移动机器人和多移动机器人的配置区别
单移动机器人比较简单,也不用关注与namespace这些问题,二多移动机器人,因为每个机器人都具备同样的基本功能,因此不可避免的需要用到namespace(以下简称ns)的概念将他们区分开,这样就可以一直通过namespace复制同样基本功能的机器人了。如果你不采用ns的方式,而是简单的不断生成新的机器人,即使你保证他们的位置不同,但是因为node名重复,ROS会kill之前的node保留最后一个生成的机器人状态。
但是除了namespace外,还需要配置tf_prefixes的参数值,这是最大的区别之处,也是最重要的,能否成功的生成多个移动机器人。
2.1 要明确的概念
构造多移动机器人在一张map中,这个map可以使slam构建的,无论你是用cartographer,hector_slam,gmapping等。我们都是希望map只有一张,每个机器人是全局共享的。
每个机器人之间除了初始时刻的位姿不同以外,其他的结构,携带的传感器类型都完全一样,没有差别。当然你可以根据自己的需求使得他们不同。如果希望每个机器人都可以通过amcl和move_base进行自主导航和实时定位,那么每个机器人都应当具备amcl和move_base。
因此,map是全局的,不需要ns,机器人的构建,amcl和move_base是需要ns的,因为每个移动机器人都需要具备这些属性。
如下结构所示:
/map /robot1/robot_state_publisher /robot2/robot_state_publisher /robot1/robot_pose_ekf /robot2/robot_pose_ekf /robot1/amcl /robot2/amcl /robot1/move_base /robot2/move_base /robot1/laser_0 /robot2/laser_0 /robot1/sensor0 /robot2/sensor0 /robot1/sensor1 /robot2/sensor0 ....... ........
2.2 配置单个机器人的launch文件,然后就可以在其他launch文件中无限的复制单个移动机器人的个数了:
2.2.1 在你的工作空间下新建一个项目:
cd ~/catkin_ns/src catkin_creat_pkg multi_robots cd multi_robots mkdir launch map param rviz tree
最终如下所示:
~/catkin_ws/src/multi_robots$ tree . ├── CMakeLists.txt ├── launch ├── map ├── package.xml ├── param └── rviz 4 directories, 2 files
在launch文件下,新建one_robot.launch
内容如下:
<!-- 这是在gazebo平台的仿真实验 本文件名为:one_robot.launch --> <launch> <arg name="robot_name"/> <arg name="init_pose"/> <node name="spawn_minibot_model" pkg="gazebo_ros" type="spawn_model" args="$(arg init_pose) -urdf -param /robot_description -model $(arg