第2周--ROS通信编程

ros2通信核心之DDS简介 DDS(Data Distribution Service,数据分发服务)是一种用于实时系统的通信中间件,它为分布式应用程序提供可靠、高效的数据传输。ROS 2 使用 DDS 作为其底层通信机制,因此理解 DDS 的基本概念对于 ROS 2 编程至关重要。 阅读详情

第2周–ROS通信编程

实验要求:

一、按照课件内容,分别完成话题、服务模式的ROS示例程序,并实践练习;

话题模式:

ros2 run demo_nodes_py listener
ros2 run demo_nodes_cpp talker
rqt_graph
  1. ros2 run demo_nodes_py listener

    这个命令运行demo_nodes_py包中的listener节点。demo_nodes_py是一个包含Python编写的ROS 2示例节点的包,而listener节点通常用于订阅某个主题以接收消息。这个节点会等待并处理从其他节点(如talker节点)发送过来的消息。

  2. ros2 run demo_nodes_cpp talker

    这个命令运行demo_nodes_cpp包中的talker节点。demo_nodes_cpp是一个包含C++编写的ROS 2示例节点的包,而talker节点是一个发布者节点,它会发布消息到某个主题。在这个例子中,talker节点很可能会发布一些消息,这些消息随后会被listener节点接收。

  3. rqt_graph

    rqt_graph是一个ROS 2的可视化工具,用于显示当前运行的所有ROS 2节点和它们之间的通信关系。当你运行了这个命令,它会打开一个窗口,展示一个图,其中节点用方框表示,节点之间的消息传递用箭头表示。通过查看这个图,你可以更好地理解ROS 2系统中各个节点是如何相互通信的。

手动发布一个话题:

ros2 topic pub /chatter std_msgs/msg/String 'data: "632107060610"

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

创建workspace工作空间、example_topic_rclcpp功能包和topic_publisher_01.cpp

cd d2lros2/
mkdir -p RCLCPP/workspace/src
cd RCLCPP/workspace/src
ros2 pkg create example_topic_rclcpp --build-type ament_cmake --dependencies rclcpp
touch example_topic_rclcpp/src/topic_publisher_01.cpp

采用面向对象方式写一个节点

#include "rclcpp/rclcpp.hpp"

class TopicPublisher01 : public rclcpp::Node
{
public:
    // 构造函数,有一个参数为节点名称
    TopicPublisher01(std::string name) : Node(name)
    {
        RCLCPP_INFO(this->get_logger(), "%s节点已经启动.", name.c_str());
    }

private:
    // 声明节点
};

int main(int argc, char **argv)
{
    rclcpp::init(argc, argv);
    /*创建对应节点的共享指针对象*/
    auto node = std::make_shared<TopicPublisher01>("topic_publisher_01");
    /* 运行节点,并检测退出信号*/
    rclcpp::spin(node);
    rclcpp::shutdown();
    return 0;
}

修改CMakeLists.txt

add_executable(topic_publisher_01 src/topic_publisher_01.cpp)
ament_target_dependencies(topic_publisher_01 rclcpp)

install(TARGETS
  topic_publisher_01
  DESTINATION lib/${PROJECT_NAME}
)

服务模式:

ros2 run examples_rclpy_minimal_service service//启动一个服务
ros2 service list//查看服务列表
ros2 service call /add_two_ints example_interfaces/srv/AddTwoInts "{a: 5,b: 10}"//手动调用服务

在ROS 2中,服务(service)是一种允许节点之间进行同步通信的机制。节点可以调用一个服务,等待服务完成其任务,并返回结果。以下命令的解释:

  1. ros2 run examples_rclpy_minimal_service service

    这个命令用于启动examples_rclpy_minimal_service包中的service节点。这个节点提供了一个服务,通常用于演示或测试目的。你需要确保examples_rclpy_minimal_service包已经安装在你的ROS 2工作空间中,并且你已经构建了这个工作空间。

  2. ros2 service list

    这个命令用于列出当前运行的所有服务的列表。通过运行这个命令,你可以看到service节点提供的服务是否已成功注册到ROS 2网络中。

  3. ros2 service call /add_two_ints example_interfaces/srv/AddTwoInts "{a: 5,b: 10}"

    这个命令用于调用名为/add_two_ints的服务。这个命令假定服务的数据类型为example_interfaces/srv/AddTwoInts,并且传递了一个JSON格式的消息,其中a的值为5,b的值为10。服务调用会等待服务节点处理这个请求,并返回结果。

    • /add_two_ints 是服务的名称。
    • example_interfaces/srv/AddTwoInts 是服务的消息类型,它定义了服务请求和响应的结构。
    • "{a: 5,b: 10}" 是服务请求的具体内容,按照JSON格式进行编码。

