ROS2入门教程—创建ROS2工作空间

ROS2 学习笔记11:创建工作空间 在本教程中,sourceROS 2主发行版作为底层,并通过拉取和构建新工作区中的软件包来创建顶层。顶层会被预置到路径中,并优先于底层,就像你在修改过的turtlesim中看到的那样。建议在处理少量软件包时使用顶层构建,这样就不必把所有东西都放在同一个工作区,也不必在每次迭代时都重建一个巨大的工作区。 阅读详情


  ROS2中的工作空间类似我们常说的概念——“工程”,是我们在ROS中开发具体项目的空间,所有功能包的源码、配置、编译都在该空间下完成。我们可能会同时开发多个项目,就会产生多个工作空间,所以工作空间之间也有一个层次的问题,类似于优先级的概念,比如不同工作空间中有同名的功能包,那运行的时候是启动哪一个呢?ROS默认是启动最上层的工作空间( overlay),上层工作空间中的功能包会覆盖( override)下层工作空间( underlay)中的同名功能包。所以有多个工作空间存在的时候,我们还需要注意设置工作空间的层次。本篇我们就来尝试下工作空间的创建和层次设置。

1 设置环境变量

  工作空间的层次是通过环境变量来配置的,简单来说:下一个配置的工作空间会放到上一个配置的工作空间之上。ROS2安装路径下的功能包一般会被我们设置为最下层的工作空间。所以我们在打开一个新的终端运行ROS2相关的命令之前,都需要设置环境变量:

source /opt/ros/eloquent/setup.bash

  当然,为了方便,可以把上述命令添加到.bashrc文件中。这样,每次打开新的终端就不需要再去source环境变量了,系统能够自动找到ROS2相关的环境。但是对于同时安装了ROS1和ROS2环境的系统,最好不要把source /opt/ros/eloquent/setup.bash命令和source /opt/ros/melodic/setup.bash命令写入.bashrc和/etc/profile,不然会冲突。最好的做法是使用ros1时source /opt/ros/melodic/setup.bash,使用ros2时source /opt/ros/eloquent/setup.bash。

2 创建一个新文件夹

  开发每一个项目的工作空间,最好是独立创建一个文件夹,文件夹的名字可以自由定义,比如我们来创建一个开发用的工作空间,就叫做dev_ws:

mkdir -p ~/dev_ws/src
cd ~/dev_ws/src

  这里的src就是未来放置所有功能包相关文件的位置。

3 克隆例程代码

  在克隆例程代码之前,确保当前终端所在的路径在dev_ws/src目录下。在后续教程中,我们将学习如何创建自己的功能包,但是现在我们先练习将现有功能包整合到已经创建的工作空间。我们将使用的功能包来自ros_tutorials仓库。通过前面的学习教程我们应该都很熟悉turtlesim这个乌龟模拟仿真器了,它就是该仓库中的一个功能包。

  请注意目录列表上方左侧的“分支”下拉列表。克隆此存储库时,添加-b参数,后跟与ROS 2发行版对应的分支。

  在dev_ws/src目录中,对正在使用的发行版运行以下命令:

git clone https://github.com/ros/ros_tutorials.git -b eloquent-devel

  现在,ros_tutorials已克隆到您的工作空间中。如果您现在查看dev_ws/src的内容,您将看到新的ros_tutorials目录。要查看ros_tutorials中的功能包,请输入以下命令:

ls ros_tutorials

  这将列举出您刚刚克隆的内容:

roscpp_tutorials  rospy_tutorials  ros_tutorials  turtlesim

  前面三个包可以忽略,turtlesim是这个仓库中唯一实际的ROS 2功能包。现在我们已经在工作空间中放置好了示例功能包,在编译运行之前,我们还需要配置好这些功能包的依赖。

4 解决依赖问题

  在创建好功能包之后,我们最好养成一个比较好的习惯,就是先解决所有功能包的依赖,不然未来编译运行都会有很多问题。ROS2也提供了自动化的依赖安装方式,需要我们在工作空间的根目录dev_ws下运行如下命令:

rosdep install -i --from-path src --rosdistro eloquent -y

  运行之后,会自动安装缺失的依赖,如果依赖全部满足的话,就会显示:

