草庐IT

ros2 foxy创建一个包和节点-ubuntu20.04

master cat 2024-07-20 原文

文章目录

创建工作区目录

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws

我们创建了两个目录,ros2_ws和在他下面的子目录,运行编译的目录在ros2_ws目录下,src目录下是我们生成的ros的包,我们自己编写的代码也都早src目录下,colcon build编译之后会在ros2_ws目录下生成一下文件,运行程序也是在ros2_ws这个目录下。

创建包和节点

使用ros2 pkg create来创建包和节点,该命令是在src目录下执行

  1. 只创建包
ros2 pkg create <package_name> --build-type ament_cmake

2.创建包并添加依赖

ros2 pkg create my_package --build-type ament_cmake --dependencies std_msgs rclcpp
  • ament_cmake,适用于c++,是cmake的增强版
  • ament_python,适用于Python
  • 创建包的同时添加std_msgsrclcpp的依赖
  1. 创建包的同时添加节点
ros2 pkg create <package_name> --build-type ament_cmake --node-name <node_name> --dependencies std_msgs rclcpp
  • 创建包名填入package_name
  • 创建节点名填入node_name
  • 这里添加了std_msgsrclcpp两个依赖,需要的依赖填在在后面

运行节点的命令

ros2 run 包名 可执行文件名
ros2 run package_name exectable_name
  1. 列出所有的包
ros2 pkg list
  1. 输出某个包的路径前缀
ros2 pkg prefix <package_name>
  1. 列出摸个包的清单信息
ros2 pkg xml <package_name>

colcon build编译

我们在有src文件夹的目录下,也就是执行文件的目录

编译所有的包

colcon build

指定单独编译某个包:

colcon build --packages-select <package_name>

CMakeLists.txt文件

该文件是告诉编译器,想要找某个节点去哪里找。

cmake_minimum_required(VERSION 3.5)
project(ros_learn)  //包的名称

find_package

如果是添加了某些依赖,需要再find_package中添加

# find dependencies
find_package(ament_cmake REQUIRED)
find_package(std_msga REQUIRED)
find_package(rclcpp REQUIRED)

add_executable

添加节点,表示如果编译器要找那个节点到那个目录下去找

// 表示告诉编辑器想要找infor_publish这个节点去src目录下的infor_publish.cpp去找
add_executable(infor_publish src/infor_publish.cpp)

然后加上ament_target_dependencies这项,该项里记录者余姚的依赖和运行节点

ament_target_dependencies(
  infor_publish
  "std_msga"
  "rclcpp"
)
//rclcpp和std_msga也可以不加双引号

然后还需要安装一下,安装一下我们的可执行节点

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

package.xml

该文件中需要添加一下我们手动添加的依赖

<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
  <name>ros_learn</name>   <!-- 包的名称 -->
  <version>0.0.0</version>
  <description>TODO: Package description</description>
  <maintainer email="aywq@todo.todo">aywq</maintainer>
  <license>TODO: License declaration</license>

  <buildtool_depend>ament_cmake</buildtool_depend>

  <depend>std_msgs</depend>
  <depend>rclcpp</depend>

  <test_depend>ament_lint_auto</test_depend>
  <test_depend>ament_lint_common</test_depend>

  <export>
    <build_type>ament_cmake</build_type>
  </export>
</package>

面相过程的方式生命一个节点

  • 要继承rclcpp::Node的节点(auto node = std::make_shared<rclcpp::Node>("ros_1")),然后打印一条消息
    // 1. 导入库文件
# include "rclcpp/rclcpp.hpp"

int main(int argc,char **argv)
{
    //2.初始化客户端库
    rclcpp::init(argc,argv);
    //3.使用智能指针创建新的节点对象
    auto node = std::make_shared<rclcpp::Node>("ros_1");// 当我们初始化节点的时候要给他一个参数,给节点起一个名字

    // ros的打印
    RCLCPP_INFO(node->get_logger(),"打印内容");

    //4.使用spin循环节点
    rclcpp::spin(node);
    //5. 关闭客户端库
    rclcpp::shutdown();
}

以面向对象的方式创建一个节点

  • 在面相对象的节点的创建过程中,我们要声明一个类,该类要继承rclcpp::Node:public rclcpp::Node),否则该类无法拥有拥有日志打印,创建服务话题的能力。
  • 构造函数要给在初始化列表给父类的Node传节点的名字
// 1. 导入库文件
# include "rclcpp/rclcpp.hpp"
# include <string>

// 定义一个类
// 先要让这个类继承rclcpp::Node,只有继承了这个  才能拥有日志打印,创建服务话题的能力
class infor_publish :public rclcpp::Node 
{
private:
    /* data */
public:
    infor_publish(std::string name);  //构造函数在定义是不用继承初始化列表
    ~infor_publish();
};
// 我们在声明构造函数是要调用父类的构造函数,给他传一个参数,参数为节点的名字
infor_publish::infor_publish(std::string name):Node(name)
{
    RCLCPP_INFO(this->get_logger(),"hahaha:%s",name.c_str()); // name是一个string类型的,我们需要把他c的字符串打印
}
infor_publish::~infor_publish()
{
    RCLCPP_INFO(this->get_logger(),"bye!!!");
}

