精华内容
下载资源
问答
  • 一、如何创建自定义的msg文件? msg文件是用来描述ROS中自定义的消息类型的,可以被不同语言调用。 msg文件以 .msg 结尾,必须存放在软件包的msg文件夹下。 msg文件可以传递的数据类型很多: int8 int16 int32 ...

    一、如何创建自定义的msg文件?

    msg文件介绍:

    1、msg文件是用来描述ROS中自定义的消息类型的,可以被不同语言调用。

    2、msg文件以 .msg 结尾,必须存放在软件包的msg文件夹下。

    3、msg文件可以传递的数据类型很多:

    int8 int16 int32 int64

    float32 float64

    string

    time duration

    其他msg文件

    长度不固定数组array[] 和长度固定数组array[C]

    4、编写规则:

    每一行内容为: 标准数据类型 数据变量名称

    实操步骤:

    1、建立工作空间并进入src文件夹:

    mkdir -p launch_ws/src
    
    cd ~/launch_ws/src
    

    2、创建package并进入

    catkin_create_pkg launch_test_pkg std_msgs roscpp
    
    cd launch_test_pkg/
    

    3、创建msg文件夹并在其下创建 .msg 文件

    mkdir msg
    
    cd msg
    
    vim myMsg.msg
    

    文件中内容如下:

    string name
    int32 device_id
    float32 percent
                  
    

    4、修改package(即launch_test_pkg)中的文件

    修改package.xml:将下图红框中的两行取消注释

    在这里插入图片描述
    修改CMakeLists.txt文件:

    添加红框中的字符串,以新增配置项:
    在这里插入图片描述
    取消如下框内的注释,箭头所指的地方是自定义msg文件的名称:

    在这里插入图片描述

    取消如下红框内的注释

    在这里插入图片描述
    5、编写cpp文件

    这里仍然以博主的 ROS实战篇(一) 中的例子----节点间实现数据通信为例,分别编写 topic_publisher.cpp 和 topic_subscriber.cpp 两个文件:

    topic_publisher.cpp 内容如下:

    #include "ros/ros.h"
    #include "stdio.h"
    #include "launch_test_pkg/myMsg.h"
    
    int main(int argc, char **argv)
    {
    	ros::init(argc, argv, "topic_publisher");
    	ros::NodeHandle node_handle;
    
    	ros::Publisher pub_number = node_handle.advertise<launch_test_pkg::myMsg>("/count",10);
    	ros::Rate rate(1);
    	int number_count = 0;
    	while(ros::ok())
    	{
    		launch_test_pkg::myMsg msg;
    		msg.name = "robot";
    		msg.device_id = number_count%5;
    		msg.percent = rand()/double(RAND_MAX);
    		pub_number.publish(msg);
    
    
    
    		ros::spinOnce();
    		rate.sleep();
    		number_count++;
    	}
    
    	return 0;
    }	
    

    topic_subscriber.cpp 中的内容如下:

    #include <ros/ros.h>
    #include <launch_test_pkg/myMsg.h>
    
    void num_callback(const launch_test_pkg::myMsg::ConstPtr& msg)
    {
    ROS_INFO("Msg.name: [%s], Msg.device_id: [%d], Msg.percent: [%f]", msg->name.c_str(),msg->device_id, msg->percent);
    }
    
    int main(int argc, char **argv)
    {
    	ros::init(argc, argv, "topic_subscriber");
    	ros::NodeHandle node_handle;
    
    	ros::Subscriber number_subscriber = node_handle.subscribe("/count", 10, num_callback);
    
    	ros::spin();
    	return 0;
    }
    

    这一步完成后,需要修改CMakeLists.txt,即将cpp文件设置为可执行的节点,再完成与库的链接,这一过程和博主的 ROS实战篇(一) 一样,不再赘述。

    二、如何编写launch文件?

    launch文件介绍

    可视作启动文件,方便启动多个节点。

    因为ROS的一个重要思想就是低耦合,每个节点只完成一个功能,使用launch文件可以在大型工程中方便地管理多个节点。

    实操步骤(接上文)

    1、创建launch文件:

    cd ~/launch_ws/src/launch_test_pkg
    
    mkdir launch
    
    cd launch/
    
    vim start_test.launch
    

    launch文件内容如下:

    <!--
    Copyright:
    Author:
    Description
    
    -->
    
    <launch>
            <node pkg="launch_test_pkg" type="publish_node" name="test_publish_node" output="screen"/>
    
            <node pkg="launch_test_pkg" tyoe="subscribe_node" name="test_subscribe_node" output="screen"/>
    </launch>
    
    

    2、编译并配置环境

    cd ~/launch_ws
    
    catkin_make
    
    source devel/setup.bash
    

    3、运行launch文件

    roslaunch launch_test_pkg start_test.launch
    

    4、结果如下图所示:

    在这里插入图片描述
    本文参考大佬的教程:https://www.bilibili.com/video/BV1mC4y1t7Ue

    展开全文
  • ros如何编写launch文件

    千次阅读 2018-03-01 17:25:43
    在ROS中一个节点程序一般只能完成功能单一的任务,但是一个完整的ROS...这就要求我们必须高效率的启动很多节点,而不是通过rosrun命令来依次启动十几个节点程序,launch文件就是为解决这个需求而生,launch文件就是...
    在ROS中一个节点程序一般只能完成功能单一的任务,但是一个完整的ROS机器人一般由很多个节点程序同
    时运行、相互协作才能完成复杂的任务,因此这就要求在启动机器人时就必须要启动很多个节点程序,一般的
    ROS机器人由十几个节点程序组成,复杂的几十个都有可能。
    这就要求我们必须高效率的启动很多节点,而不是通过rosrun命令来依次启动十几个节点程序,launch文件
    就是为解决这个需求而生,launch文件就是一个xml格式的脚本文件,我们把需要启动的节点都写进launch文件

    中,这样我们就可以通过roslaunch工具来调用launch文件,执行这个脚本文件就一次性启动所有的节点程序.

    1.一般每个机器人都有一个XXXX_bringup(随意取名)的包作为软件启动,里面包含launch文件。

      #catkin_create_pkg robot_bringup

    #cd robot_bingup

    #mkdir launch

    #nano test.launch

    <launch>

    <node pkg="test" type="test_node" name="test_node" output="screen" />

    <node pkg="my_pkg" type="my_pkg_node" name="my_pkg_node" output="screen" />

    </launch>


    用法:roslaunch package_name xxx.launch

    roslaunch robot_bingup test.launch2

    • 介绍常用的节点属性
    1 节点重生属性(respawn)
    当roslaunch开启所有nodes后,roslaunch会监视每个node,记录那些仍然活动的nodes。对于每个node,当

    其终止后,我们可以要求roslaunch重启该node,通过使用respawn属性。


    必要节点属性(required)

    当一个节点被声明为必要节点即 required="true"终止的时候,roslaunch 会终止所有其他活跃节点并退出。比如

    在依赖激光雷达的机器人导航中,若激光雷达节点意外退出时,roslaunch将会终止其他节点然后退出。

    3 设定节点所需的参数(param)
    节点中的一些参数可以直接在launch文件中设定,这样就没有必要修改源码和编译了,每次只要修改一下
    launch文件就可以直接修改节点运行的参数。<param>标签定义了在参数服务器上设置的参数,放在<node>标

    签中,在这种情况下,参数被当成了私有参数。

    <launch>

    <node pkg="test" type="test_node" name="test_node" output="screen" />

    <node pkg="my_pkg" type="my_pkg_node" name="my_pkg_node" output="screen" >

    <param name="name" type="str" value="corvin"/>

    <param name="age" type="int" value="20"/>

    <param name="handsome" type="bool" value="true"/>

    <param name="salary" type="double" value="1234.34"/>

    <node>

    </launch>

    修改my_pkg.cpp

    using namespace std;

    string my_name="";

    int my_age=0;

    bool my_handsome=false;

    double my_salary=0.0;

    ros::param::get("~name",my_name);

    ros::param::get("~age",my_age);

    ros::param::get("~handsome",my_handsome);

    ros::param::get("~salary",my_salary);

    ROS_INFO("get param,name:%s,age:%d,ishandsome:%d,salary:%f",my_name.c_str(),my_age,my_handsome,my_salary);

    包含另一个launch文件

    <include file="$(find third_pkg)/launch/third_pkg.launch"/>


    编写launch时的注意事项

    1 roslaunch 不提供节点开始的顺序保证。这是特意的:没有办法知道哪个节点完全初始化
    了,所以启动代码必须在启动顺序上鲁棒性比较强。这个行为体现了ROS哲学:每一个
    节点与其他的节点都应该尽可能的独立、不相关,节点间耦合性尽可能低。
    2 在开始任何一个节点前,roslaunch 将会确定 roscore是否已经在运行,如果没有则自动
    启动它,因此在使用roslaunch启动节点时不用再提前启动roscore了。
    3 大多数 ROS 节点在启动时连接到master节点管理器上,如果没有在launch中配置该节点
    respawn属性为true运行中若连接中断,则不会尝试重新连接。因此如果 roscore被终止,
    当前运行的其他节点将无法建立新的连接,即使稍后重启 roscore 也无济于事。

    展开全文
  • ROS launch文件编写说明

    2019-06-18 20:55:39
    ROS launch文件编写说明
  • launch文件的作用

    launch文件的作用

    1. 同时启动多个节点:尤其是当你的节点很多时候,你需要打开很多窗口,操作起来很麻烦,可以通过定义launch文件实现在一个终端同时启动多个节点的作用;
    2. 定义参数(param):例如指定某个参数的值;或者指定某个文件的路径。

    创建订阅和发布节点

    参考专栏文章《ROS2/C++ 话题发布和订阅》

    创建launch文件

    cd ros_ws/src/cpp_pubsub
    mkdir launch
    gedit launch/test.launch.py	#在ROS2中,一般launch文件后缀格式为name_launch.py或者name.launch.py
    

    launch文件内容如下:

    from  launch import LaunchDescription
    from launch_ros.actions import Node
    
    def generate_launch_description():
        return LaunchDescription([
            Node(
                package='cpp_pubsub',
                node_namespace='pub',
                node_executable='talker',
                node_name='cpp_pubsub',
    	    output='screen'
            ),
            Node(
                package='cpp_pubsub',
                node_namespace='sub',
                node_executable='listener',
                node_name='cpp_pubsub',
    	    output='screen'
            ),
        ])
    

    注意
    我这里使用的是dashing的版本,如果你使用的是Eloquent或者其他更新的版本,可能会有所差异。

    修改CMakelists文件

    增加以下代码:

    install(DIRECTORY launch
      DESTINATION share/${PROJECT_NAME})
    

    如果是在Python对应的工程,则需要修改setup.py文件,具体如下,在data_file中添加如下代码:

    data_files=[
            ('share/ament_index/resource_index/packages',
                ['resource/' + package_name]),
            ('share/' + package_name, ['package.xml']),
            # Include all launch files. This is the most important line here!
            (os.path.join('share', package_name), glob('launch/*.launch.py'))
        ],
    

    编译运行

    cd ../..
    colcon build
    ros2 launch cpp_pubsub test.launch.py
    

    带参数的launch文件

    后续更新

    存在问题

    1. 运行launch文件后,打印的log会隔一段时间才显示过去一段时间的log,而不是实时显示,暂未解决
    展开全文
  • ros进行了不少更新,随之一些命令也要改变,善于查找资料... 我写的display_mbot_urdf.launch文件是对的,但是在执行roslaunch mbot_description display_mbot_urdf.launch 命令时迟迟不能出现rviz工具。鉴于虚拟机...
    ros进行了不少更新,随之一些命令也要改变,善于查找资料是其中重要的
    部分。我是一个小白在不断地学习着ros,希望可以把自己地一些想法和大家
    分享,一起更正,不断进步。
    
       写的display_mbot_urdf.launch文件是对的,但是在执行roslaunch
    

    mbot_description display_mbot_urdf.launch 命令时迟迟不能出现rviz工具。鉴于虚拟机的不稳定性,我尝试着重新写了一个display_mbot_urdf.launch文件,惊喜的是可以出现rviz界面了。但是新的问题又出现了,提示我要安装joint-state-publisher-gui。这里应该使用全称:sudo apt-get install ros-melodic-joint-state-publisher-gui,否则将会报错。另外joint_state_publisher_gui是刚更新出来的包,需要把之前的joint_state_publisher换成joint_state_publisher_gui。

    展开全文
  • Launch文件编写

    千次阅读 2018-10-03 20:04:57
    roslaunch可以用来启动定义在launch文件中的多个节点,且不需要提前roscore。 roslaunch的使用方法为:  $ roslaunch pkg-name launch-file-name 创建turtlemimic.launch文件 &lt;launch&gt; &...
  • launch文件编写 在上一篇的基础上增加了parameters的定义,这里定义参数的名为:param,值为int的10; import os import ament_index_python.packages from launch import LaunchDescription from launch_ros....
  • 玩转ROS2系列: 玩转ROS2系列01–Ubuntu下ROS 2 版本选择和...在上一篇博客中,我们自己编写了一个消息发布节点和一个订阅节点并且可以正常启动了,着一篇我们试着编写一个laucnh文件,通过launch方式来启动节点。...
  • launch文件编写学习

    2019-04-24 16:45:47
    今天又踩了URDF的深坑,记录一下启动URDF文件的launch文件编写 踩坑特别提醒,记得先编译整个文件夹,再设置环境变量,再启动launch 还有设置环境变量时要记得使用永久环境变量设置 echo "source/WORKSPACE/devel/...
  • ROS2 launch文件编写和执行

    千次阅读 2018-12-05 14:06:16
    ROS2 launch文件编写 ...ros2的launch文件和ROS1的launch文件编写有所差别,ROS2可用python编写launch问题 以demo_nodes_cpp包中 talker和listen为例: 在这里插入代码片 talker_listener.launch.py ...
  • 机器人操作系统ROS使用Gazebo仿真... 仿真 在gazebo中放入机器人的操作通常用launch文件实现,步骤可归纳为: 1.设置launch文件参数 2.运行gazebo仿真环境 3.加载机器人模型描述参数 4.加载机器人模型 参考:guyuehome
  • 1、launch文件功能 使用launch文件,可以同时启动多个ros节点,包括master节点。其基本思想是在一个XML格式的文件内将需要同时启动的一组节点罗列出来。 roslaunch package-name launch-file-name 2、创建...
  • launch文件编写随笔
  • Launch文件编写 try_again_later 2018-10-03 20:04:57 1947 收藏 7 分类专栏: ROS 版权 roslaunch可以用来启动定义在launch文件中的多个节点,且不需要提前roscore。 roslaunch的使用方法为: $ roslaunch ...
  • ROS launch 文件编写

    2019-07-11 11:24:10
    原文链接 ROS提供了一个同时启动节点管理器(master)和多个节点的途径,即使...通常的命名方案是以.launch作为启动文件的后缀,启动文件是XML文件。一般把启动文件存储在取名为launch的目录中。 每个XML文件都必...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,076
精华内容 7,230
关键字:

自己编写launch文件