#All required rosdeps installed successfully

  这里需要注意一点,以上自动化安装依赖的前提是:每个功能包已经完整的将所依赖的包和库在package.xml文件中声明了。

5 编译工作空间

  接下来就可以编译代码啦,需要在工作空间的根目录dev_ws下运行:

colcon build

  编译完成之后,会输出如下信息:

Starting >>> turtlesim
[Processing: turtlesim]                             
Finished <<< turtlesim [50.0s]                         

Summary: 1 package finished [50.6s]

  colcon是ROS2的编译工具,类似于ROS1中的catkin。colcon build后边还可以跟一些常用的参数:
   ∙ \bullet ∙ --packages-up-to 编译指定的功能包,而不是整个工作空间,从而节约编译时间
   ∙ \bullet ∙ --symlink-install 节省每次重建python脚本的时间
   ∙ \bullet ∙ --event-handlers console_direct+ 在终端中显示编译过程中的详细日志(也可以在log文件夹中找到)
  编译结束后,在dev_ws工作空间根目录下,可以看到有几个新创建的文件夹:

build  install  log  src

  其中的install文件夹就是未来运行所有节点启动文件和脚本的位置。

6 设置环境变量

  接下来需要重新打开一个终端,然后来设置dev_ws工作空间的环境变量。(请注意,打开一个新的终端,与编译工作区的终端分开,这一点非常重要,否则会产生非常复杂的问题。)

cd ~/dev_ws
. install/setup.bash

  install里有两个很类似的文件:local_setup.sh和setup.sh,前者仅会设置当前工作空间中功能包的相关环境变量,后者还会设置该工作空间下其他底层工作空间的环境变量。现在我们就可以来运行dev_ws工作空间下的turtlesim功能包了:

ros2 run turtlesim turtlesim_node

  这时会有一个问题,ROS2安装的路径下有一个turtlesim功能包,这里又有一个turtlesim功能包,如何能确定现在运行的就是dev_ws里的turtlesim呢?不如我们来尝试修改下这个包,看下是否会有变化。

7 修改上层工作空间中的功能包

  通过编辑turtlesim窗口上的标题栏,可以在上层工作空间中修改turtlesim。为此,请在~/dev_ws/src/ros_tutorials/turtlesim/src中找到turtle_frame.cpp文件。使用首选文本编辑器打开turtle_frame.cpp。在第52行,您将看到函数setWindowTitle(“TurtleSim”)。将值“TurtleSim”更改为“MyTurtleSim”,如下所示,然后保存文件。

setWindowTitle(" MyTurtleSim");

  修改之后回到dev_ws路径下,再次colcon build编译,然后返回到第二个终端(设置了环境变量. install/setup.bash)运行:

ros2 run turtlesim turtlesim_node

  现在可以看到turtlesim窗口上的标题栏现在显示“MyTurtleSim”。
在这里插入图片描述

  可见,当前运行的确实是dev_ws工作空间下的turtlesim包。如果再打开一个新终端,source环境变量:source /opt/ros/eloquent/setup.bash,然后执行以下命令:

ros2 run turtlesim turtlesim_node

  新弹出的乌龟模拟仿真器窗口如下所示:
在这里插入图片描述

  此时turtlesim窗口上的标题栏显示为“TurtleSim”。

  所以在这里,dev_ws是上层工作空间,ROS2安装路径是下层工作空间,具体运行哪里的包,全看你在终端中如何设置环境变量了。好啦,这就是ROS2中工作空间的基本操作,大家需要熟悉工作空间的创建和编译,同时要理解工作空间层次的概念(主要是环境变量的作用)。

ROS2教程 01 创建工作空间 一、ROS1和ROS2在编译上的区别 ROS1 曾经的ROS1使用Catkin编译系统,在经历catkin编译后会产生四个空间 src 代码空间:用于存储所有功能包的代码 build 编译空间:用于存储编译过程产生的缓存和中间文件 devel 开发空间:用于放置编译生成的可执行文件 install 安装空间:非必须的,可在工作目录下用catkin_make install生成,可以将可执行文件安装到此空间 ROS2 但是在ros2中,使用colcon编译,四个文件夹分别为 build install log 阅读详情