如果一切正常,ros2 service call命令应该会返回服务处理请求后的结果。在这个例子中,如果服务的功能是加法,那么你应该会看到返回的结果为15(5加10)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

二、练习ROS动作编程:客户端发送一个运动坐标,模拟机器人运动到目标位置的过程。包括服务端和客户端的代码实现,要求带有实时位置反馈。同时注意学习cmakelists 的使用方法。

三. 每一个程序背后都站着一堆优秀的代码库。通过学习opencv图像库编程,了解如何借助第三方库函数完成一个综合程序设计。

1. 编写一个打开图片进行特效显示的代码 test1.cpp(见opencv编程参考资料 ); 注意gcc编译命令: gcc test1.cpp -o test1 pkg-config --cflags --libs opencv 请解释这条编译命令,它是如何获得opencv头文件、链接lib库文件的路径的?

gcc test1.cpp -o test1: 这部分命令使用 gcc 编译器编译源文件 test1.cpp,并将生成的可执行文件命名为 test1。这部分命令告诉编译器要编译源文件并生成可执行文件。

pkg-config --cflags --libs opencv: 这部分命令使用 pkg-config 工具来获取 OpenCV 库的编译选项。–cflags 选项用于获取包含 OpenCV 头文件的目录路径,–libs 选项用于获取链接 OpenCV 库文件的路径。这些选项告诉编译器在编译和链接过程中需要包含哪些头文件和链接哪些库文件。

通过将这些选项传递给 gcc 编译器,它就能够知道在编译和链接过程中需要包含哪些头文件和链接哪些库文件,从而正确地编译和链接你的程序。

2. 练习使用opencv库编写打开摄像头压缩视频的程序。参考示例代码1和示例代码2。并回答:

1)如果要求打开你硬盘上一个视频文件来播放,请问示例代码1第7行代码如何修改?

VideoCapture capture("your_video_file.mp4");

2)在示例代码1第9行的while循环中,Mat是一个什么数据结构? 为什么一定要加一句waitKey延时代码,删除它行不行?

Mat 是 OpenCV 中表示图像的数据结构,它是一个矩阵类,用于存储图像的像素信息。waitKey 函数的作用是等待用户按下键盘按键,其参数指定了等待的时间,单位为毫秒。加上 waitKey 函数是为了保持图像窗口的显示。如果不加 waitKey 函数,图像窗口可能会一闪而过或者不会显示,因为程序会在显示图像后立即退出。删除 waitKey 行会导致图像窗口无法正常显示,程序可能会异常退出。

3)示例代码1代码会在while循环中一直运行,你如果试图用鼠标关闭图像显示窗口,会发现始终关不掉。需要用键盘Ctrl+C 强制中断程序,非常不友好。如何改进?

示例代码1的问题在于没有处理窗口关闭的事件,导致窗口无法正常关闭。为了改进这个问题,可以使用 waitKey 函数来检测用户按下键盘的事件,并在用户按下指定按键时退出循环。改进代码如下:
#include <opencv2/opencv.hpp>  
using namespace cv;  
  
int main()  
{  
    // 打开硬盘上的视频文件  
    VideoCapture cap("path_to_your_video_file.mp4"); // 替换为视频文件的实际路径  
    if (!cap.isOpened()) {  
        std::cout << "Error opening video file" << std::endl;  
        return -1;  
    }  
  
    namedWindow("读取视频帧", WINDOW_AUTOSIZE); // 创建窗口,并设置窗口大小可自动调节  
  
    while (true)  
    {  
        Mat frame;  
        cap >> frame;  
        if (frame.empty()) {  
            std::cout << "End of video file reached" << std::endl;  
            break;  
        }  
        imshow("读取视频帧", frame);  
  
        int key = waitKey(30); // 等待按键事件,同时显示当前帧  
        if (key == 27 || key == -1) { // 检查是否按下ESC键或窗口被关闭  
            break;  
        }  
    }  
  
    cap.release(); // 释放VideoCapture对象  
    destroyAllWindows(); // 销毁所有OpenCV创建的窗口  
  
    return 0;  
}

