基于领航-跟随模式的无人车编队仿真与导航
基于领航-跟随模式的无人车编队仿真与导航
1. 查看系统环境
要运行本仿真程序,需要保证当前环境为ubuntu18.04+ros-melodic-desktop-full
查看ubuntu
版本:
rosnoetic@rosnoetic-VirtualBox:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.6 LTS
Release: 18.04
Codename: bionic
可知,当前ubuntu
版本满足18.04
查看ros
版本:
rosnoetic@rosnoetic-VirtualBox:~$ rosversion -d
melodic
可知,当前ros
版本满足melodic
2. 功能包准备
请先安装相关的ROS
功能包:
- 安装
gmapping包
(用于构建地图):sudo apt install ros-<ROS版本>-gmapping
rosnoetic@rosnoetic-VirtualBox:~$ sudo apt install ros-melodic-gmapping
- 安装
地图服务包
(用于保存与读取地图):sudo apt install ros-<ROS版本>-map-server
rosnoetic@rosnoetic-VirtualBox:~$ sudo apt install ros-melodic-map-server
- 安装
navigation包
(用于定位以及路径规划):sudo apt install ros-<ROS版本>-navigation
rosnoetic@rosnoetic-VirtualBox:~$ sudo apt install ros-melodic-navigation
- 安装
teleop-twist-keyboard包
(用于键盘控制小车):sudo apt install ros-<ROS版本>-teleop-twist-keyboard
rosnoetic@rosnoetic-VirtualBox:~$ sudo apt install ros-melodic-teleop-twist-keyboard
- 安装
joint_state_publisher_gui包
,需要注意自己当前的ros版本:
rosnoetic@rosnoetic-VirtualBox:~$ sudo apt-get install ros-melodic-joint-state-publisher-gui
3. 添加并编译机器人源码
将multirobot_formation.zip
压缩包拖拉至虚拟机的主文件夹
下
解压multirobot_formation.zip
压缩包
将multirobot_formation
文件夹下的build
和devel
文件夹删除
在终端中重新编译multirobot_formation
项目
rosnoetic@rosnoetic-VirtualBox:~$ cd multirobot_formation/
rosnoetic@rosnoetic-VirtualBox:~/multirobot_formation$ catkin_make
接着在终端中执行如下指令,从而可以用vscode
打开multirobot_formation
项目
rosnoetic@rosnoetic-VirtualBox:~$ cd multirobot_formation/
rosnoetic@rosnoetic-VirtualBox:~/multirobot_formation$ code .
快捷键ctrl+shift+B
调用编译,选择:catkin_make:build
可以点击配置设置为默认,修改.vscode/tasks.json
文件
使用如下内容进行覆盖
{
// 有关 tasks.json 格式的文档,请参见
// https://go.microsoft.com/fwlink/?LinkId=733558
"version": "2.0.0",
"tasks": [
{
"label": "catkin_make:debug", //代表提示的描述性信息
"type": "shell", //可以选择shell或者process,如果是shell代码是在shell里面运行一个命令,如果是process代表作为一个进程来运行
"command": "catkin_make",//这个是我们需要运行的命令
"args": [],//如果需要在命令后面加一些后缀,可以写在这里,比如-DCATKIN_WHITELIST_PACKAGES=“pac1;pac2”
"group": {"kind":"build","isDefault":true},
"presentation": {
"reveal": "always"//可选always或者silence,代表是否输出信息
},
"problemMatcher": "$msCompile"
}
]
}
4. 运行代码
4.1 启动无人车仿真程序
ctrl+~
打开vscode
终端,执行:
rosnoetic@rosnoetic-VirtualBox:~/multirobot_formation$ source ./devel/setup.bash
rosnoetic@rosnoetic-VirtualBox:~/multirobot_formation$ roslaunch ares_description display_ares_laser.launch
ctrl+~
打开vscode
终端,执行:
rosnoetic@rosnoetic-VirtualBox:~/multirobot_formation$ source ./devel/setup.bash
rosnoetic@rosnoetic-VirtualBox:~/multirobot_formation$ roslaunch ares_description display_ares_laser_gazebo.launch
ctrl+~
打开vscode
终端,执行:
rosnoetic@rosnoetic-VirtualBox:~/multirobot_formation$ source ./devel/setup.bash
rosnoetic@rosnoetic-VirtualBox:~/multirobot_formation$ roslaunch ares_description display_ares_laser_gazebo.launch
-
如果在启动仿真的过程中,出现错误:[Err] [REST.cc:205] Error in REST request
解决方案
rosnoetic@rosnoetic-VirtualBox:~$ sudo gedit ~/.ignition/fuel/config.yaml
删除
url: https://api.ignitionfuel.org
添加
url: https://api.ignitionrobotics.org
4.2 启动无人车键盘控制程序
键盘控制由launch
文件中的<node name="ares_teleop" pkg="ares_teleop" type="ares_teleop.py" output="screen" />
实现
ctrl+~
打开vscode
终端,执行:
rosnoetic@rosnoetic-VirtualBox:~/multirobot_formation$ source ./devel/setup.bash
rosnoetic@rosnoetic-VirtualBox:~/multirobot_formation$ roslaunch ares_gazebo ares_cloister_gazebo_teleop.launch
在vscode终端
中,敲击键盘”i
“,可以使中间的无人车向前方运动,敲击键盘”k
“,可以使无人车暂停。
4.3 启动无人车导航程序
4.3.1 启动仿真程序
ctrl+~
打开vscode
终端,执行如下指令打开仿真场景:
rosnoetic@rosnoetic-VirtualBox:~/multirobot_formation$ source ./devel/setup.bash
rosnoetic@rosnoetic-VirtualBox:~/multirobot_formation$ roslaunch ares_gazebo ares_cloister_gazebo.launch
新增vscode
终端,执行如下指令打开导航:
rosnoetic@rosnoetic-VirtualBox:~/multirobot_formation$ source ./devel/setup.bash
rosnoetic@rosnoetic-VirtualBox:~/multirobot_formation$ roslaunch ares_navigation navigation_demo.launch
该程序可以打开rviz
仿真模块,需要等待片刻,使得所有的组件话题信息等待完成
使用Rviz
界面上的"2D Nav Goal
"工具指定导航的目标位置与方向,等待小车移动到目标位置。
4.3.2 查看坐标变换关系
首先调用rospack find tf2_tools
查看是否包含该功能包,
rosnoetic@rosnoetic-VirtualBox:~$ rospack find tf2_tools
[rospack] Error: package 'tf2_tools' not found
如果没有,请使用如下命令进行安装:
rosnoetic@rosnoetic-VirtualBox:~$ sudo apt update
rosnoetic@rosnoetic-VirtualBox:~$ sudo apt install ros-melodic-tf2-tools
运行如下命令:
rosnoetic@rosnoetic-VirtualBox:~$ rosrun tf2_tools view_frames.py
[INFO] [1695085300.825369]: Listening to tf data during 5 seconds...
[INFO] [1695085305.836649]: Generating graph in frames.pdf file...
查看当前目录会生成一个frames.pdf
4.3.3 查看话题列表
查看发布的话题列表
rosnoetic@rosnoetic-VirtualBox:~$ rostopic list
/amcl/parameter_descriptions
/amcl/parameter_updates
/amcl_pose
/ares1/base_pose_ground_truth
/ares1/camera/camera_info
/ares1/camera/image_raw
/ares1/camera/image_raw/compressed
/ares1/camera/image_raw/compressed/parameter_descriptions
/ares1/camera/image_raw/compressed/parameter_updates
/ares1/camera/image_raw/compressedDepth
/ares1/camera/image_raw/compressedDepth/parameter_descriptions
/ares1/camera/image_raw/compressedDepth/parameter_updates
/ares1/camera/image_raw/theora
/ares1/camera/image_raw/theora/parameter_descriptions
/ares1/camera/image_raw/theora/parameter_updates
/ares1/camera/parameter_descriptions
/ares1/camera/parameter_updates
/ares1/cmd_vel
/ares1/joint_states
/ares1/odom
/ares1/scan
/ares2/base_pose_ground_truth
/ares2/camera/camera_info
/ares2/camera/image_raw
/ares2/camera/image_raw/compressed
/ares2/camera/image_raw/compressed/parameter_descriptions
/ares2/camera/image_raw/compressed/parameter_updates
/ares2/camera/image_raw/compressedDepth
/ares2/camera/image_raw/compressedDepth/parameter_descriptions
/ares2/camera/image_raw/compressedDepth/parameter_updates
/ares2/camera/image_raw/theora
/ares2/camera/image_raw/theora/parameter_descriptions
/ares2/camera/image_raw/theora/parameter_updates
/ares2/camera/parameter_descriptions
/ares2/camera/parameter_updates
/ares2/cmd_vel
/ares2/joint_states
/ares2/odom
/ares2/scan
/ares3/base_pose_ground_truth
/ares3/camera/camera_info
/ares3/camera/image_raw
/ares3/camera/image_raw/compressed
/ares3/camera/image_raw/compressed/parameter_descriptions
/ares3/camera/image_raw/compressed/parameter_updates
/ares3/camera/image_raw/compressedDepth
/ares3/camera/image_raw/compressedDepth/parameter_descriptions
/ares3/camera/image_raw/compressedDepth/parameter_updates
/ares3/camera/image_raw/theora
/ares3/camera/image_raw/theora/parameter_descriptions
/ares3/camera/image_raw/theora/parameter_updates
/ares3/camera/parameter_descriptions
/ares3/camera/parameter_updates
/ares3/cmd_vel
/ares3/joint_states
/ares3/odom
/ares3/scan
/clock
/diagnostics
/gazebo/link_states
/gazebo/model_states
/gazebo/parameter_descriptions
/gazebo/parameter_updates
/gazebo/set_link_state
/gazebo/set_model_state
/initialpose
/map
/map_metadata
/map_updates
/move_base/DWAPlannerROS/cost_cloud
/move_base/DWAPlannerROS/global_plan
/move_base/DWAPlannerROS/local_plan
/move_base/DWAPlannerROS/parameter_descriptions
/move_base/DWAPlannerROS/parameter_updates
/move_base/DWAPlannerROS/trajectory_cloud
/move_base/NavfnROS/plan
/move_base/TrajectoryPlannerROS/local_plan
/move_base/cancel
/move_base/current_goal
/move_base/feedback
/move_base/global_costmap/costmap
/move_base/global_costmap/costmap_updates
/move_base/global_costmap/footprint
/move_base/global_costmap/inflation_layer/parameter_descriptions
/move_base/global_costmap/inflation_layer/parameter_updates
/move_base/global_costmap/obstacle_layer/parameter_descriptions
/move_base/global_costmap/obstacle_layer/parameter_updates
/move_base/global_costmap/parameter_descriptions
/move_base/global_costmap/parameter_updates
/move_base/global_costmap/static_layer/parameter_descriptions
/move_base/global_costmap/static_layer/parameter_updates
/move_base/goal
/move_base/local_costmap/costmap
/move_base/local_costmap/costmap_updates
/move_base/local_costmap/footprint
/move_base/local_costmap/inflation_layer/parameter_descriptions
/move_base/local_costmap/inflation_layer/parameter_updates
/move_base/local_costmap/obstacle_layer/parameter_descriptions
/move_base/local_costmap/obstacle_layer/parameter_updates
/move_base/local_costmap/parameter_descriptions
/move_base/local_costmap/parameter_updates
/move_base/parameter_descriptions
/move_base/parameter_updates
/move_base/result
/move_base/status
/move_base_simple/goal
/odom
/particlecloud
/rosout
/rosout_agg
/tf
/tf_static
/waypoint_markers
/waypoint_markers_array
4.3.4 查看计算图
启动rqt_graph
rosnoetic@rosnoetic-VirtualBox:~$ rqt_graph
结果如下图所示:
圆圈是节点,方框是话题,箭头表示数据订阅发布的方向
4.4 启动无人车编队控制程序
ctrl+~
打开vscode
终端,执行如下指令打开仿真场景:
rosnoetic@rosnoetic-VirtualBox:~/multirobot_formation$ source ./devel/setup.bash
rosnoetic@rosnoetic-VirtualBox:~/multirobot_formation$ roslaunch ares_gazebo ares_playground_gazebo.launch
新增vscode
终端,执行如下指令打开编队控制:
rosnoetic@rosnoetic-VirtualBox:~/multirobot_formation$ source ./devel/setup.bash
rosnoetic@rosnoetic-VirtualBox:~/multirobot_formation$ roslaunch stage_first OnYourMarkGetSetGo.launch
运行后会提示如下错误,但是并不会影响功能
接着就可以在gazebo
界面中看到小车运动起来,并最终呈现一字型的队形