相关推荐

ROS2 学习--新建ros2工作空间和功能包

如何新建ROS2功能包和节点,提供一个完整的创建和编译过程。

wanghq2013的博客 2358

【ROS2 入门】ROS2 创建工作空间

介绍 ROS2 eloquent版本在EHub_tx1_tx2_E100载板,Jeston TX1 核心模块,JetPack_4.6.3刷机后, ubuntu18.04 环境下创建一个工作区,学习如何开发和测试。

cau_weiyuhu的博客 5171

基于ROS2和科大讯飞的文字转语音TTS入门教程

利用ROS2,实现listener和talker,当talker发送以‘topic’为主题的消息时,listener接收并处理消息内容,并调用科大讯飞的TTS模块,将某些文字转换成语音文件。在上一步中,可以直接通过选项安装vscode,也可以直接在ubuntu软件商店里安装,区别是软件商店里的版本更新。节点名称:my_publish (创建项目后某人创建的节点源码,后来才知道,可以不写这个,可以自行创建节点代码。本文使用的操作系统为vm虚拟机,安装的ubuntu22.04,请大家自行百度安装。

DL_62532的专栏 3600

ROS2——创建ROS2工作空间

ROS2中的工作空间类似我们常说的概念——“工程”,是我们在ROS中开发具体项目的空间,所有功能包的源码、配置、编译都在该空间下完成。 我们可能会同时开发多个项目,就会产生多个工作空间,所以工作空间之间也有一个层次的问题,类似于优先级的概念,比如不同工作空间中有同名的功能包,那运行的时候是启动哪一个呢?ROS默认是启动最上层的工作空间( overlay),上层工作空间中的功能包会覆盖(override)下层工作空间(underlay)中的同名功能包。所以有多个工作空间存在的时候,我们还需要注意设置工作空.

hx1113的博客 6045

机器人操作系统ROS2:如何使用colcon创建并编译ROS2工作空间

这是一篇关于如何使用 colcon 创建并构建 ROS2 工作空间的简要教程。它是一个实用性教程,并非用于替代核心文档。

关注智践行,一起学机器人和AI技术 1581

GNSS - PPP软件 - GAMP 在VS2019/2022下完成调试、跑通程序(超详细!)

WIN32;_DEBUG;_CONSOLE;O_WARNINGS;ENAGLO;ENACMP;ENAGAL;ENAQZS;NFREQ=3。

qq_43381998的博客 8236

ros2与windows入门教程-创建工作空间和功能包

ros2与windows入门教程-创建工作空间和功能包

ncnynl的专栏 787

视觉SLAM的前段后端最详细的梳理(硕士入门知识框架更新)

文章目录视觉SLAM的组成结构视觉里程计(VO)-特征点法 -构建稀疏点云地图-直接法 -构建稠密或半稠密的地图 --需要使用 RGB-D 传感器视觉里程计--总结:SLAM 后端研究滤波器法非线性优化后端方式的差异(有五种优化方式):单目视觉里程计的初始化:运动估计:半直接法运动估计的优化方案:关于解决累计误差的一些方法:关键帧的建图及后端优化:特征的深度估计:图优化的后端研究:视觉与IMU融合的分类:视觉与IMU的融合的优势:存在的问题:优秀的开源: 视觉SLAM的组成结构 视觉里程计(VO) -特

DC 6802

ros入门教程--3.ROS2工作空间

在ROS机器人开发中,当我们针对机器人的某些功能进行开发时,会编写各种代码、参数、脚本等文件,这些文件需要放置在一个特定的文件夹中进行管理,这个文件夹在ROS系统中就被称为工作空间。简单来说,工作空间就是一个存放项目开发相关文件的文件夹,是开发过程中存放所有资料的大本营。ROS2工作空间的结构设计合理,各个部分分工明确,为开发者提供了一个高效、便捷的开发环境。通过合理使用工作空间,可以更好地组织和管理代码,提高开发效率,降低维护成本。

甜航一直在的博客 735

Linux命令行入门:从零掌握服务器运维与Shell脚本基础

在信息化时代,操作系统是数字世界的基石,而终端命令行则是高效驾驭服务器的核心技能。无论是软件部署、服务监控还是故障排查,掌握基于Shell的指令操作都能大幅提升工程效率。从最基础的文件目录管理、文本处理,到权限控制、进程监控与网络调试,命令行提供了一套强大且可自动化的操作范式。尤其对于运维工程师和开发者而言,理解管道、重定向以及脚本化任务,意味着将重复劳动转化为可复用的自动化流程。本文从环境准备讲起,系统梳理常用Linux命令的实际场景与输出验证,并延伸至Shell脚本编写与定时任务,帮助初学者快速建立从操

weixin_30522983的博客 252

若依框架二次开发——RuoYi-AI 本地部署流程

若依框架二次开发——RuoYi-AI 本地部署流程

bjzhang75的博客 1776

ROS2教程(入门级):创建ROS 2 package

目标 使用CMake或者Python创建你的第一个软件包,并且运行它的可执行文件。 背景知识 1. 什么是ROS 2 包? 一个包可以被看做是你的ROS2的代码的容器。如果你想让你的代码可以安装或者分享给其他人,那么你将需要将它组织成一个包。通过软件包,你可以发布你的ROS 2 工作,同时其它人可以很容易地构建并使用它。 在ROS 2 中,软件包是用ament作为编译系统,将colon作为编译工具。你可以使用CMake或者Python来创建一个包,这些是官方支持的,虽然也还有其它的编译的类型存在。 2.

D109的博客 4507

YOLOv8【第九章:模型部署篇·第2节】一文搞懂,模型剪枝与压缩技术!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 1513

开源项目最佳实践:ROS2入门教程

开源项目最佳实践:ROS2入门教程 1. 项目介绍 ROS2(Robot Operating System 2)是一个用于开发机器人应用的开源框架。本项目《Week-1-2-Introduction-to-ROS2》是一个入门级教程,旨在帮助初学者快速了解并上手ROS2的基本概念和使用方法。教程涵盖了移动机器人模拟、传感器和执行器使用、地图定位与导航等内容,并在后半部分介绍了机器人臂的直接和逆向运...

gitblog_01004的博客 729

手把手教你学pcie--用Verilog搭建PCIe控制器核心模块

PCIe控制器是硬件设计的核心模块,负责实现设备与主机之间的高速通信。本文将以Verilog语言为例,分步骤讲解如何从零构建一个简化的PCIe控制器核心模块,涵盖事务层(TLP)生成、数据链路层(DLLP)处理和物理层(PHY)接口适配。目标是为嵌入式开发者、FPGA工程师提供一个可扩展的硬件设计框架。​。

MHD0815的博客 334

【CANdelaStudio编辑CDD】-1.2-给$10服务SessionControl创建一个新Session会话并修改Session state machine会话状态机(UDS诊断)

前一篇:【UDS诊断描述文件CDD】-1.1-ISO_14229中$10服务理论部分https://blog.csdn.net/qfmzhu/article/details/120375515案例背景: 在CDD中如何给$10服务创建一个新的Session会话; 在CDD中如何给$10服务修改Session state machine会话状态机。 目录 1 查看$10服务中已有的Session会话​ 2 查看$10服务中已有的Session state machine会话状态机 3 在$10...

「汽车电子助手」的博客 6062

ROS2入门到精通教程(三)快速体验

(ROS2的功能包主要有两种,cpp功能包和python功能包)

熊猫小妖的AI世界 1082

Python 爬虫实战:拼多多商品评论情感分析(含词云生成与差评预警)

在电商行业竞争日益激烈的当下,商家对商品评论的分析需求愈发迫切。通过 Python 爬虫收集拼多多商品评论,并结合情感分析、词云可视化及差评预警技术,商家可精准洞察消费者反馈,优化商品与服务。本文将深度剖析从爬虫搭建到数据挖掘的关键环节,助力读者构建全流程电商评论分析系统。

yansideyucsdn的博客 1447

小白也能学会ros2的入门教程 内附知识图谱和思维导图

快速入门上手ROS2 别再看ROS1 了,准备开始ROS2 吧, 完全按照官方的教程来的,全是动图,比官网的英文枯燥版舒服多了

weixin_36628778的博客 3842

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

《动手学ROS2》3.5.1创建工作空间和功能包

本系列教程作者:小鱼 公众号:鱼香ROS QQ交流群:139707339 教学视频地址:小鱼的B站 完整文档地址:鱼香ROS官网 版权声明:如非允许禁止转载与商业用途。 3.4.1 创建工作空间和功能包 节点需要存在于功能包当中、功能包需要存在于工作空间当中。所以我们要想创建节点,就要先创建一个工作空间,再创建功能包。 1 创建工作空间 工作空间就是文件夹,所以很简单 mkdir -p town_ws/src cd town_ws/src 2.创建一个功能包 我们先讲一下如何创建一个名字叫做vill.

生活不止眼前的苟且 1150

深度学习工具包 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创建工作空间

ROS2学习记录。本人是一个初学者,这篇文章主要记录本人在学习ROS2过程中遇到的问题以及如何解决的。有什么地方写的不对的,还望大佬留言指正。

weixin_46269822的博客 3726

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

ROS2教程(入门级):创建ROS2工作空间

**目标:**创建一个工作空间并且学习如何为开发和测试设置上层工作空间(overlay)。 背景知识 工作空间指的是包含了ROS 2 应用包的文件夹。在使用ROS 2之前,需要在你将要进行工作的终端上,source你安装了ROS 2的工作空间。这使得ROS 2的应用包可以在所打开的终端上使用。 你还有一个选择是source一个上层工作空间,也就是第二工作空间。第二工作空间指的是你添加了一些新的包,但是它跟已经有的ROS 2 工作空间不存在接口。你的基础工作空间必须要包含有你的上层工作空间所需要的全部依赖。你

D109的博客 8187

ROS 创建工作空间流程

本文以移植代码为例说明。目标是把一款云台SDK中的ROS代码部分抠出来移植到自己创建的工作空间中。记录下大致的流程。目录1、创建工作空间2、编译工作空间(可选)3、设置环境变量(可选)4、创建功能包5、拷贝代码、修改 CMakeLists.txt 文件6、编译功能包 7、启用节点 pantilt_ws 文件夹是创建的工作空间,src 文件夹放置后面创建的功能包的源码。catkin_init_workspace 命令用来初始化工作空间,这个命令会在 src 文件夹中生成一个 CMakeLists.txt

Flag_ing的博客 6256

ROS2学习笔记之创建工作空间篇

ROS2学习笔记之创建工作空间篇背景前期准备学习内容1. Source ROS 2 环境变量2. 创建一个新的文件夹3. 下载一个简单的例子4. 解决依赖关系5. 使用colcon编译工作空间6. 加载新建的工作空间7. 修改新建的工作空间中的包总结 学习目标:创建一个工作空间,并对如果进行开发和测试有一个全面的了解 背景 工作空间是一个包含ROS2功能包的一个文件夹。在我们使用ROS2的时候我们...

dckwin的博客 9405

ROS1/ROS2中工作空间和工作包创建详解

在,并附上相关命令示例,适合ROS 1(比如ROS Noetic)和ROS 2(比如ROS 2 Foxy)基础入门。

qq_36812406的博客 2674

ros创建工作空间_ROS工作空间

ros工作空间简单来说相当于工程或者项目,编写ros程序之前,首先需要创建ros工作空间。一. 构建自己的工作目录: 之所以要创建一个自己的工作目录,是为了避免直接在自己的home目录,也就是~目录下创建项目。简洁~目录,是一种比较好的习惯。指令如下:cd ~mkdir workspacecd workspace后续所有的项目都存放 ~/workspace目录下。二. 创建一个ros工作空间...

weixin_39880150的博客 2889
上一篇: ROS2入门教程—录制/回放数据
下一篇: ROS2入门教程—创建ROS2功能包(C++版)
Roar冷颜
博客等级 码龄11年 3万+粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

Roar冷颜

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

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

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

打赏作者

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

抵扣说明:

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

余额充值