ROS1学习(中级)


手动创建ROS package

  • roscreate-pkg节省精力避免错误,但package只不过就是一个文件夹外加一个XML文件。

    gedit package.xml

  • 在package中添加如下语句:

    <package>
    <name>foobar</name>
    <version>1.2.4</version>
    <description>
    This package provides foo capability.
    </description>
    <maintainer email="foobar@foo.bar.willowgarage.com">PR-foobar</maintainer>
    <license>BSD</license>
    
    <buildtool_depend>catkin</buildtool_depend>
    
    <build_depend>roscpp</build_depend>
    <build_depend>std_msgs</build_depend>
    
    <run_depend>roscpp</run_depend>
    <run_depend>std_msgs</run_depend>
    </package>
  • 还需要一个CMakeLists.txt文件,在 foobar/CMakeLists.txt文件里输入:

    cmake_minimum_required(VERSION 2.8.3)
    project(foobar)
    find_package(catkin REQUIRED roscpp std_msgs)
    catkin_package()

    这就是在ROS下用catkin编译package需要的最小工作了。


管理系统依赖项:

  • ROS packages有时会需要操作系统提供一些外部函数库,这些函数库就是所谓的“系统依赖项”。在一些情况下,这些依赖项并没有被系统默认安装,因此,ROS提供了一个工具rosdep来下载并安装所需系统依赖项。

    rosdep install [package]

  • 为turtlesim下载并安装系统依赖项:

    $ rosdep install turtlesim


Roslaunch在大型项目中的使用技巧

我们希望launch文件能够尽可能的重用,这样在不同的机器人平台上就不需要修改这些launch文件就能使用。即使是从真实的环境转到模拟环境中也只要稍微修改即可。

  • 高层级的launch文件:
  • 高层级的launch文件应该简短,利用include指令将系统的组成部分和ROS parameter引用过来即可。

(待续)


跨机器运行的 Talker / listener

假如说我们希望在两台机器上分别运行talker / listener, 主机名分别为 marvin 和 hal.登陆主机名为marvin的机器,只需

ssh marvin

同样的方法可以登陆hal.

启动 master

ssh hal
roscore

启动 listener

配置ROS_MASTER_URI

ssh hal
export ROS_MASTER_URI=http://hal:11311
rosrun rospy_tutorials listener.py

启动 talker

配置ROS_MASTER_URI

ssh marvin
export ROS_MASTER_URI=http://hal:11311
rosrun rospy_tutorials talker.py


自定义消息

自定义一个消息类型很简单,只要将.msg文件放到一个package的msg文件夹下即可

  • 消息类型都被归属到与package相对应的域名空间下,例如:

    from std_msgs.msg import String

msg = String()

依赖项

如果你要使用在其他package里定义的消息类型,添加:

<build_depend>name_of_package_containing_custom_msg</build_depend>
<run_depend>name_of_package_containing_custom_msg</run_depend>
作者:zhangjn  创建时间:2025-03-30 21:07
最后编辑:zhangjn  更新时间:2025-04-13 15:00