智能车室内光电组ROS-2020—— 创建工作空间以及移植比赛模型文件
主要参考:
智能车竞赛——室外光电创意组仿真之脱缰的野马
这个教程基本可以实现,在自己操作之前最好先把这个大佬的教程捋一遍!!!
最后附上大佬的bug总汇!在最下面!还有自己遇到的bug!
1、创建工作空间
mkdir -p ~/hg_racecar_ws/srccd ~/racecar_ws/srccatkin_init_workplace
2、创建智能车模型文件夹、智能车控制文件夹、智能车仿真文件夹
mkdir hg_racecar_controlmkdir hg_racecar_descriptionmkdir hg_racecar_gazebo
3、移植文件
将下载下来的比赛以及赛道模型文件打开
打开racecar_description文件夹,将其中的所有的文件全部copy到我们自己创建的hg_racecar_description文件夹中;
将smart_plane整个文件夹全部copy到hg_racecar_ws/src文件夹下;
打开hg_racecar_control文件夹,创建script文件夹,将control_plugin.py文件copy到script文件夹里面去;
打开hg_racecar_gazebo文件夹,创建worlds文件夹,将racetrack.world文件copy到worlds文件夹里面去;
至此,下载下来的比赛以及赛道模型文件中的全部内容移植完毕!
4、文件内容重命名
打开roboware stdio,将创建好的工作空间拖到其中,由于我们功能包的文件名叫做hg_...,因此我们需要修改文件中的内容
打开roboware stdio中左侧面板的搜索功能
将racecar_description字段全部替换为hg_racecar_description;
将racecar_gazebo字段全部替换为hg_racecar_gazebo;
5、添加文件
cd ~/hg_racecar_ws/src/hg_racecar_gazebo
gedit CMakeLists.txt将一下内容复制到里面,然后保存退出cmake_minimum_required(VERSION 2.8.3)
project(hg_racecar_gazebo)## Find catkin macros and libraries
## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
## is used, also find other catkin packages
set(OpenCV_DIR /opt/ros/kinetic/share/OpenCV-3.3.1-dev/)
find_package(catkin REQUIRED COMPONENTSgazebo_rosgeometry_msgsOpenCVroscppcv_bridgeimage_transport
)## System dependencies are found with CMake's conventions
# find_package(Boost REQUIRED COMPONENTS system)## Uncomment this if the package has a setup.py. This macro ensures
## modules and global scripts declared therein get installed
## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html
# catkin_python_setup()################################################
## Declare ROS messages, services and actions ##
################################################## To declare and build messages, services or actions from within this
## package, follow these steps:
## * Let MSG_DEP_SET be the set of packages whose message types you use in
## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...).
## * In the file package.xml:
## * add a build_depend tag for "message_generation"
## * add a build_depend and a run_depend tag for each package in MSG_DEP_SET
## * If MSG_DEP_SET isn't empty the following dependency has been pulled in
## but can be declared for certainty nonetheless:
## * add a run_depend tag for "message_runtime"
## * In this file (CMakeLists.txt):
## * add "message_generation" and every package in MSG_DEP_SET to
## find_package(catkin REQUIRED COMPONENTS ...)
## * add "message_runtime" and every package in MSG_DEP_SET to
## catkin_package(CATKIN_DEPENDS ...)
## * uncomment the add_*_files sections below as needed
## and list every .msg/.srv/.action file to be processed
## * uncomment the generate_messages entry below
## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...)## Generate messages in the 'msg' folder
# add_message_files(
# FILES
# Message1.msg
# Message2.msg
# )## Generate services in the 'srv' folder
# add_service_files(
# FILES
# Service1.srv
# Service2.srv
# )## Generate actions in the 'action' folder
# add_action_files(
# FILES
# Action1.action
# Action2.action
# )## Generate added messages and services with any dependencies listed here
# generate_messages(
# DEPENDENCIES
# std_msgs # Or other packages containing msgs
# )################################################
## Declare ROS dynamic reconfigure parameters ##
################################################## To declare and build dynamic reconfigure parameters within this
## package, follow these steps:
## * In the file package.xml:
## * add a build_depend and a run_depend tag for "dynamic_reconfigure"
## * In this file (CMakeLists.txt):
## * add "dynamic_reconfigure" to
## find_package(catkin REQUIRED COMPONENTS ...)
## * uncomment the "generate_dynamic_reconfigure_options" section below
## and list every .cfg file to be processed## Generate dynamic reconfigure parameters in the 'cfg' folder
# generate_dynamic_reconfigure_options(
# cfg/DynReconf1.cfg
# cfg/DynReconf2.cfg
# )###################################
## catkin specific configuration ##
###################################
## The catkin_package macro generates cmake config files for your package
## Declare things to be passed to dependent projects
## INCLUDE_DIRS: uncomment this if you package contains header files
## LIBRARIES: libraries you create in this project that dependent projects also need
## CATKIN_DEPENDS: catkin_packages dependent projects also need
## DEPENDS: system dependencies of this project that dependent projects also need
catkin_package(
# INCLUDE_DIRS include
# LIBRARIES hg_racecar_gazebo
# CATKIN_DEPENDS gazebo_ros
# DEPENDS system_lib
)###########
## Build ##
############# Specify additional locations of header files
## Your package locations should be listed before other locations
# include_directories(include)
include_directories(${catkin_INCLUDE_DIRS}${OpenCV_INCLUDE_DIRS}
)## Declare a C++ library
# add_library(hg_racecar_gazebo
# src/${PROJECT_NAME}/hg_racecar_gazebo.cpp
# )## Add cmake target dependencies of the library
## as an example, code may need to be generated before libraries
## either from message generation or dynamic reconfigure
# add_dependencies(hg_racecar_gazebo ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})## Declare a C++ executable
add_executable(findLine src/findLine.cpp)## Add cmake target dependencies of the executable
## same as for the library above
# add_dependencies(hg_racecar_gazebo_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})## Specify libraries to link a library or executable target againsttarget_link_libraries(findLine${catkin_LIBRARIES}${OpenCV_LiBRARIES})add_dependencies(findLine findLine_tutorials_generate_messages_cpp)#############
## Install ##
############## all install targets should use catkin DESTINATION variables
# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html## Mark executable scripts (Python etc.) for installation
## in contrast to setup.py, you can choose the destination
# install(PROGRAMS
# scripts/my_python_script
# DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
# )## Mark executables and/or libraries for installation
# install(TARGETS hg_racecar_gazebo hg_racecar_gazebo_node
# ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
# LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
# RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
# )## Mark cpp header files for installation
# install(DIRECTORY include/${PROJECT_NAME}/
# DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
# FILES_MATCHING PATTERN "*.h"
# PATTERN ".svn" EXCLUDE
# )## Mark other files for installation (e.g. launch and bag files, etc.)
# install(FILES
# # myfile1
# # myfile2
# DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
# )#############
## Testing ##
############### Add gtest based cpp test target and link libraries
# catkin_add_gtest(${PROJECT_NAME}-test test/test_hg_racecar_gazebo.cpp)
# if(TARGET ${PROJECT_NAME}-test)
# target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME})
# endif()## Add folders to be run by python nosetests
# catkin_add_nosetests(test)
gedit package.xml复制下面内容到文件中,然后保存退出<?xml version="1.0"?>
<package><name>hg_racecar_gazebo</name><version>0.0.0</version><description>The hg_racecar_gazebo package</description><!-- One maintainer tag required, multiple allowed, one person per tag --> <!-- Example: --><!-- <maintainer email="jane.doe@example.com">Jane Doe</maintainer> --><maintainer email="ubuntu@todo.todo">ubuntu</maintainer><!-- One license tag required, multiple allowed, one license per tag --><!-- Commonly used license strings: --><!-- BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, LGPLv3 --><license>TODO</license><!-- Url tags are optional, but mutiple are allowed, one per tag --><!-- Optional attribute type can be: website, bugtracker, or repository --><!-- Example: --><!-- <url type="website">http://wiki.ros.org/hg_racecar_gazebo</url> --><!-- Author tags are optional, mutiple are allowed, one per tag --><!-- Authors do not have to be maintianers, but could be --><!-- Example: --><!-- <author email="jane.doe@example.com">Jane Doe</author> --><!-- The *_depend tags are used to specify dependencies --><!-- Dependencies can be catkin packages or system dependencies --><!-- Examples: --><!-- Use build_depend for packages you need at compile time: --><!-- <build_depend>message_generation</build_depend> --><!-- Use buildtool_depend for build tool packages: --><!-- <buildtool_depend>catkin</buildtool_depend> --><!-- Use run_depend for packages you need at runtime: --><!-- <run_depend>message_runtime</run_depend> --><!-- Use test_depend for packages you need only for testing: --><!-- <test_depend>gtest</test_depend> --><buildtool_depend>catkin</buildtool_depend><build_depend>gazebo_ros</build_depend><run_depend>gazebo_ros</run_depend><run_depend>controller_manager</run_depend><run_depend>ros_controllers</run_depend><run_depend>ros_control</run_depend><run_depend>gazebo_ros_control</run_depend><build_depend>geometry_msgs</build_depend><build_depend>roscpp</build_depend><build_depend>image_transport</build_depend><build_depend>cv_bridge</build_depend><build_depend>trajectory_msgs</build_depend><run_depend>geometry_msgs</run_depend><run_depend>roscpp</run_depend><run_depend>image_transport</run_depend><run_depend>cv_bridge</run_depend><run_depend>trajectory_msgs</run_depend><!-- The export tag contains other, unspecified, tags --><export><gazebo_ros gazebo_model_path="${prefix}/.." /></export>
</package>
mkdir srccd srcgedit findLine.cpp复制下面的内容然后到文件中,保存退出#include <ros/ros.h>
#include <stdio.h>
#include <stdlib.h>
#include "std_msgs/Float64.h"
#include "sensor_msgs/Image.h"
#include "geometry_msgs/Twist.h"
#include "ackermann_msgs/AckermannDrive.h"
#include "ackermann_msgs/AckermannDriveStamped.h"
#include <opencv2/core.hpp>
#include <opencv/highgui.h>
#include <opencv2/opencv.hpp>
#include "cv_bridge/cv_bridge.h"
#include <sensor_msgs/image_encodings.h>
#include <sensor_msgs/Imu.h>
#include <image_transport/image_transport.h>
#include <trajectory_msgs/JointTrajectory.h>
using namespace cv;class Follower{public:ros::NodeHandle node;static ros::Publisher cmdpub;static ros::Subscriber imageSub;static void image_callback(const sensor_msgs::ImageConstPtr& msg);static void speed_contrl(float speed_car,float angluar_car);Follower();
};ros::Publisher Follower::cmdpub;
ros::Subscriber Follower::imageSub;int main(int argc, char* argv[])
{ros::init(argc,argv,"follower_cpp");Follower f;//调用构造函数while(ros::ok()){ros::Rate loop_rate(0.2);//这里是程序的循环处,可以写你的代码ros::spinOnce();}}void Follower::image_callback(const sensor_msgs::ImageConstPtr& msg)
{cv_bridge::CvImagePtr cv_ptr;try{cv_ptr = cv_bridge::toCvCopy(msg, sensor_msgs::image_encodings::BGR8); }catch(cv_bridge::Exception& e) {ROS_ERROR("cv_bridge exception: %s", e.what());return;}Mat hsv = cv_ptr->image.clone();Mat mask = cv_ptr->image.clone();cvtColor(cv_ptr->image, hsv, COLOR_BGR2HSV);double low_H = 0;double low_S = 0;double low_V = 100;double high_H = 180;double high_S = 30;double high_V = 255;inRange(hsv, Scalar(low_H, low_S, low_V), Scalar(high_H, high_S, high_V), mask);speed_contrl(0.5,0.5);imshow("mask",mask);waitKey(3);
}void Follower::speed_contrl(float speed_car,float angluar_car)
{ackermann_msgs::AckermannDriveStamped ack;ack.drive.speed = speed_car;ack.drive.steering_angle = angluar_car;cmdpub.publish(ack);
}Follower::Follower()
{cmdpub = node.advertise<ackermann_msgs::AckermannDriveStamped>("/vesc/low_level/ackermann_cmd_mux/input/teleop", 10, true);imageSub = node.subscribe("/camera/zed/rgb/image_rect_color",10,image_callback);
}
6、编译
cd ~/hg_racecar_ws/srccatkin_make
如果编译成功则会输出:
7、修改.bashrc文件
gedit ~/.bashrc然后将下面这句话添加到最后一行,保存退出:source ~/hg_racecar_ws/devel/setup.bash
8、运行launch文件查看赛道以及小车模型
roslaunch hg_racecar_description racecar_rviz.launch或者只是运行gazeboroslaunch hg_racecar_description racecar.launch
如果输出成功那么就会显示如下:
10、bug汇总
注意,添加source...到 ~/.bashrc文件的时候一定要添加到最后一行,不然可能找不到功能包!!!
'ascii' codec can't decode byte 0xe6 in position 258: ordinal not in ra The traceback for the exception was written to the log file如果运行launch出现这个错误,多半就是文件中含有中文字母!!! 还有可能就是 如果找地图的模型的时候,要是没有添加CMakeLists.txt和package.xml文件,也会报这样的错误,这个时候需要在放置地图的文件夹中添加CMakeLists.txt和package.xml文件,同时主要文件内容的功能包的名字的修改!!!
如果遇到这个cmd 139 Segmentation fault的问题就是gazebo的版本不合适,比如你用的是gazebo9,但是其实换成gazebo7就解决问题了
但是!!!要是遇到类似的问题,根据一个大佬说,你可以这么考虑:
对于情况三而言,平时避免,就是不要直接插掉软件,可以通过ctrl+c的方法来kill,要是不行的话,直接 运行下面的命令:
killall gzserverkillall gzclient
!!!
要是少了什么依赖,直接少什么加什么,或者直接百度都有!!!
其他问题可以在大佬的bug总汇中查到:(这个实在这个大佬的教程的基础上进行的,最好把大佬的运行一遍熟悉熟悉)
# 智能车仿真 代码使用参考教程:[教程地址](https://www.guyuehome.com/6463) # bug汇总## 报错controllers相关 ```bash sudo apt-get install ros-kinetic-controller-manager sudo apt-get install ros-kinetic-gazebo-ros-control sudo apt-get install ros-kinetic-effort-controllers sudo apt-get install ros-kinetic-joint-state-controller ```## 报错driver_base相关 ```bash sudo apt-get install ros-kinetic-driver-base ```## 报错rtabmap相关 ```bash sudo apt-get install ros-kinetic-rtabmap-ros ```## 报错ackermann_msgs相关```bash sudo apt-get install ros-kinetic-ackermann-msgs ```## 报错findline.cpp找不到opencv头文件 执行:`locate OpenCVConfig.cmake`得到你的opencv的路径执行:`gedit ~/racecar_ws/src/racecar_gazebo/CMakeLists.txt`修改第7行的路径成你的路径:set(OpenCV_DIR /opt/ros/kinetic/share/OpenCV-3.3.1-dev/)## 报错Failed to create the teb_local_planner/TebLocalPlannerROS planner ```bash sudo apt-get install ros-kinetic-teb-local-planner ```## 没有laser相关话题,无法建图 **这个纯属个人失误,写四轮摄像头组的博客的时候觉得激光雷达的蓝色太碍事了就把它关了......我单纯的以为只是关闭了激光显示,原来是把数据都关了!抱歉~** ~/racecar_ws/src/racecar_description/urdf/racecar.gazebo在这个文件中61行改成false即可,代码我已修复,直接下载没有问题的
智能车室内光电组ROS-2020—— 创建工作空间以及移植比赛模型文件相关推荐
- ROS学习:智能车室外光电组仿真
一.模型建立 首先先准备我们的开源仿真包mit-racecar,博主已经把资源上传到CSDN上了.需要请自取. https://download.csdn.net/download/weixin_44 ...
- 全国大学生智能车室外光电组补充资料(偏方版本)
关于比赛正式资料参考钢铁侠和智能车竞赛官方网站.之前,博客涉及"偏方"如下: 来龙去脉:https://blog.csdn.net/ZhangRelay/article/detai ...
- 第十六届全国大学生智能车竞赛创意组-讯飞智慧餐厅
竞赛正式文档可以在全国大学生智能车竞赛网站下载:https://smartcar.cdstm.cn 第十六届全国大学生智能车创意组包括有三个组别: 第十六届全国大学生智能汽车竞赛创意组-百度智慧交通 ...
- 霍尔开关YS1382检测速度 以及对 智能车竞赛节能组的影响
简 介: 根据参加全国大学生智能车同学的反馈,研究了在智能车竞赛中节能信标比赛中出现车模偶尔无法触发信标灯的原因.通过实验测试验证了这是由于所采用的无极性霍尔开关休眠特性所引起的.最后给出了解决方案. ...
- 浅谈全国大学生智能车竞赛-摄像头组图像处理及控制算法
由于是第一次写技术博客,先做一下自我介绍.本人本科专业是光电信息科学与工程(工),就读于长春理工大学光电工程学院,研究生为华中科技大学光学工程专业.本科期间参加参加过各类比赛,其中印象最深的还是智能车 ...
- 第十五届全国大学生智能车人工智能创意组复赛首批团队名单
第十五届全国大学生智能车人工智能创意组复赛首批团队名单 第十五届全国大学生智能车人工智能创意组比赛第一阶段结束了.经过组委会审核.参赛团队申诉后.首批入围创意组复赛的85支团队名单公布如下: 序号 团 ...
- 智能车大赛电磁组------电感的测试
智能车大赛电磁组------电感的测试 前言 在装车的时候发现车队里的有部分电感是坏的,然后我们就需要一个比较有效的方法来鉴定电感的好坏. 我的F车车: 工具 数字示波器,我们用的是正点原子的手持示波 ...
- ROS Noetic入门笔记(二)ROS Noetic创建工作空间和功能包
ROS Noetic入门笔记(一)在ubuntu20.04中安装ROS Noetic并简单测试 ROS Noetic入门笔记(二)ROS Noetic创建工作空间和功能包 ROS Noetic入门笔记 ...
- 第十六届全国大学生智能车竞赛竞速组-室内视觉组补充说明
一.背景 < 第十六届全国大学智能汽车竞赛竞速比赛规则 >已经在 竞赛网站 进行公布,其中包括了七个赛题组别.在往届比赛中,同学们应用NXP半导体公司出品的单片机设计车模作品控制器比较广泛 ...
- 开源的关于智能车竞赛光电起始点方案
▌01 起始点检测 这是在 规与矩,实与虚 给出的由佟超提出并设计的基于光电二极管的智能车竞赛起始点检测方案.他在www.znczz.com对其进行了开源. 原始设计程序也在 CSDN资源 中可以下载 ...
最新文章
- 蓝牙4.0BLE抓包(一) - 搭建EN-Dongle工作环境 使用EN-Dongle抓包 nRF51822
- 汤家凤高等数学基础手写笔记-一元微分学的应用
- 【AI初识境】如何增加深度学习模型的泛化能力
- Github标星86.4K+:常见数据结构与算法的Python实现
- 支持linux系统摄像头模块,在Linux操作系统上使用摄像头
- java 调用r语言包传参数_Java与R语言的配置,调用
- 服务器系统上1068错误,错误1068,详细教您启动网络服务错误1068怎么解决
- Jmeter BeanShell取样器操作变量(一)
- mysql双主故障自动切换_MySQL主库高可用 -- 双主单活故障自动切换方案
- 马化腾谈滴滴;苹果供应商研发柔性玻璃;丁磊谈沉迷手机 | 极客头条
- 【每日算法Day 75】字节跳动面试题:手撕困难题,看过我Day 71的人都会做了!...
- erlang 分布式数据库Mnesia 实现及应用
- WINDOWS NPAPI插件小结
- 手机能给电脑装系统吗_使用手机给电脑装系统的方法
- 别出心裁的Linux命令学习法
- dota2地区服务器延迟,DOTA2 TI8预选赛:南美服务器爆炸比赛延迟
- 分治策略找第K小元素
- python视频转字符详细教程_python视频转字符画教程
- Java 后端服务的跨域处理
- JavaScript去除字符串中所有的标点符号,只保留中文、英文和数字