【ROS】Ros官方文档学习笔记

Ros学习笔记

官方学习网址https://wiki.ros.org/ROS/Tutorials

如何阅读ROSwiki的网页https://wiki.ros.org/ROS/Tutorials/NavigatingTheWiki

环境搭建

printenv | grep ROS # 查看环境中ros有关的变量 
source /opt/ros/melodic/setup.bash # 利用source bash建立环境,需要在打开的每个新 shell 上运行此命令才能访问 ROS 命令,除非将此行添加到 .bashrc或者zshrc。
echo $ROS_PACKAGE_PATH# 应得到/home/youruser/catkin_ws/src:/opt/ros/kinetic/share

工作区搭建

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make # 在“src”文件夹中创建一个 CMakeLists.txt 链接。当前目录应该有一个“build构建”和“devel开发”文件夹。在“devel”文件夹在有几个 setup.*sh 
source devel/setup.bash # source devel里的bash文件可以覆盖当前的黄静。

创建包

包(package):包是ROS代码的软件组织单元。每个包都可以包含库、可执行文件、脚本或其他工件。

清单 (package.xml):清单是对包的描述。它用于定义包之间的依赖关系并捕获有关包的元信息,如版本、维护者、许可证等…

ros的文件系统管理工具

rospack

rospack find [package_name] #find命令返回package地址
rospack depends1 [package_name]  #查看package的一级依赖包,在xml里也会显示
rospack depends [package_name] #查看package的所有级依赖包,在xml里不会显示

roscd

roscd [package_name]/subdir # 跳转到package所在的地址或者下面的subdir
echo $ROS_PACKAGE_PATH # 所有的package都在这里,找不到就没有
roscd log #ROS 存储日志文件的文件夹。如果还没有运行任何 ROS 程序,这将roscd log指出它尚不存在
roscd roscpp_tut   >> 摁一下TAB >>     roscd roscpp_tutorials/#Tab Completion包名补全

rosls

rosls [package_name]/subdir#返回package地址下目录

ros包的建立和安装

ros包的文件架构

workspace_folder/        #WORKSPACE
  src/                   #SOURCE SPACE。package在src里
    CMakeLists.txt       #'Toplevel' CMake file, provided by catkin,src里又一个cmake
    package_1/
      CMakeLists.txt     #CMakeLists.txt file for package_1
      package.xml        #Package manifest for package_1 一个package必须包括xml和cmakelists

ros包的创建方法

cd ~/catkin_ws/src && catkin_create_pkg beginner_tutorials std_msgs rospy roscpp #在src目录中创建包,包括xml和cmake文件
catkin_create_pkg <package_name> [depend1] [depend2] [depend3]#注意从属关系,从属包在xml里会显示<build_depend>std_msgs</build_depend>
cd ~/catkin_ws && catkin_make #返回上一级目录make/build一下
source ~/catkin_ws/devel/setup.bash # 将工作区添加ROS环境中才能使用
 

package.xml的格式

   1 <?xml version="1.0"?>
   2 <package format="2">#开头
   3 </package>#结尾
1. <description>The beginner_tutorials package</description># 任何介绍
2.<!-- <maintainer email="jane.doe@example.com">Jane Doe</maintainer> --> #注释格式 
  <maintainer email="user@todo.todo">user</maintainer> #维护者的名字 
3. <license>TODO</license>#一个许可证并在此处填写。一些常见的开源许可证是 BSD、MIT、Boost 软件许可证、GPLv2、GPLv3、LGPLv2.1 和 LGPLv3
4. <buildtool_depend>catkin</buildtool_depend>
   <build_depend>roscpp</build_depend>
   <build_depend>rospy</build_depend>
   <build_depend>std_msgs</build_depend>#依赖
5. <exec_depend>roscpp</exec_depend>
   <exec_depend>rospy</exec_depend>
   <exec_depend>std_msgs</exec_depend>#为了所有指定的依赖项在构建和运行时都可用,因此为每个依赖项添加一个 exec_depend标记

含package的工作区的build

# In a catkin workspace
catkin_make #将构建在 src 文件夹中找到的任何 catkin 项目
catkin_make --source my_src #如果src不在底下,可以添加--source
catkin_make install  # (optionally)

roscore

roscore 是使用 ROS 时应该运行的第一件事。

roscore

rosnode节点

rosnode list#展示所有node
rosnode info rosout#展示/rosout的信息
rosrun [package_name] [node_name]#运行包内的节点
rosrun [package_name] [node_name] __name:=my_turtle#运行包内的节点并改变node的名字
rosnode ping my_turtle#查看node运行信息

Topic

roscore #一个终端开core
rosrun turtlesim turtlesim_node#第二个终端开乌龟节点
rosrun turtlesim turtle_teleop_key#第三个终端开控制节点,两个节点通过topic通讯

rosrun rqt_graph rqt_graph #利用rqtgraph显示node之间的通讯 

rostopic -h#获得如下帮助命令
rostopic bw     #display bandwidth used by topic
rostopic echo [topic_name]   #查看topic内的信息,比如rostopic echo /turtle1/cmd_ve
rostopic hz [topic]    #报告发布数据的速率。  
rostopic list   #返回当前订阅和发布的所有主题的列表。
	-v#详细选项
	-p#publishers
  	-s#subscribers
rostopic pub [topic] [msg_type] [args]   #将数据发布到当前广告的主题。
	rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'# - 仅发布一条消息然后退出
																							   #--以下参数都不是选项
