2021-03-11

本文介绍了一种基于ROS的路径跟踪算法实现细节。该算法通过坐标转换将地图坐标系下的路径点转换到里程计坐标系下,并选取合适的路径点作为局部目标,以实现精确的路径跟踪。文中展示了具体的实现代码,包括路径点选择、坐标转换和局部目标确定等关键步骤。

https://robomaster.ones.ai/project/#/home
https://pinyin.sogou.com/linux/help.php
void Path_tracking::multi_select(const PoseSE2& currant_odom_pose)
{
int i=0,j=0;
for(geometry_msgs::PoseStamped each_path_point:map_path.poses)
{
geometry_msgs::PoseStamped path_point_odom;
try
{
tf_listener.transformPose(“odom”, ros::Time(0),each_path_point,“map” ,path_point_odom);
}
catch (tf::TransformException &ex)
{
ROS_ERROR("%s",ex.what());
break;
// ros::Duration(1.0).sleep();
}
if(i<100)
{
a[i][0] = path_point_odom.pose.position.x;
a[i][1] = path_point_odom.pose.position.y;
i++ ;
}
else{
i=0;
break;
}
}
for(geometry_msgs::PoseStamped each_path_point:map_path.poses)
{
geometry_msgs::PoseStamped path_point_odom;
try
{
tf_listener.transformPose(“odom”, ros::Time(0),each_path_point,“map” ,path_point_odom);
}
catch (tf::TransformException &ex)
{
ROS_ERROR("%s",ex.what());
break;
// ros::Duration(1.0).sleep();
}
if(j<100)
{
b[j][0] = path_point_odom.pose.position.x;
b[j][1] = path_point_odom.pose.position.y;
j++ ;
}
else{
j=0;
break;
}
}
double sumx=0,maxpoint=0,maxpointx,maxpointy;

for(int k=0;k<99;k++)
{
    double s = sqrt(pow((a[k][0] -b[k][0]),2)+pow((a[k][1] -b[k][1]),2));
    sumx+=s;
    if(sumx!=0 and sumx==sumx)
    {
 //std::cout<<"sumx"<<sumx<<std::endl;
    }

    if(s>maxpoint)
    {
        maxpoint = s;
        maxpointx = a[k][0];
        maxpointy = a[k][1];
    }
    if(sumx>2.2 && if_on==0)
    {   
    
        select=1;
    if_on =1;
        break;
    }
if(if_on==1 && sumx<0.8)
{
    select=0;
    if_on=0;
    ROS_INFO("guider off");
    break;
}
}
if(select)
{
    ROS_WARN("guiding");
    local_goal.x()= maxpointx;
    local_goal.y()= maxpointy;
}

}

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lu750310

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值