赞
踩
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就可以保存在左侧,下次直接点击就能打开。
三、配置vscode
配置很简单就是安装一些扩展,安装的所有扩展如图,打开vscode左侧四个小正方形的图标安装下图中所有的扩展即可,可以在搜索框搜索:
四、vscode打开工程
选择左上角文件——>打开文件夹——>打开racecar_ws文件夹即可:
五、配置
不想知道配置原理的可以直接跳到第八节,下载我的github代码,运行对应命令即可!
使用cpp编写需要添加以下五个依赖项:
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>
六、创建cpp脚本
在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的代码补全提示就可以很方便的找到具体的成员:
6.3 阿克曼消息发布的节点创建:
cmdpub = node.advertise<:ackermanndrivestamped>("/vesc/low_level/ackermann_cmd_mux/input/teleop", 10, true);
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的线速度和角度运动的代码,小车会在原地打转!七、测试效果 点击vscode最顶上一排的终端——>新建终端: 编译:
catkin_make
运行仿真模型:
roslaunch racecar_gazebo racecar_normal_runway.launch
运行刚写的脚本:
rosrun racecar_gazebo findLine
注意运行cpp脚本是不加cpp结尾的,直接run文件名字即可。
八、代码运行方法
项目地址:https://github.com/xmy0916/racecar.git
大家可以不用配置,直接下载我的远程谷仓即可,代码已经更新
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。