实验心得:

通过本次实验,我深入探索了ROS(Robot Operating System)与OpenCV图像处理库的应用。我学习了ROS的核心概念,如话题与服务模式,并实践了话题的创建、发布与订阅,以及服务的编写与调用。这加深了我对ROS工作原理和编程模式的理解。

同时,我掌握了ROS动作编程,通过实现机器人运动到目标位置的动作,我认识到实时位置反馈在控制过程中的重要性。

在OpenCV方面,我通过处理图片和压缩视频的实践,熟悉了OpenCV库函数的运用。我也解决了如窗口关闭事件处理及waitKey函数作用的疑问。

学习了ROS的核心概念,如话题与服务模式,并实践了话题的创建、发布与订阅,以及服务的编写与调用。这加深了我对ROS工作原理和编程模式的理解。

同时,我掌握了ROS动作编程,通过实现机器人运动到目标位置的动作,我认识到实时位置反馈在控制过程中的重要性。

在OpenCV方面,我通过处理图片和压缩视频的实践,熟悉了OpenCV库函数的运用。我也解决了如窗口关闭事件处理及waitKey函数作用的疑问。

此次实验不仅增强了我对ROS和OpenCV的掌握,还锻炼了我的编程和调试能力。这些经验将对我未来在机器人和计算机视觉领域的学习产生积极影响。

作业:ROS通信编程 经过本次的学习,我了解到了ROS的话题、服务模式和动作编程,并通过练习,初步使用这些知识,让我对ROS的技能更加深刻。### 编译运行程序**进入工作空间**cd ~/ros**编译程序****运行程序**## 总结经过本次的学习,我了解到了ROS的话题、服务模式和动作编程,并通过练习,初步使用这些知识,让我对ROS的技能更加深刻。 阅读详情

相关推荐

ROS2 概念以及通信方式

ROS 2(Robot Operating System 2)是一个用于机器人开发的开源平台,它提供了一系列工具和库,用于构建机器人应用程序。相较于前身ROS(ROS 1),ROS 2在设计上考虑了更多的实时性、安全性和可靠性因素,因此适用于更广泛的应用场景和硬件平台。以下是ROS 2的一些关键特点和概念:分布式架构:ROS 2支持分布式架构,允许节点在多个物理机器上运行,通过网络进行通信。这种架构支持更复杂和大规模的机器人系统。实时性:ROS 2引入了实时通信机制,如数据流控制(DDS),以支持严格的实时

qq_50284870的博客 3085

ros2-foxy-20201211 Windows下failed to create process的解决方法

现象:将ros2-foxy-20201211-windows-debug.amd64.zip解压并按照官方的方法安装后,运行 ros2 run demo_nodes_cpp talker 提示failed to create process。 推测是python的路径写死在exe中,导致ros2.exe找不到python造成的。 打开目录下的local_setup.ps1后发现了一个值为c:\python38\python_d.exe的$_colcon_python_executable变量。 打开C:

u011804085的博客 2664

ROS2 笔记汇总(2) 通信接口

为了让每个 ROS 节点可以用不同的语言编写,比如一个节点用 C++ 控制硬件,另一个节点用 Python 实现上层逻辑,ROS 把通信接口设计成。,ROS 会自动生成对应语言(如 C++ 或 Python)里的数据结构文件,供节点直接使用,开发者不需要自己去写解析逻辑。在本案例中,我们以一个获取目标位置的服务为例,全面了解 ROS 2 中服务接口的定义方法及实际应用方式。,它规定了数据如何进出,模块如何对接,只有两边的格式和要求一致,系统才能正常“搭伙做事”。

你要拥有一个你喜欢并且热爱的人生 1万+

【ROS2机器人入门到实战】4.ROS2初体验

