文章目录
前言
环境说明:
本过程采用Ubuntu18.04+ROS Melodic+Gazebo+yolo3
一、前期准备
(一)创建工作空间
-
创建ros的工作区域
mkdir -p ~/robot_positioning_ws/src
-
转换到工作区域目录
cd ~/robot_positioning_ws/src
-
初始化ROS工作空间
catkin_init_workspace
(二)功能包racecar
-
下载Gazebo搭建赛道
git clone https://github.com/xmy0916/racecar.git
-
安装controllers相关
sudo apt-get install ros-melodic-controller-manager sudo apt-get install ros-melodic-gazebo-ros-control sudo apt-get install ros-melodic-effort-controllers sudo apt-get install ros-melodic-joint-state-controller
-
racecar功能包编译
cd .. catkin_make
编译遇到的问题
①
Could not find a package configuration file provided by "driver_base" with any of the following names
解决方法sudo apt-get install ros-melodic-driver-base
②
Could not find a package configuration file provided by "OpenCV" with any of the following names
解决方法locate OpenCVConfig.cmake
sudo gedit ~/robot_positioning_ws/src/racecar_gazebo/CMakeLists.txt
修改第7行的路径成你的路径:set(OpenCV_DIR /opt/ros/kinetic/share/OpenCV-3.3.1-dev/)
③
ackermann_msgs/AckermannDrive.h: No such file or directory
解决方法sudo apt-get install ros-melodic-ackermann-msgs
编译成功
二、Gazebo搭建自己的虚拟环境
(一)相关设置
-
设置环境变量
echo "source ~/robot_positioning_ws/devel/setup.bash" >> ~/.bashrc source ~/.bashrc
(二)运行小车模型
-
运行语句
roslaunch racecar_gazebo racecar.launch
-
运行效果
说明:tk的控制界面小窗,控制小车的移动,W表示前进,D表示向左转,S表示后退,A表示右转
(三)手动搭建环境
-
打开gazebo
roslaunch gazebo_ros empty_world.launch
-
点击Edit->Build Editor,创建模型,保存该模型
-
导入刚自己创建的赛道模型框架
运行小车模型roslaunch racecar_gazebo racecar.launch
导入创建环境模型
insert->选择对应保存的模型
添加障碍物
保存为world文件
(四)运行创建环境
-
创建launch文件,配置赛道参数
cd ~/robot_positioning_ws/src/racecar/racecar_gazebo/launch sudo gedit lyy.launch
lyy.launch内容
<?xml version="1.0"?> <launch> <!-- Launch the racecar --> <include file="$(find racecar_gazebo)/launch/racecar.launch"> <arg name="world_name" value="lyy"/> </include> </launch>
-
运行gazebo
roslaunch racecar_gazebo lyy.launch
显示如下
三、进行gmapping建图
-
gmapping建图
roslaunch racecar_gazebo slam_gmapping.launch
问题描述:
ERROR: cannot launch node of type [gmapping/slam_gmapping]: gmapping
解决方法sudo apt-get install ros-melodic-gmapping
-
跑完整圈(通过kt控制小窗)
小车的起点
小车终点
Rviz中的轨迹显示
-
保存gmapping创建的地图
sudo apt-get install ros-melodic-map-server cd ~/robot_positioning_ws/src/racecar/racecar_gazebo/map rosrun map_server map_saver -f lyy_map
四、小车自主定位导航
(一)自己创建的环境
-
launch文件的编辑
cd ~/robot_positioning_ws/src/racecar/racecar_gazebo/launch sudo gedit lyy_auto.launch
lyy_auto.launch文件内容
<?xml version="1.0"?> <launch> <!-- Launch the racecar --> <include file="$(find racecar_gazebo)/launch/racecar.launch"> <arg name="world_name" value="lyy"/> </include> <!-- Launch the built-map --> <node name="map_server" pkg="map_server" type="map_server" args="$(find racecar_gazebo)/map/lyy_map.yaml" /> <!--Launch the move base with time elastic band--> <param name="/use_sim_time" value="true"/> <node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen"> <rosparam file="$(find racecar_gazebo)/config/costmap_common_params.yaml" command="load" ns="global_costmap" /> <rosparam file="$(find racecar_gazebo)/config/costmap_common_params.yaml" command="load" ns="local_costmap" /> <rosparam file="$(find racecar_gazebo)/config/local_costmap_params.yaml" command="load" /> <rosparam file="$(find racecar_gazebo)/config/global_costmap_params.yaml" command="load" /> <rosparam file="$(find racecar_gazebo)/config/teb_local_planner_params.yaml" command="load" /> <param name="base_global_planner" value="global_planner/GlobalPlanner" /> <param name="planner_frequency" value="0.01" /> <param name="planner_patience" value="5.0" /> <!--param name="use_dijkstra" value="false" /--> <param name="base_local_planner" value="teb_local_planner/TebLocalPlannerROS" /> <param name="controller_frequency" value="5.0" /> <param name="controller_patience" value="15.0" /> <param name="clearing_rotation_allowed" value="false" /> </node> </launch>
-
运行创建的环境
roslaunch racecar_gazebo lyy_auto.launch
-
启动rviz
roslaunch racecar_gazebo racecar_rviz.launch
-
设计小车行车轨迹
采用2D Nav Goal发布目标
问题描述:
使用2D Nav Goal发布目标时,始终没有反应
解决方式sudo apt-get install ros-melodic-teb-local-planner
由于起点和终点之间没有做墙隔开,所以现在将终点移到对面
-
启动path_pursuit.py脚本文件
rosrun racecar_gazebo path_pursuit.py
实际出现情况
暂时不清楚是什么原因造成的。
(二)下载的功能包中自带环境
-
运行环境
roslaunch racecar_gazebo racecar_runway_navigation.launch
-
启动rviz
roslaunch racecar_gazebo racecar_rviz.launch
-
设计小车行车轨迹
采用2D Nav Goal发布目标位置 -
启动path_pursuit.py脚本文件
rosrun racecar_gazebo path_pursuit.py
运行结果(一部分运动过程)
五、使用YOLO检测识别标记物体
(一)加载YOLO
-
ssh设置
ssh-keygen ##输入之后根据提示输入两次回车,两次密码 ls ~/.ssh eval `ssh-agent` ssh-add ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub #得到一串密匙
登陆GitHub,在账户下拉选项中选择settings,ssh and GPG keys,选择new ssh key,输入名字Default public key,然后将得到的密匙复制到文本框中,然后点击add ssh key,密匙设置完成。
-
下载darknet-ros
cd ~/robot_positioning_ws/src git clone --recursive git@github.com:leggedrobotics/darknet_ros.git
-
编译
cd ~/robot_positioning_ws catkin_make -DCMAKE_BUILD_TYPE=Release
说明:
开始编译整个项目,编译完成后会检查./darknet_ros/darknet_ros/yolo_network_config/weights文件下有没有yolov2-tiny.weights和yolov3.weights两个模型文件,默认下载好的代码里面为了节省体积是不带这两个模型文件的。因此编译之后会自动开始下载模型文件,此时又是一段漫长的等待时间。在开始编译之前,可以提前下载好,把模型文件拷贝到上述文件夹下,就不会再次下载了。
(二)实现检测标记物体
-
打开gazebo
roslaunch racecar_gazebo racecar_runway_navigation.launch
-
打开racecar.gazebo文件查看话题
-
修改ros.yaml文件中订阅的话题
原文件
修改后文件
-
启动YOLO V3
roslaunch darknet_ros darknet_ros.launch
这个给过程非常容易卡住,所以需要多尝试几次。
最终,识别的结果不是很准确,可能的原因是摄像头没有捕获到全部的物体,部分识别成为其他的物体。这个过程确实弄了好久,太容易卡了。需要比较有耐心,才能够的到最终的效果。自己构建环境的时候,需要注意起点与终点之间有有什么东西隔开,不然后面规划路径的时候,就不会绘制。
参考连接