rostopic type [topic]  #返回正在发布的任何主题的消息类型。
rosmsg show [topic]#rosmsg 查看消息的详细信息

Services

服务是节点可以相互通信的另一种方式。服务允许节点发送请求并接收响应。

rosservice list         #print information about active services
rosservice call [service] [args]   #call the service with the provided args
rosservice type [service]        #print service type
	rosservice type /spawn | rossrv show #查看服务生成的信息来看看服务有参数的情况
rosservice find         #find services by service type
rosservice uri          #print service ROSRPC uri

rosparam

rosparam 允许您在 ROS 参数服务器上存储和操作数据。参数服务器可以存储整数、浮点数、布尔值、字典和列表。 rosparam 使用 YAML 标记语言作为语法

rosparam set[param_name] value            #set parameter
	rosservice call /clear#改变了参数值,必须调用清除服务以使参数更改生效
rosparam get [param_name]           #get parameter
	rosparam get / #展示整个 Parameter Server 的内容。
rosparam load [file_name] [namespace]          #将所有参数写出到文件 params.yaml
rosparam dump [file_name] [namespace]          #将所有参数写入到文件 params.yaml
rosparam delete         #delete parameter
rosparam list           #list parameter names

rqt_console

rqt_console 和 rqt_logger_level 进行调试

#信息级别
Fatal#致命
Error#错误
Warn #警告
Info #信息 
Debug#调试
rosrun rqt_console rqt_console
rosrun rqt_logger_level rqt_logger_level

roslaunch

roslaunch 一次启动多个节点, 按照启动文件中的定义启动节点。

#在package目录下创建launch文件夹
roslaunch [package] [filename.launch]
	roslaunch beginner_tutorials turtlemimic.launch
<launch>

	  <group ns="turtlesim1">
       <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
   	  </group>
    
      <group ns="turtlesim2">
        <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
      </group>
   
      <node pkg="turtlesim" name="mimic" type="mimic">
        <remap from="input" to="turtlesim1/turtle1"/>
        <remap from="output" to="turtlesim2/turtle1"/>
      </node>
   
</launch>

rosed

rosed [package_name] [filename]
	rosed roscpp Logger.msg #编辑roscpp包内的logger.msg文件
~/.bashrc#中 export EDITOR='nano -w'#设置编辑器

msg

msg 文件是描述 ROS 消息字段的简单文本文件。它们用于为不同语言的消息生成源代码

在pkg下的msg文件夹中,用.msg来编辑文件。.msg的名字是msg的名字

传输类型:

int8, int16, int32, int64 (plus uint*) float32, float64

string time, duration

variable-length array[]

fixed-length array[C]

实例
$ roscd beginner_tutorials
$ mkdir msg
$ echo "string first_name string last_name uint8 age uint32 score" > msg/Num.msg

在xml文件里也要编辑,将msg文件编写进去

  <build_depend>message_generation</build_depend>
  <exec_depend>message_runtime</exec_depend>

创建msg文件需要在cmakelists里创建依赖message_generation,使用msg需要依赖message_runtime

# Do not just add this to your CMakeLists.txt, modify the existing text to add message_generation before the closing parenthesis
find_package(catkin REQUIRED COMPONENTS
   roscpp
   rospy
   std_msgs
   message_generation
)

同时在cmakelists里还需要添加新建的msg文件,使用官方的命令

add_message_files(
  FILES
  Num.msg
)
现在我们必须确保调用了 generate_messages() 函数。
generate_messages(
  DEPENDENCIES
  std_msgs
)

rosmsg

$ rosmsg show [message type]
$ rosmsg show beginner_tutorials/Num#得到int64 num

srv

一个srv文件描述一个服务。它由两部分组成:请求和响应,用“—”线隔开。

实例
$ roscd beginner_tutorials
$ mkdir srv

不能手动写srv,一般是复制roscp一个,在这个基础上改动

$ scp [package_name] [file_to_copy_path] [copy_path]
$ roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv

  <build_depend>message_generation</build_depend>
  <exec_depend>message_runtime</exec_depend

创建msg文件需要在cmakelists里创建依赖message_generation,使用msg需要依赖message_runtime

# Do not just add this line to your CMakeLists.txt, modify the existing line
find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
  message_generation
)
add_service_files(
  FILES
  AddTwoInts.srv
)

rossrv

 $ rossrv show <service type>
 $ rossrv show beginner_tutorials/AddTwoInts#
 #也可以不需要pkg的名字,一样可以找到所有的srv
 $ rossrv show AddTwoInts
[beginner_tutorials/AddTwoInts]:
int64 a
int64 b
---
int64 sum

[rospy_tutorials/AddTwoInts]:
int64 a
int64 b
---
int64 sum

Header

ROS中还有一种特殊的类型:Header,header中包含了ROS中常用的时间戳和坐标系信息。您会经常看到 msg 文件的第一行有 Header 标头。

创建和测试Publisher and Subscriber

https://wiki.ros.org/ROS/Tutorials/WritingPublisherSubscriber%28c%2B%2B%29

https://wiki.ros.org/ROS/Tutorials/ExaminingPublisherSubscriber

创建和测试Service and Client (C++)

https://wiki.ros.org/ROS/Tutorials/WritingServiceClient%28c%2B%2B%29

https://wiki.ros.org/ROS/Tutorials/ExaminingServiceClient

bag file里的message

https://wiki.ros.org/ROS/Tutorials/reading%20msgs%20from%20a%20bag%20file

ROSwtf

https://wiki.ros.org/ROS/Tutorials/Getting%20started%20with%20roswtf

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值