交汇路口减速慢行[apollo]

我们使用了speed_bump_overlaps 道路重叠的方式,ctrl+鼠标左键可点击进入查看。

第112行为全局的配置参数,for循环的意思是车辆遇到speed_bump就会减速

speed_bump_start_s与speed_bump_end_s作加减相当于加长或缩短了减速带的一个矩形的宽度大小。

代码输入:buildtool create --template plugin \

下面正式开始:

打开网址:星火自动驾驶大赛赛事集锦--交汇路口减速慢行场景(方法一)_Apollo开发者社区

找到 2 新增插件配置流程

复制前五行代码粘贴到vs中,他是同步插件的指令。回车,然后找到相应的目录结构。

然后使用配置参数,输入代码:buildtool profile config init --package planning --profile=default  && aem profile use default

接下来更改插件名:

mv modules/planning/traffic_rules/region_speed_limit/plugin_region_speed_limit_description.xml modules/planning/traffic_rules/region_speed_limit/plugins.xml 

改完后cd该目录然后替换region_speed_limit.pb.txt文件名称为default_conf.pb.txt

然后重新进入workspace空间:cd /apollo_workspace/

检查一下目录树

代码:tree modules/planning/traffic_rules/region_speed_limit/

检查目录树是否一致。

然后查看配置文件是否生效:查看配置文件是否同步到profiles/default中

代码:tree profiles/default/modules/planning/planning_component/

只要有就是对的

输入:ll profiles/default

只要指向default,则也是对的

接下来进入3.2,开始代码部分,复制以下代码到相应的目录下

同样地,复制粘贴到region_speed_limit.h

同样地,BUILD文件也是如此:

继续复制plugins.xml的内容

最后复制region_speed_limit.proto

修改default_conf.pb.txt

复制完毕,接下来修改代码:

1.将下述文件中的23行代码pnc_junction_overlaps修改为crosswalk_overlaps

2.将数据结构修改一下

修改后:

3.修改default_conf.pb.txt

修改前:修改后:

接下来继续控制台输入

首先我们明白一个要求,车辆不可能在碰到人行道就进行减速,而是在人行道之前就需要进行减速。我们就把buffer改大,改成之前的10 10 8 ,然后进行一个编译。

编译代码:buildtool build  -p modules/planning/

编译完成后继续复制粘贴增加新插件

注意:插件是有优先级的,越在上面的部分优先级越高,越先调用traffic_rules。

所以,我们需要变换一下优先级,把RegionSpeedLimit剪贴放到crosswalk上面

改完配置参数就需要编译代码:

接下来给新增插件输出日志

修改BUILD

代码:PLANNING_COPTS = ["-DMODULE_NAME=\\\"planning\\\""]

再添加planning日志依赖:

代码:copts = PLANNING_COPTS

看看日志是否生效的方法:

输入:AINFO << "crosswalk_conf : " << config_.limit_speed() << " " << config_.forward_buffer() << " " << config_.backward_buffer();

或者:AINFO << "硬件配置是否加载成功: : " << config_.limit_speed() << " " << config_.forward_buffer() << " " << config_.backward_buffer();

添加到cc文件中,然后编译代码:buildtool build -p modules/planning/

打开日志,切到data里面的log查看最新的日志

用cat检查一下,看看参数是否改对。

输入代码:aem profile use default

tar -zcvf crosswalk_limit.tar.gz  modules/planning/ profiles/default/

注意:其中crosswalk_limit.tar.gz是文件名

然后提交之

  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Apollo减速带代码通常包含以下几个部分: 1. 车速检测:通过读取车辆CAN总线上的车速信息,获取当前车辆的速度。 2. 减速带检测:通过车辆的摄像头或雷达等传感器,检测车辆是否接近减速带。 3. 减速带识别:通过图像处理或雷达数据分析,识别减速带的位置和形状。 4. 减速带控制:根据车速和减速带位置,计算出需要减速的车速和减速程度,并通过车辆控制系统控制车辆减速。 下面是一个简单的示例代码,以说明如何实现Apollo减速带控制: ```c++ #include <ros/ros.h> #include <std_msgs/Float32.h> #include <sensor_msgs/Image.h> #include <cv_bridge/cv_bridge.h> #include <opencv2/opencv.hpp> // 定义车速信息的全局变量 float g_speed = 0.0f; // 定义回调函数,获取车速信息 void speedCallback(const std_msgs::Float32::ConstPtr& msg) { g_speed = msg->data; } // 定义回调函数,处理摄像头图像 void imageCallback(const sensor_msgs::Image::ConstPtr& msg) { // 将ROS图像消息转换为OpenCV图像格式 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; } // 在图像中检测减速带 cv::Mat hsv, mask; cv::cvtColor(cv_ptr->image, hsv, cv::COLOR_BGR2HSV); cv::inRange(hsv, cv::Scalar(0, 0, 0), cv::Scalar(180, 255, 30), mask); std::vector<std::vector<cv::Point>> contours; cv::findContours(mask, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE); // 如果检测到减速带,则计算需要减速的车速 if (!contours.empty()) { float distance = /* 根据车辆位置和减速带位置计算距离 */; float speed_limit = /* 根据距离和减速带形状计算需要减速的车速 */; if (speed_limit < g_speed) { /* 根据需要减速的车速控制车辆减速 */; } } } int main(int argc, char** argv) { // 初始化ROS节点 ros::init(argc, argv, "deceleration_control"); ros::NodeHandle nh; // 订阅车速信息和摄像头图像 ros::Subscriber speed_sub = nh.subscribe("speed", 1, speedCallback); ros::Subscriber image_sub = nh.subscribe("image", 1, imageCallback); // 控制车辆减速 ros::Publisher brake_pub = nh.advertise<std_msgs::Float32>("brake", 1); std_msgs::Float32 brake_msg; // 循环处理ROS消息 ros::Rate rate(10); while (ros::ok()) { // 发布车辆减速命令 brake_pub.publish(brake_msg); // 处理ROS消息 ros::spinOnce(); // 休眠一段时间 rate.sleep(); } return 0; } ``` 上述代码仅供参考,实际应用中需要根据具体情况进行修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值