ROS学习笔记-1: 构建工作空间-创建catkin包-编写发布器与订阅器

2023-05-16

1.ROS文件系统介绍
http://wiki.ros.org/cn/ROS/Tutorials/NavigatingTheFilesystem
2.Installing catkin
http://wiki.ros.org/catkin#Installing_catkin
3.《ROS开源机器人控制基础》P25:2)catkin工作空间
4.Creating a workspace for catkin
http://wiki.ros.org/catkin/Tutorials/create_a_workspace
5.Building and using catkin packages in a workspace
http://wiki.ros.org/catkin/Tutorials/using_a_workspace

1.turtle模拟:《机器人操作系统(ROS)浅析》
(分别在不同终端窗口执行)
roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key
rqt_graph
rostopic echo /turtle1/cmd_vel (rostopic list)
rosmsg show turtlesim/Color
rosnode kill -a (rosnode kill node-name)

2.工作空间-catkin包-发布器与订阅器: http://www.ncnynl.com/archives/201611/1059.html
(1) 工作空间
cd ~/catkin
catkin_make
source devel/setup.bash  (初始化环境变量,将当前工作空间设置在ROS工作环境的最顶层)
echo $ROS_PACKAGE_PATH
(2) catkin包
cd ~/catkin_ws/src
catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
rospack depends1 beginner_tutorials (rospack depends1 rospy) (rospack depends beginner_tutorials)
(3) 发布器与订阅器
roscd beginner_tutorials
cat package.xml
mkdir msg
cd msg
touch Num.msg
nano Num.msg (输入int64 num)
cd ../
nano package.xml 
在nano package.xml 添加:
<build_depend>message_generation</build_depend>
<run_depend>message_runtime</run_depend>
nano CMakeLists.txt
在nano CMakeLists.txt修改:
find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
  message_generation
)
add_message_files(
  FILES
  Num.msg
)
generate_messages(
  DEPENDENCIES
  std_msgs
)
catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES beginner_tutorials
    CATKIN_DEPENDS roscpp rospy std_msgs message_runtime
#  DEPENDS system_lib
)
cd ~/catkin_ws
catkin_make
编写发布器
roscd beginner_tutorials
mkdir scripts
cd scripts
touch talker.py
chmod +x talker.py (设置可执行)
nano talker.py
在talker.py输入:
#!/usr/bin/env python
import rospy
from std_msgs.msg import String
def talker():
    pub = rospy.Publisher('chatter', String, queue_size=10)
    rospy.init_node('talker', anonymous=True)
    rate = rospy.Rate(10) # 10hz
    while not rospy.is_shutdown():
        hello_str = "hello world %s" % rospy.get_time()
        rospy.loginfo(hello_str)
        pub.publish(hello_str)
        rate.sleep()
if __name__ == '__main__':
    try:
        talker()
    except rospy.ROSInterruptException:
        pass
