• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

多机器人协同控制①——仿真平台搭建

人工智能 小黑鸭 1730次浏览 0个评论

前言

  目前课题上在做一些关于异构多机器人协同控制方面的工作(UAV + UGV),实验室里用的移动机器人为ROBOTIS公司的Turtlebot3,无人机为Parrot公司的Bebop2,这两种机器人都对ROS有很好的支持(可以直接通过cmd_vel发送运动指令),免去了对机器人底层运动控制的设计工作,很适合做控制的同学拿来做实物验证使用。   因为疫情原因帝都又推迟开学了,可是为了毕业和文章,实验还得抓紧做啊TAT,巧的是Turtlebot3和Bebop2刚好都有基于Gazebo的仿真模型和demo,于是就打算开一篇文章把我自己对这块的理解跟大家分享一下(关于RGBD相机的使用和视觉相关的文章先鸽一鸽,暂时没有精力去写了(っ*´Д`)っ)   Ps:本来选用的是目前很火也很炫的Webots,但是Webots里Turtlebot3的例程并没有基于ROS的,相对Gazebo来说上手难度会高一些(QAQ主要是我不想花时间重新开始写运动控制的算法了)   大致的安排如下:   首先先用尽可能简单的算法实现Gazebo下的多Turtlebot3编队(先把流程打通),之后实现Bebop2无人机的仿真与编队,然后再跟大家分享一些关于多机器人理论相关的东西,最后再尝试一下将理论应用于实际仿真环境中。   本篇先大致讲一讲在Gazebo下多Turtlebot3的环境搭建。  

1.仿真环境搭建

 

1.1 Turtlebot3包安装

  首先需要下载安装Turtlebot3的依赖包  

  • 此时需要注意一下Ubuntu和ROS的版本

  在 Ubuntu16.04ROS Kinetic 环境下  


sudo apt-get install ros-kinetic-joy ros-kinetic-teleop-twist-joy ros-kinetic-teleop-twist-keyboard ros-kinetic-laser-proc ros-kinetic-rgbd-launch ros-kinetic-depthimage-to-laserscan ros-kinetic-rosserial-arduino ros-kinetic-rosserial-python ros-kinetic-rosserial-server ros-kinetic-rosserial-client ros-kinetic-rosserial-msgs ros-kinetic-amcl ros-kinetic-map-server ros-kinetic-move-base ros-kinetic-urdf ros-kinetic-xacro ros-kinetic-compressed-image-transport ros-kinetic-rqt-image-view ros-kinetic-gmapping ros-kinetic-navigation ros-kinetic-interactive-markers

  在 Ubuntu18.04ROS Melodic 的环境下  


sudo apt-get install ros-melodic-joy ros-melodic-teleop-twist-joy ros-melodic-teleop-twist-keyboard ros-melodic-laser-proc ros-melodic-rgbd-launch ros-melodic-depthimage-to-laserscan ros-melodic-rosserial-arduino ros-melodic-rosserial-python ros-melodic-rosserial-server ros-melodic-rosserial-client ros-melodic-rosserial-msgs ros-melodic-amcl ros-melodic-map-server ros-melodic-move-base ros-melodic-urdf ros-melodic-xacro ros-melodic-compressed-image-transport ros-melodic-rqt-image-view ros-melodic-gmapping ros-melodic-navigation ros-melodic-interactive-markers

  新建一个工作空间,然后安装Tutlebot3的源码  


mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src/
git clone https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git
git clone https://github.com/ROBOTIS-GIT/turtlebot3.git
cd .. && catkin_make

  • 注意如果手中有Turtlebot3的实物的话,ROS在不同设备之间(Turtlebots和PC)需要IP才能通信,此时还需要对IP进行配置,由于本文主要讲述仿真环境中的应用,所以这部分内容暂时略过,有需求的小伙伴可以在评论区回复。

  至此,Turtlebot3的包已经安装完毕,接下来针对仿真环境进行安装和配置。  

1.2 仿真环境

  首先安装仿真系统依赖包   在 Ubuntu16.04ROS Kinetic 环境下  


sudo apt-get install -y ros-kinetic-navigation ros-kinetic-teb-local-planner* ros-kinetic-ros-control ros-kinetic-ros-controllers ros-kinetic-gazebo-ros-control ros-kinetic-ackermann-msgs ros-kinetic-serial qt4-default ros-kinetic-effort-controllers ros-kinetic-joint-state-controller ros-kinetic-tf2-ros ros-kinetic-tf

  在 Ubuntu18.04ROS Melodic 的环境下  


sudo apt-get install -y ros-melodic-navigation ros-melodic-teb-local-planner* ros-melodic-ros-control ros-melodic-ros-controllers ros-melodic-gazebo-ros-control ros-melodic-ackermann-msgs ros-melodic-serial qt4-default ros-melodic-effort-controllers ros-melodic-joint-state-controller ros-melodic-tf2-ros ros-melodic-tf

  来到工作空间,安装 Turtlebot3_Simulation 包  


cd ~/catkin_ws/src/
git clone https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git
cd .. && catkin_make

  由于turtlebot3的模型有burger, waffle或waffle_pi三种,首先需要制定 TURTLEBOT3_MODEL 的型号,由于实验室的小车是burger,所以仿真中也按burger来进行。  


export TURTLEBOT3_MODEL=burger

  或者为了方便,将其直接添加到环境变量中:  


echo "export TURTLEBOT3_MODEL=burger" >> ~/.bashrc

  之后启动仿真环境(在工作空间下)  


source devel/setup.bash
roslaunch turtlebot3_gazebo turtlebot3_world.launch

  之后便会启动Gazebo,如图所示:  
多机器人协同控制①——仿真平台搭建

1.3 验证环境

 

1.3.1 查看Topic

  打开新终端,输入  


rostopic list

  可以看到存在如下topic  

/clock /cmd_vel /gazebo/link_states /gazebo/model_states /gazebo/parameter_descriptions /gazebo/parameter_updates /gazebo/set_link_state /gazebo/set_model_state /imu /joint_states /odom /rosout /rosout_agg /scan /tf

  其中,我们接下来马上就要用到的有: cmd_vel 来控制机器人的运动,订阅 odom 获取机器人的里程计信息等,之后会有具体的介绍。  

1.3.2 建图

  环境搭建完成之后再来验证一下turtlebot3的包是否安装完成,启动一个新终端,启动SLAM程序(在已经启动上文仿真环境的前提下)  


 roslaunch turtlebot3_slam turtlebot3_slam.launch slam_methods:=gmapping

 
多机器人协同控制①——仿真平台搭建   再打开一个新终端,启动键盘控制程序,之后根据提示,可以通过按键控制小车行走并逐步建立地图数据  


roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

 
多机器人协同控制①——仿真平台搭建   打开新终端,输入指令就可以保存地图了  

 rosrun map_server map_saver -f ~/catkin_ws/map

1.3.3 导航

  保存完地图之后关掉所有程序,打开终端重新启动仿真环境  


 roslaunch turtlebot3_gazebo turtlebot3_world.launch

  启动导航程序,之后可以通过设定目标点的形式使Turtlebot3自主导航运动  


roslaunch turtlebot3_navigation turtlebot3_navigation.launch map_file:=$HOME/catkin_ws/map.yaml

  至此环境的搭建和配置就大功告成  

  • 由于目前的重点不在SLAM建图和导航,所以粗略贴一下机器人的建图与导航的demo,有兴趣的同学们可以自己查阅相关资料深入了解一下。

2.多机仿真

  关掉所有的任务 首先打开 turtlebot3_empty_world.launch 文件  


cd ~/catkin_ws/src/turtlebot3_simulations/turtlebot3_gazebo/launch/
sudo gedit turtlebot3_empty_world.launch

  看一下turtlebot3的启动文件:  
多机器人协同控制①——仿真平台搭建   可以看到,这里的launch文件可以对机器人话题名称、坐标进行简单设置。如此我们可以照葫芦画瓢新建一个launch文件  


cd ~/catkin_ws/src/turtlebot3_simulations/turtlebot3_gazebo/launch/
sudo touch multi_turtlebot3_empty_world.launch
sudo gedit multi_turtlebot3_empty_world.launch

  launch内容如下:  


<launch>
  <arg name="model" default="$(env TURTLEBOT3_MODEL)" doc="model type [burger, waffle, waffle_pi]"/>

  <arg name="first_tb3"  default="tb3_0"/>
  <arg name="second_tb3"  default="tb3_1"/>
  <arg name="third_tb3"  default="tb3_2"/>
  <arg name="fourth_tb3"  default="tb3_3"/>

  <arg name="first_tb3_x_pos" default="0.0"/>
  <arg name="first_tb3_y_pos" default="0.0"/>
  <arg name="first_tb3_z_pos" default="0.0"/>
  <arg name="first_tb3_yaw"   default="1.57"/>

  <arg name="second_tb3_x_pos" default="0.0"/>
  <arg name="second_tb3_y_pos" default="0.5"/>
  <arg name="second_tb3_z_pos" default="0.0"/>
  <arg name="second_tb3_yaw"   default="1.57"/>

  <arg name="third_tb3_x_pos" default="0.0"/>
  <arg name="third_tb3_y_pos" default="1.0"/>
  <arg name="third_tb3_z_pos" default="0.0"/>
  <arg name="third_tb3_yaw"   default="1.57"/>

  <arg name="fourth_tb3_x_pos" default="0.0"/>
  <arg name="fourth_tb3_y_pos" default="1.5"/>
  <arg name="fourth_tb3_z_pos" default="0.0"/>
  <arg name="fourth_tb3_yaw"   default="1.57"/>

  <include file="$(find gazebo_ros)/launch/empty_world.launch">
    <arg name="world_name" value="$(find turtlebot3_gazebo)/worlds/empty.world"/>
    <arg name="paused" value="false"/>
    <arg name="use_sim_time" value="true"/>
    <arg name="gui" value="true"/>
    <arg name="headless" value="false"/>
    <arg name="debug" value="false"/>
  </include>

  <group ns = "$(arg first_tb3)">
    <param name="robot_description" command="$(find xacro)/xacro --inorder $(find turtlebot3_description)/urdf/turtlebot3_$(arg model).urdf.xacro" />

     <node pkg="gazebo_ros" type="spawn_model" name="spawn_urdf"  args="-urdf -model $(arg first_tb3) -x $(arg first_tb3_x_pos) -y $(arg first_tb3_y_pos) -z $(arg first_tb3_z_pos) -Y $(arg first_tb3_yaw) -param robot_description" />
  </group>

  <group ns = "$(arg second_tb3)">
     <param name="robot_description" command="$(find xacro)/xacro --inorder $(find turtlebot3_description)/urdf/turtlebot3_$(arg model).urdf.xacro" />

     <node pkg="gazebo_ros" type="spawn_model" name="spawn_urdf"  args="-urdf -model $(arg second_tb3) -x $(arg second_tb3_x_pos) -y $(arg second_tb3_y_pos) -z $(arg second_tb3_z_pos) -Y $(arg second_tb3_yaw) -param robot_description" />
  </group>

  <group ns = "$(arg third_tb3)">
    <param name="robot_description" command="$(find xacro)/xacro --inorder $(find turtlebot3_description)/urdf/turtlebot3_$(arg model).urdf.xacro" />

     <node pkg="gazebo_ros" type="spawn_model" name="spawn_urdf"  args="-urdf -model $(arg third_tb3) -x $(arg third_tb3_x_pos) -y $(arg third_tb3_y_pos) -z $(arg third_tb3_z_pos) -Y $(arg third_tb3_yaw) -param robot_description" />
  </group>

  <group ns = "$(arg fourth_tb3)">
    <param name="robot_description" command="$(find xacro)/xacro --inorder $(find turtlebot3_description)/urdf/turtlebot3_$(arg model).urdf.xacro" />

     <node pkg="gazebo_ros" type="spawn_model" name="spawn_urdf"  args="-urdf -model $(arg fourth_tb3) -x $(arg fourth_tb3_x_pos) -y $(arg fourth_tb3_y_pos) -z $(arg fourth_tb3_z_pos) -Y $(arg fourth_tb3_yaw) -param robot_description" />
  </group>
</launch>

  可以通过修改 tb3_x_postb3_y_postb3_z_postb3_yaw 分别设置每个机器人的初始位置和姿态角度。   打开新的终端,输入:  


cd ~/catkin_ws
source devel/setup.bash
roslaunch turtlebot3_gazebo multi_turtlebot3_empty_world.launch

  可以看到4台Turtlebot3出现在了仿真环境中  
多机器人协同控制①——仿真平台搭建   好啦,目前为止,多机器人的环境就搭建完成了,下一篇就要开始针对多个Turtlebot进行简单的编队控制了。


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明多机器人协同控制①——仿真平台搭建
喜欢 (0)

您必须 登录 才能发表评论!

加载中……