通过本节的小游戏,你应该对ROS2稍微熟悉了一丢丢,不过心中也会多出那么几个问题?比如:为什么一个节点说,一个节点会听到?为什么键盘可以控制小乌龟前进后退?没关系,让我们继续往下,你会一点点的有了拨云见月的感觉。4.ROS2初体验/imgs/image-20220603124742399.png。

生活不止眼前的苟且 1万+

ubuntu环境下实现ROS 2 与 Arduino 通信

本教程为https://blog.youkuaiyun.com/2301_81924597/article/details/141757091?spm=1001.2014.3001.5501的进一步拓展。

2301_81924597的博客 1982

基于IP2369与STM32的45W双向PD移动电源设计

USB PD(Power Delivery)是一种面向高功率、智能协商的通用快充协议,其核心在于通过BMC编码在CC线上完成供电能力(PDO)动态匹配与电压/电流精准调控。IP2369作为高度集成的PD协议管理芯片,内置PHY、协议引擎与MOSFET驱动,可卸载MCU实时通信压力;而STM32F103系列凭借低功耗STOP模式与丰富外设,成为电源状态管理与用户交互的理想协处理器。该组合显著提升系统鲁棒性与能效比,适用于便携式移动电源、嵌入式备用电源及PD协议教学验证等场景。本文围绕IP2369配置电阻精度、

weixin_42608299的博客 515

ROS2基础编程

本文主要介绍如何使用ROS2。基于ROS2 Humble版本,介绍如何在Ubuntu22下安装和使用ROS2和ROS2的开发工具.

hbin5110209161的博客 1725

如何有效使用Project(1)——编制进度计划、保存基准

1.前言: 软件产品的研发、升级、定制等,一般都是以项目的形式进行,此时项目进度计划以及资源使用情况就变成了项目经理关注的重点。如何让项目计划有效可控,及时暴露问题?如何查看资源的负荷情况,看资源分配是否合理。 当然,如果你的公司已经实施了专门的PM软件来监督管控,可以忽略本文。否则,你可以用微软的Project来做到这一工作。 我也算是一个专业的从事PM软件产品的人(虽然我们的客户都是制造...

weixin_34236869的博客 2115

ROS2指令——pkg、run、node、list等

这是ROS2与系统交互的方式在终端输入ros2,即可查看相关指令,如等操作。

beiketaoerge的博客 4481

C#计算八字

private string[] jq = { "小寒", "大寒", "立春", "雨水", "惊蛰", "春分", "清明", "谷雨", "立夏", "小满", "芒种", "夏至", "小暑", "大暑", "立秋", "处暑", "白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪", "冬至" };private string[] dz = { "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥", "子" };

m0_72939038的博客 827

Android13 AudioFlinger混音流程全解析:从prepareTracks_l到threadLoop_write的底层实现

本文深入解析Android13 AudioFlinger混音流程,从prepareTracks_l到threadLoop_write的底层实现。详细剖析MixerThread的核心工作循环,包括音轨预处理、混音算法执行及硬件写入机制,帮助开发者优化音频性能并处理多音轨场景。

tea88的博客 1130

ROS2 机器人操作系统入门和安装以及如何使用 .NET 进行开发

本文是 ROS2 入门的第一课,简单介绍了 ROS 系统,并演示了 ROS2 系统在 Ubuntu 22.04 中的安装(使用 gitee 和清华源)以及其中错误的解决。最后对其优势进行总结,为什么选择 ROS。最后介绍简单 Demo 和如何使用 .NET 接入的其中一种方式。

桑榆肖物 3046

Python爬虫教程:抓取短视频平台数据(以抖音和快手为例)

为什么抓取短视频平台数据?内容分析:通过抓取短视频平台上的视频内容、标题、标签等数据,可以进行内容分类、趋势分析、话题分析等。情感分析:抓取视频的评论数据,并进行情感分析,帮助企业或组织了解公众的情绪反馈。用户行为分析市场监测:通过抓取特定关键词或标签下的视频数据,分析市场趋势,进行竞争对手分析。短视频平台数据类型:视频信息:包括视频标题、描述、标签、作者等。用户信息:包括用户的昵称、粉丝数、关注数等。互动数据评论数据:视频下的用户评论内容及用户信息。

2201_76125261的博客 3662

第2周作业–ROS通信模式编程

第2周作业–ROS通信模式编程 第2周作业–ROS通信模式编程一、话题、服务模式的ROS程序设计1、在工程包中创建项动作编程需要的文件2、创建小乌龟“发布目标位置文件”turtleMoveClient.cpp3、在功能包目录下创建 action 文件夹4、运行程序进行测试二、ROS的分布式通信1、打开终端使用以下命令查看ip地址和主机名称2、分别修改不同计算机的 /etc/hosts 文件,在该文件中加入对方的IP地址和计算机名:3、配置主机IP4、配置从机IP5、测试三. 每一个程序背后都站着一堆优秀的

m0_65936231的博客 1092

DeerFlow 系列教程 第十二篇 | Tools 工具体系——从内置工具到 MCP 扩展

文件此工具允许 Agent 在运行时创建新的自定义 Agent。@toolsoul: str, # SOUL.md 的完整内容description: str, # Agent 的一行描述创建流程从获取agent_name写入配置文件(包含 name 和 description)写入灵魂文件SOUL.md(定义 Agent 的人格和行为)更新中的错误回滚MCP(Model Context Protocol)是一种标准协议,允许 AI Agent 连接外部工具服务器。DeerFlow 通过。

weixin_43674738的博客 180

FPGA学习笔记(一)入门背景、软件及时钟约束的概念及程序下载与固化

使用正点原子的PFPGA开拓者V2学习,通过b站上正点原子的手把手教你学FPGA-基于开拓者V2学习。

贾saisai的博客 3279

第2周作业--ROS通信模式编程

创建小乌龟移动的“服务文件”turtleMove.cpp(1)新建一个终端,这里命名为终端 1,然后进入工程包 my_turtle_package下的 src 文件中命令:cd ~/catkin_ws/src/my_turtle_package/src2) 新建服务文件 turtleMove.cpp命令:touch turtleMove.cpp3) 编写代码:将如下 C++语言代码写入 turtleMove.cpp 文件中,保存后关闭!命令:gedit turtleMove.cpp。

