当前位置:   article > 正文

vscode 头文件包含问题_智能车竞赛——使用vscode开发四轮摄像头组程序

智能车摄像头组写代码的软件
a2d2acbe8b41b13adaee91463aa9f662.png 一、前言 147c5b3b08aa1cf7c6c427df9f2b33d4.png 之前的教程使用Python代码实现了四轮车的巡线,阿克曼模型确实在方仿真上效果都好多了,今天教大家将代码从python修改成cpp的,毕竟嵌入式程序还是以c语言为主,可以更好的移植到单片机上。修改代码这件事当然有个编译器的提示可以让我们达到事半功倍的效果啦,所以先讲解安装vscode这强大的ide来编写cpp代码。 a2d2acbe8b41b13adaee91463aa9f662.png 二、安装vscode 147c5b3b08aa1cf7c6c427df9f2b33d4.png 2.1 安装Ubuntu make
sudo add-apt-repository ppa:ubuntu-desktop/ubuntu-makesudo apt-get updatesudo apt-get install ubuntu-make
  2.2 安装vscode
umake ide visual-studio-code
中间会第一次确认安装位置,直接回车就行安装在默认位置 中间会第二次确认是否同意软件协议,输入“a”回车即可(霸王条款你不同意也不行哈哈哈)   2.3 启动vscode
cd ~/.local/share/umake/ide/visual-studio-code/bin./code
这时候你的左侧图标栏会出现vscode的蓝色图标,右键lock to launcher就可以保存在左侧,下次直接点击就能打开。   a2d2acbe8b41b13adaee91463aa9f662.png 三、配置vscode 147c5b3b08aa1cf7c6c427df9f2b33d4.png 配置很简单就是安装一些扩展,安装的所有扩展如图,打开vscode左侧四个小正方形的图标安装下图中所有的扩展即可,可以在搜索框搜索:

17287a79173a79ea446d0a90b6625b7b.png

a2d2acbe8b41b13adaee91463aa9f662.png 四、vscode打开工程 147c5b3b08aa1cf7c6c427df9f2b33d4.png 选择左上角文件——>打开文件夹——>打开racecar_ws文件夹即可: 756de18de2c1432d8d7cb4d6a947b5f2.png a2d2acbe8b41b13adaee91463aa9f662.png 五、配置 147c5b3b08aa1cf7c6c427df9f2b33d4.png 不想知道配置原理的可以直接跳到第八节,下载我的github代码,运行对应命令即可!   使用cpp编写需要添加以下五个依赖项:
  • roscpp:ros的cpp支持库
  • geometry_msgs:通用消息类型
  • cv_bridge:图片转换用
  • image_transport:图片转换用
  • opencv:图片处理库
  5.1 修改CMakeList   打开vscode中racecar_gazebo中的CMakeList:

7e1bfbfcab258645cf99f0ff3b02fe6d.png

  在find_package中添加上述五个依赖项并设置opencv的路径:
set(OpenCV_DIR /opt/ros/kinetic/share/OpenCV-3.3.1-dev/)find_package(catkin REQUIRED COMPONENTS    gazebo_ros    geometry_msgs    OpenCV    roscpp    cv_bridge    image_transport)
包含路径中加上opencv的路径:
include_directories(    ${catkin_INCLUDE_DIRS}    ${OpenCV_INCLUDE_DIRS})
加上cpp的执行声明:
add_executable(findLine src/findLine.cpp)
加上目标lib:
target_link_libraries(findline${catkin_LIBRARIES}${OpenCV_LiBRARIES})
添加依赖声明:
add_dependencies(findLine findLine_tutorials_generate_messages_cpp)
修改同目录下的package.xml文件,加上新增的依赖:
<build_depend>geometry_msgsbuild_depend><build_depend>roscppbuild_depend><build_depend>image_transportbuild_depend><build_depend>cv_bridgebuild_depend><build_depend>trajectory_msgsbuild_depend><run_depend>geometry_msgsrun_depend><run_depend>roscpprun_depend><run_depend>image_transportrun_depend><run_depend>cv_bridgerun_depend><run_depend>trajectory_msgsrun_depend>
a2d2acbe8b41b13adaee91463aa9f662.png 六、创建cpp脚本 147c5b3b08aa1cf7c6c427df9f2b33d4.png   在racecar_gazebo下创建src文件夹,然后在文件夹下创建findLine.cpp   6.1 包含阿克曼消息的头文件:
#include "ackermann_msgs/AckermannDrive.h"#include "ackermann_msgs/AckermannDriveStamped.h"
6.2 创建阿克曼消息的速度控制:
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);}

这里我们对比之前的py代码,发现阿克曼的消息类型是AckermannDriveStamped,他是在ackermann_msgs类的,用vscode的代码补全提示就可以很方便的找到具体的成员:

  05e72dc2d7d6fc4cb918bef99ff15777.png   6.3 阿克曼消息发布的节点创建:
cmdpub = node.advertise<:ackermanndrivestamped>("/vesc/low_level/ackermann_cmd_mux/input/teleop"10true);
6.4 接收图像的回调函数:
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);}
这段代码前一部分是将ros的图片消息转换成opencv的图片类型Mat,这样可以方便的使用opencv的库函数来处理图像。中间我是使用色相环来过滤出蓝色和白色中的白色,色相环过滤在使用中我发现效果比二值化好多了,光线的影响也小很多,最后的话我就给大家写好了固定0.5的线速度和角度运动的代码,小车会在原地打转!
  321f05c040fd720173424c22c377c39b.png a2d2acbe8b41b13adaee91463aa9f662.png 七、测试效果 147c5b3b08aa1cf7c6c427df9f2b33d4.png   点击vscode最顶上一排的终端——>新建终端: abcf77f5098354b2223a8010a0c73e3d.png   编译:
catkin_make
2f17290fff2388337218ba526d2e595b.png 运行仿真模型:
roslaunch racecar_gazebo racecar_normal_runway.launch
运行刚写的脚本:
rosrun racecar_gazebo findLine
注意运行cpp脚本是不加cpp结尾的,直接run文件名字即可。 a2d2acbe8b41b13adaee91463aa9f662.png 八、代码运行方法 147c5b3b08aa1cf7c6c427df9f2b33d4.png   项目地址:https://github.com/xmy0916/racecar.git   大家可以不用配置,直接下载我的远程谷仓即可,代码已经更新
  1. cd ~/racecar_ws/src  
  2. git clone https://github.com/xmy0916/racecar.git  
  3. cd ..  
  4. catkin_make  
  5. source ./devel/setup.bash  
  6. roslaunch racecar_gazebo racecar_normal_runway.launch  
  7. rosrun racecar_gazebo findLine
古月居原创作者签约计划已开启,网站(guyuehome.com)已上线【投稿】功能,欢迎大家积极投稿,原创优质文章作者将有机会成为古月居签约作者。 5528d82ef9b1893653eaae4e8885086c.png 2047129f018b7b5334cee8c33a3b5c0c.gif
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/559263
推荐阅读
相关标签
  

闽ICP备14008679号