(rospy API接口:http://docs.ros.org/api/rospy/html/)
roscore (另一终端)
rosrun beginner_tutorials talker.py (第一个终端)
talker.py输出[INFO] [1500369494.774872]: hello world 1500369494.77
rostopic echo /chatter (查看主题)
编写订阅器
roscd beginner_tutorials 
cd scripts
touch listener.py
chmod +x listener.py
nano  listener.py
在listener.py输入:
#!/usr/bin/env python
import rospy
from std_msgs.msg import String
def callback(data):
    rospy.loginfo(rospy.get_caller_id() + 'I heard %s', data.data)
def listener():
    # In ROS, nodes are uniquely named. If two nodes with the same name are launched, the previous one is kicked off.
    # anonymous=True flag means that rospy will choose a unique name for our 'listener' node 
    # so that multiple listeners can run simultaneously.
    rospy.init_node('listener', anonymous=True)
    rospy.Subscriber('chatter', String, callback)
    # spin() simply keeps python from exiting until this node is stopped
    rospy.spin()
if __name__ == '__main__':
    listener()
cd ~/catkin_ws
catkin_make
在有talker.py运行时,listener.py输出[INFO] [1500369494.778061]: /listener_22987_1500369491424I heard hello world 1500369494.77
暂时不明白使用方法rostopic pub -r 10 /chatter std_msgs/String “test" (也可以使用命令测试listener.py)
rqt_console (可视化窗口查看日志输出)
rqt_graph (可视化查看节点调用关系)
制作launch文件
roscd beginner_tutorials
mkdir -p bringup
cd bringup
touch talker-and-listener.launch
nano talker-and-listener.launch
在talker-and-listener.launch中输入:
<launch>
    <node name="talker" pkg="beginner_tutorials" type="talker.py" />
    <node name="listener" pkg="beginner_tutorials" type="listener.py" />
</launch>
roslaunch beginner_tutorials talker-and-listener.launch (运行launch文件)
输出:
PARAMETERS
 * /rosdistro: kinetic
 * /rosversion: 1.12.7
NODES
    listener (beginner_tutorials/listener.py)
    talker (beginner_tutorials/talker.py)
ROS_MASTER_URI=http://localhost:11311
core service [/rosout] found
process[talker-1]: started with pid [25891]
process[listener-2]: started with pid [25892]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ROS学习笔记-1: 构建工作空间-创建catkin包-编写发布器与订阅器 的相关文章

  • PROFINET 链路简述

    如上为 Profinet 的简易收发链路图 xff0c 其中收发各有四条路径 xff0c 三个中继桥 租用分别如下 xff1a RX 端 xff1a CTRL xff1a 控制管理帧的通道 xff0c 例如 LLDP 的邻居协议相关帧 xf
  • DSP中GPIO位域

    在TMS320F2812中 xff0c 对于程序中寄存器的名称是如何映射到物理地址的 xff0c 这里做一下详细的讲解 主要应用到三个文件 xff1a CMD h DSP28 GLobalVariableDefs c xff0c 其中CMD
  • 使用UART串口下调试CH376芯片

    CH376是文件管理控制芯片 xff0c 用于单片机系统读写U 盘或者SD 卡中的文件 CH376支持USB设备方式和USB主机方式 xff0c 并且内置了USB通讯协议的基本固件 xff0c 内置了处理Mass Storage海量存储设备
  • Ubuntu(arm)22.04配置清华源

    1 xff0c 清华源地址 地址 xff1a https mirror tuna tsinghua edu cn help ubuntu 2 xff0c 获取ubuntu arm 的源 ubuntu arm 要使用清华源中ubuntu po
  • DGUS调试笔记一

    0 串口的通讯配置 xff1a 在机器背面VHC86芯片有两个焊点 xff0c 若焊点短接 xff0c 即屏工作在TTL电平下 xff0c 默认出厂处于分离状态 xff0c 即RS232电平下 直接将DIN与232的TX相连 xff0c D
  • 使用HAL库函数建立STM32F2工程笔记

    一 建立一个新的文件夹 xff0c 新建三个文件夹User Driver Project xff0c 还可以加一个Doc存放工程的相关说明等等 1 将STM32F2xx的库函数 xff08 HAL函数库 xff09 中的Drivers文件夹
  • STM32伺服编码器接口

    在STM32的高级定时器和一般定时器中有Encoder interface mode xff08 编码器接口 xff09 xff0c TI1和TI2分别对应TIM CH1 和TIM CH2 通道 一 计数规则如下 xff1a 表55的是编码
  • STM32下调试CAN通信

    基本流程 xff1a 1 初始化CAN模块 xff1a 启用CAN时钟 配置CAN功能寄存器 xff08 包括位定时 xff0c 分频等等 xff09 配置CAN过滤器 打开中断 2 初始化I O口 启用GPIO时钟 打开CAN对应的GPI
  • JLINK固件修复

    0 开始前准备工具 1 SAM BA v2 12 exe 用于烧写固件 下载地址 xff1a http download csdn net detail hzt12345hf 9457629 新版本的SAM BA xff08 例如sam b
  • Keil4,Keil5下使用STlink II 仿真调试

    1 关闭Keil软件 2 下载以下压缩包STlink II相关文件 xff0c 包含三个文件ST LINKII KEIL dll xff0c StorAcc dll和TOOLS INI 3 将ST LINKII KEIL dll和StorA
  • Centos下PHP5升级PHP7

    首先下载PHP7安装包 xff0c 使用wget http am1 php net distributions php 7 2 0 tar bz2 或者直接访问下载 xff0c 然后ftp到linux服务器解压压缩包 xff0c tar x
  • STM32F1xx及STM32F2系列串口,SPI配置,CAN配置

    平时常用的串口和SPI配置在这里列出来 xff0c 以便不时之需 xff0c 直接拿过来用 同时指出了STM32F1系列和STM32F2系列经常出现的问题 使用的库函数为标准库函数 xff0c 而非HAL库 一 串口的配置 xff1a ST
  • 嵌入式中缓冲区队列的实现

    在串口 xff0c IIC或SPI以及CAN等通信中 xff0c 往往需要一次性发送一帧完整的数据 xff0c 由于硬件发送的速度问题 xff0c 硬件不能及时发送出去 xff0c 就会导致数据丢失等一系列问题 通常采用建立缓冲区解决 队列
  • FreeRTOS中断优先级,临界区的配置(特别重要)

    一 背景 网上有许多关于FreeRTOS中断优先级的配置资料 xff0c 但是在v10 0中个别配置项发生了变化 xff0c 在这篇文章中详细的介绍了整个优先级管理配置方案 ARM芯片的优先级为0 255 不同的芯片厂商所用的优先级不同 x
  • 推荐EI、SCI期刊及投稿建议-备忘(转)

    推荐EI SCI期刊及投稿建议 备忘 EI检索期刊计算机方面SCI和EI期刊 xff08 EI期刊会议注册前推荐 xff09 大会注册前推荐的EI期刊 xff1a 英文投稿的一点经验 转载 再加两封催稿信 英语不好 xff0c 但意思表达到
  • arm linux的入口部分的代码分析笔记

    原文转载自http bbs chinaunix net thread 2039668 1 1 html xff0c 写的不错 xff0c 在这里首先感谢作者 查看带有图片的文章请移步 https blog zh123 top p 61 27
  • 树莓派上使用python实现LCD1602显示当前ip

    树莓派一般运行Linux操作系统后通过远程控制来运行 xff0c 但是往往由于网络原因导致树莓派分配的ip地址被改变 xff0c 致使需要重新连接屏幕后才能查看树莓派的当前ip 最近手头有个LCD1602 xff0c 所以尝试将通过驱动LC
  • FreeRTOS三种数据结构区别(StreamBuffer,MessageBuffer,Queue)

    转载自博客 xff1a https blog zh123 top p 61 308 Queue队列是最基本的数据结构 xff0c 在FreeRTOS v10 0后提供了另外两种高级数据结构为Streambuffer和MessageBuffe
  • openCV学习之错误记录

    本片blog用来记录平时学习过程中遇到的错误 xff0c 以及解决办法 xff1b 错误1 错误提示 xff1a 在using namespace cv 前缺少一个 原因 xff0c 是在引用的头文件中存在一个类等结束后未加 错误2 cv
  • linux小技巧——使用MobaXterm宏进行linux批量命令执行——一看就会

    场景 xff1a 我们经常登录linux跳板机去查看应用的日志 xff0c 但是看日志的时候 xff0c 需要输入很多的命令 xff0c 这些命令实际上 xff0c 每一次输入都是重复的 xff0c 特别是命令条数较多的时候 xff0c 这

随机推荐