qq_60088361的博客 247

华为OD机试真题 新系统 2026-04-26 Python&JS 实现【最大化游戏试玩资格分发】

新研发了一台游戏设备可以面向用户接受试玩。现有 n 个试玩申请,每个试玩有开始时间和结束时间。作为协调员,为了能让更多人体验到游戏,你需要对试玩申请进行选择,使得:

MISAYAONE的博客 289

【嵌入式系统应用开发第2周作业】----ROS通信模式编程

【嵌入式系统应用开发第1周作业】----ROS通信模式编程

weixin_52166467的博客 544

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

ROS 和 ROS2 架构和通信

ROS 和 ROS2 架构和通信1. ROS 架构设计1.1 OS 层1.2 中间层1.3 应用层2. ROS 的通信机制2.1 话题通信机制2.1.1 Talker 注册2.1.2 Listener 注册2.1.3 ROS Master 进行信息匹配2.1.4 Listener 发送连接请求2.1.5 Talker 确认连接请求2.1.6 Listener 尝试与 Talker 建立网络连接2.1.7 Talker 向 Listener 发布数据2.2 服务通信机制2.2.1 Talker 注册2.2.2

泠山的博客 6878

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

看这一篇就够了!ROS2入门学习:安装、测试、多机通信以及与ROS1的切换、通信

ROS2入门学习:安装、测试、多机通信以及与ros1的切换、通信为什么要写这篇blog1 ROS2优势欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 为什么要写这篇blog 本人研究方向为多移

catkin_ws的博客 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ROS2通信编程

话题是ROS2中最常用的通信方式之一,话题通信采取的是订阅发布模型与MQTT协议类似。

lol123456654321的博客 1651

ROS通信编程

经过本次的学习,我了解到了ROS的话题、服务模式和动作编程,并通过练习,初步使用这些知识,让我对ROS的技能更加深刻。### 编译运行程序**进入工作空间**cd ~/ros**编译程序****运行程序**## 总结经过本次的学习,我了解到了ROS的话题、服务模式和动作编程,并通过练习,初步使用这些知识,让我对ROS的技能更加深刻。

qq_67534992的博客 1991
上一篇: 第1周---ROS1.0环境安装与配置
下一篇: ROS机器人小车建模仿真与SLAM
whynotsolve
博客等级 码龄4年 202粉丝 20原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值