int main(int argc,char **argv)
{
    //2.初始化客户端库
    rclcpp::init(argc,argv);
    //3.使用智能指针创建新的节点对象,在面相对象的这节点声明,智能指针就要输入类的类型,而不是rclcpp::Node
    auto node = std::make_shared<infor_publish>("ros2");

    //4.使用spin循环节点
    rclcpp::spin(node);
    //5. 关闭客户端库
    rclcpp::shutdown();
}

有关ros2 foxy创建一个包和节点-ubuntu20.04的更多相关文章

  1. ruby - 如何在 Ubuntu 中清除 Ruby Phusion Passenger 的缓存? - 2

    我试过重新启动apache,缓存的页面仍然出现,所以一定有一个文件夹在某个地方。我没有“公共(public)/缓存”,那么我还应该查看哪些其他地方?是否有一个URL标志也可以触发此效果? 最佳答案 您需要触摸一个文件才能清除phusion,例如:touch/webapps/mycook/tmp/restart.txt参见docs 关于ruby-如何在Ubuntu中清除RubyPhusionPassenger的缓存?,我们在StackOverflow上找到一个类似的问题:

  2. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

    之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

  3. 在VMware16虚拟机安装Ubuntu详细教程 - 2

    在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主

  4. kvm虚拟机安装centos7基于ubuntu20.04系统 - 2

    需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc

  5. ruby - ri 有空文件 – Ubuntu 11.10, Ruby 1.9 - 2

    我正在运行Ubuntu11.10并像这样安装Ruby1.9:$sudoapt-getinstallruby1.9rubygems一切都运行良好,但ri似乎有空文档。ri告诉我文档是空的,我必须安装它们。我执行此操作是因为我读到它会有所帮助:$rdoc--all--ri现在,当我尝试打开任何文档时:$riArrayNothingknownaboutArray我搜索的其他所有内容都是一样的。 最佳答案 这个呢?apt-getinstallri1.8编辑或者试试这个:(非rvm)geminstallrdocrdoc-datardoc-da

  6. ruby - 在 Ubuntu 14.04 中使用 Curl 安装 RVM 时出错 - 2

    我试图在Ubuntu14.04中使用Curl安装RVM。我运行了以下命令:\curl-sSLhttps://get.rvm.io|bash-sstable出现如下错误:curl:(7)Failedtoconnecttoget.rvm.ioport80:Networkisunreachable非常感谢解决此问题的任何帮助。谢谢 最佳答案 在执行curl之前尝试这个:echoipv4>>~/.curlrc 关于ruby-在Ubuntu14.04中使用Curl安装RVM时出错,我们在Stack

  7. ruby - rails 3.2.2(或 3.2.1)+ Postgresql 9.1.3 + Ubuntu 11.10 连接错误 - 2

    我正在使用PostgreSQL9.1.3(x86_64-pc-linux-gnu上的PostgreSQL9.1.3,由gcc-4.6.real(Ubuntu/Linaro4.6.1-9ubuntu3)4.6.1,64位编译)和在ubuntu11.10上运行3.2.2或3.2.1。现在,我可以使用以下命令连接PostgreSQLsupostgres输入密码我可以看到postgres=#我将以下详细信息放在我的config/database.yml中并执行“railsdb”,它工作正常。开发:adapter:postgresqlencoding:utf8reconnect:falsedat

  8. ruby-on-rails - Ubuntu 14.04 Rails 丢失文件 - 2

    安装Rails时,一切都很好,但后来,我写道:rails-v和输出:/home/toshiba/.rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in`require':cannotloadsuchfile--rails/cli(LoadError)from/home/toshiba/.rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in`r

  9. Ubuntu20.04系统WineHQ7.0安装微信 - 2

    提供3种Ubuntu系统安装微信的方法,在Ubuntu20.04上验证都ok。1.WineHQ7.0安装微信:ubuntu20.04安装最新版微信--可以支持微信最新版,但是适配的不是特别好;比如WeChartOCR.exe报错。2.原生微信安装:linux系统下的微信安装(ubuntu20.04)--微信适配的最好,反应最快,但是微信版本只到2.1.1,版本太老,很多功能都没有。3.深度deepin-wine6安装微信:ubuntu20.04+系统deepin-wine6安装新版微信--综合比较好,当前个人使用此种方法1个月,微信版本3.4;没什么大问题,尚可。一、WineHQ7.0安装微信

  10. ruby-on-rails - 无法构建 gem native 扩展 (mkmf (LoadError)) - Ubuntu 12.04 - 2

    这个问题在这里已经有了答案:Unabletoinstallgem-Failedtobuildgemnativeextension-cannotloadsuchfile--mkmf(LoadError)(17个答案)关闭9年前。嘿,我正在尝试在一台新的ubuntu机器上安装rails。我安装了ruby​​和rvm,但出现“无法构建gemnative扩展”错误。这是什么意思?$sudogeminstallrails-v3.2.9(没有sudo表示我没有权限)然后它会输出很多“获取”命令,最终会出现这个错误:Buildingnativeextensions.Thiscouldtakeawhi

随机推荐