【无人水面艇路径跟随控制2】(C++)USV代码阅读: SetOfLos 类的从路径点和里程计信息中计算期望航向

【无人水面艇路径跟随控制2】(C++)USV代码阅读: SetOfLos 类的从路径点和里程计信息中计算期望航向


请添加图片描述

🌈你好呀!我是 是Yu欸
🌌 2024每日百字篆刻时光,感谢你的陪伴与支持 ~
🚀 欢迎一起踏上探险之旅,挖掘无限可能,共同成长!

写在最前面

阅读代码:https://github.com/USE-jx/USV_path_follow/tree/main

usv path follow:无人水面艇路径跟随
trajectory tracking:轨迹跟踪

请添加图片描述

set_of_los.cpp

motion_control\guidance\los_guidance\src\set_of_los.cpp

这个文件 set_of_los.cpp 实现了 set_of_los.h 中定义的 SetOfLos 类的成员函数。

小结

这个代码片段实现了 SetOfLos 类的构造函数、析构函数、参数设置函数和部分获取航向函数。通过这些函数,可以初始化对象、设置参数并从路径点和里程计信息中计算期望航向。

详细解释

以下是代码的详细解释:

头文件包含

#include "los_guidance/set_of_los.h"

包含头文件 set_of_los.h

命名空间

namespace motion_control {

将代码放在 motion_control 命名空间中,以避免命名冲突。

构造函数和析构函数

SetOfLos::SetOfLos() : index_(0), desired_course_(0), desired_speed_(0), is_final_(false) {}

SetOfLos::~SetOfLos() {}
  • 构造函数 SetOfLos() 初始化成员变量:
  • 析构函数 ~SetOfLos():目前没有需要清理的资源。

设置参数函数

void SetOfLos::setParam(ros::NodeHandle& nh) {
    nh.param("los/desired_speed", desired_speed_, 1.0);
    nh.param("los/switch_distance", switch_dist_, 7.0);
    nh.param("los/use_const_delta", use_const_delta_, true);
    nh.param("los/const_delta", const_delta_, 3.0);
    nh.param("los/delta_max", delta_max_, 10.0);
    nh.param("los/delta_min", delta_min_, 1.0);
    nh.param("los/gamma", gamma_, 1.0);
}

从ROS节点句柄中读取参数并设置成员变量:

获取航向函数

Eigen::Vector2d SetOfLos::getCourseFromWaypoints(const nav_msgs::Path &path, 
                                        const nav_msgs::Odometry &odom,
                                        bool &is_final) {
    if (path.poses.size() < 2) {
        return {tf2::getYaw(odom.pose.pose.orientation), 0};
    }

    //current position
    double current_x = odom.pose.pose.position.x;
    double current_y = odom.pose.pose.position.y;

    //calculate path-tangential angle
    double waypoint_cur_x = path.poses[index_].pose.position.x;
    double waypoint_cur_y = path.poses[index_].pose.position.y;

    double waypoint_next_x = path.poses[index_+1].pose.position.x;
    double waypoint_next_y = path.poses[index_+1].pose.position.y;
    double pi_p = atan2(waypoint_next_y - waypoint_cur_y, waypoint_next_x - waypoint_cur_x);
  • getCourseFromWaypoints 函数从路径点和里程计信息中计算期望航向。
  • 如果路径点数量少于2个,返回当前航向和速度0。
  • 获取当前位置信息 current_xcurrent_y
  • 获取当前路径点和下一个路径点的坐标。
  • 计算路径切线角 pi_p

hello,我是 是Yu欸 。如果你喜欢我的文章,欢迎三连给我鼓励和支持:👍点赞 📁 关注 💬评论,我会给大家带来更多有用有趣的文章。
原文链接 👉 ,⚡️更新更及时。

欢迎大家添加好友交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

是Yu欸

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

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

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

打赏作者

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

抵扣说明:

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

余额充值