网络安全最全ROS2从入门到精通1-2:详解ROS2服务通信机制与自定义服务(2),2024年最新2024年大厂程序员进阶宝典

本人从事网路安全工作12年,曾在2个大厂工作过,安全服务、售后服务、售前、攻防比赛、安全讲师、销售经理等职位都做过,对这个行业了解比较全面。

最近遍览了各种网络安全类的文章,内容参差不齐,其中不伐有大佬倾力教学,也有各种不良机构浑水摸鱼,在收到几条私信,发现大家对一套完整的系统的网络安全从学习路线到学习资料,甚至是工具有着不小的需求。

最后,我将这部分内容融会贯通成了一套282G的网络安全资料包,所有类目条理清晰,知识点层层递进,需要的小伙伴可以点击下方小卡片领取哦!下面就开始进入正题,如何从一个萌新一步一步进入网络安全行业。

学习路线图

其中最为瞩目也是最为基础的就是网络安全学习路线图,这里我给大家分享一份打磨了3个月,已经更新到4.0版本的网络安全学习路线图。

相比起繁琐的文字,还是生动的视频教程更加适合零基础的同学们学习,这里也是整理了一份与上述学习路线一一对应的网络安全视频教程。

网络安全工具箱

当然,当你入门之后,仅仅是视频教程已经不能满足你的需求了,你肯定需要学习各种工具的使用以及大量的实战项目,这里也分享一份我自己整理的网络安全入门工具以及使用教程和实战。

项目实战

最后就是项目实战,这里带来的是SRC资料&HW资料,毕竟实战是检验真理的唯一标准嘛~

面试题

归根结底,我们的最终目的都是为了就业,所以这份结合了多位朋友的亲身经验打磨的面试题合集你绝对不能错过!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

本实验中无需编程,为turtlesim::Spawn定义的/spwan服务

  • 客户端
class ClientNode(Node):
    def \_\_init\_\_(self, name):
        super().__init__(name)
        self.client = self.create_client(Spawn, '/spawn') 

        while not self.client.wait_for_service(timeout_sec=1.0):
            self.get_logger().info('service not available, waiting again...') 
        self.request = Spawn.Request()
                    
    def sendRequest(self):
        self.request.name = "winter\_turtle"
        self.request.x = 1.0
        self.request.y = 1.0
        self.request.theta = 1.57
        self.future = self.client.call_async(self.request)

服务通信的效果如下所示:

在这里插入图片描述

4 自定义服务

自定义服务的通用流程如下:

  • 功能包下新建srv文件夹,在其中添加自定义服务xxx.srv,注意请求和响应数据结构使用---分割
  • 功能包package.xml中添加编译依赖与执行依赖
<buildtool\_depend>rosidl_default_generators</buildtool\_depend>
<exec\_depend>rosidl_default_runtime</exec\_depend>
<member\_of\_group>rosidl_interface_packages</member\_of\_group>

  • 功能包CMakeLists.txt中添加编译消息相关依赖
find_package(rosidl_default_generators REQUIRED)
rosidl_generate_interfaces(${PROJECT_NAME}
	"xxx.srv"
	DEPENDENCIES xxx_srvs
)

ament_export_dependencies(rosidl_default_runtime)

  • 编译自定义消息,在install/<pkg_name>/include中生成由xxx.srv编译的C++可识别的xxx.hpp头文件
  • 引入xxx.hpp即可调用自定义服务

下面给出一个实例

添加如下自定义服务实现一个加法服务,并按上面步骤配置依赖

# client
int32 a
int32 b
---
# server
int32 sum

定义一个服务器、一个客户端,限于篇幅只贴出部分代码,完整代码见文末。

  • 服务器
class ServerNode : public rclcpp::Node
{
    public:
        ServerNode() : Node("lab\_srv\_server\_own") {
            server_ = create\_service<own\_srv\_lab::srv::Add>(
                "/add\_service",
                std::bind(&ServerNode::OnAddSrvCallBack, this, std::placeholders::_1, std::placeholders::_2)
            ); 
        }

    private:
        rclcpp::Service<own_srv_lab::srv::Add>::SharedPtr server_;

        void OnAddSrvCallBack(
            const std::shared_ptr<own_srv_lab::srv::Add::Request> request, 
            std::shared_ptr<own_srv_lab::srv::Add::Response> response
        ) {
            response->sum = request->a + request->b;
            RCLCPP\_INFO(rclcpp::get\_logger("rclcpp"), "Incoming request\na: %d" " b: %d", request->a, request->b);
            RCLCPP\_INFO(rclcpp::get\_logger("rclcpp"), "sending back response: [%d]", response->sum);
        }
};

  • 客户端
ClientNode() : Node("lab\_srv\_client\_own") {
    client_ = create\_client<own\_srv\_lab::srv::Add>("/add\_service"); 
}

void request(int a, int b) {
    auto add_srv = std::make\_shared<own\_srv\_lab::srv::Add::Request>();
    add_srv->a = a;          
    add_srv->b = b;

    while (!client_->wait\_for\_service(std::chrono::seconds(1))) {                                                   
        if (!rclcpp::ok()) {
            RCLCPP\_ERROR(rclcpp::get\_logger("rclcpp"), "Interrupted while waiting for the service. Exiting.");
            return;
        }
        RCLCPP\_INFO(rclcpp::get\_logger("rclcpp"), "service not available, waiting again...");
    }

    auto result = client_->async\_send\_request(add_srv, std::bind(&ClientNode::OnResultCallBack, this, std::placeholders::_1));
}

服务通信效果如下所示:

在这里插入图片描述

5 话题、服务通信的异同

对比话题服务
通信模式发布-订阅请求-响应
同步性异步同步
缓冲区
实时性
节点关系多对多一对多(1个server对应一个服务)
通信格式.msg.srv
使用场景连续高频的数据传输,例如激光雷达、里程计传输数据偶尔调用的功能,例如图像识别

完整代码通过下方博主名片联系获取


🔥 更多精彩专栏

给大家的福利

零基础入门

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

同时每个成长路线对应的板块都有配套的视频提供:

在这里插入图片描述

因篇幅有限,仅展示部分资料

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值