初学ROS教程笔记

参考链接:

Introduction · Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程

一、准备工作

首次使用:配置环境变量,方便在任意 终端中使用 ROS。

echo "source /opt/ros/你的ros版本/setup.bash" >> ~/.bashrc
source ~/.bashrc

1.创建工作空间并初始化

mkdir -p 自定义空间名称/src
cd 自定义空间名称
catkin_make

2.进入 src 创建 ros 包并添加依赖

cd src
catkin_create_pkg 自定义ROS包名 roscpp rospy std_msgs

3.进入 ros 包的 src 目录编辑源文件 .cpp

#include "ros/ros.h"
int main(int argc, char *argv[])
{
    setlocale(LC_ALL,"");//防止中文乱码
    ros::init(argc,argv,"起个节点名");//节点初始化
    ros::NodeHandle nh;//初始化句柄
    ros::Subscriber sub = nh.subscribe<消息类型>("话题",1000,回调函数);
    ros::spin();//用回调函数的时,官方建议使用
    return 0;
}

 配置cmake文件:

add_executable(步骤3的源文件名 src/步骤3的源文件名.cpp)
target_link_libraries(步骤3的源文件名  ${catkin_LIBRARIES})

4.执行

开一个新的终端,启动命令行1:

roscore

再启动命令行2:

cd 工作空间
source ./devel/setup.bash
catkin_make 
rosrun ros功能包名 C++源文件名

二、话题通信自定义话题消息:

1.定义msg文件

在自定义ros包下新建 msg (文件夹)目录,添加文件 ****.msg

2.编辑配置文件

package.xml中添加编译依赖与执行依赖

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

CMakeLists.txt编辑 msg 相关配置

find_package()指当前自定义功能包依赖的包

catkin_package()指依赖包所依赖的功能包

find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
  message_generation
)
# 需要加入 message_generation,必须有 std_msgs

## 配置 msg 源文件
add_message_files(
  FILES
  Person.msg
)

# 生成消息时依赖于 std_msgs
generate_messages(
  DEPENDENCIES
  std_msgs
)

#执行时依赖
catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES demo02_talker_listener
  CATKIN_DEPENDS roscpp rospy std_msgs message_runtime
#  DEPENDS system_lib
)

4.VScode配置 ctrl+shift+P

{
  "configurations": [
    {
      "browse": {
        "databaseFilename": "${default}",
        "limitSymbolsToIncludedHeaders": false
      },
      "includePath": [
        "/opt/ros/noetic/include/**",//ros代码提示
        "/home/fengwenyue/rostest/src/mypkg/include/**",//
        "/home/fengwenyue/rostest/devel/include/**",//配置头文件的路径
        "/usr/include/**"
      ],
      "name": "ROS",
      "intelliSenseMode": "gcc-x64",
      "compilerPath": "/usr/bin/gcc",
      "cStandard": "gnu11",
      "cppStandard": "c++17"//代码提示
    }
  ],
  "version": 4
}

5.cpp文件中引入自定义msg

#include "自定义包名/****.msg"

6.编写c++文件

7.根据c++文件配置cmake文件(在一的基础上添加这一句)

add_dependencies()用以设置所依赖的消息相关的中间文件。

add_dependencies(c++文件名 ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})

三、服务通信自定义话题消息:

1.定义srv文件

服务通信中,数据分成两部分,请求与响应,在 srv 文件中请求和响应使用---分割,具体实现如下:功能包下新建 srv 目录,添加 xxx.srv 文件

2.编辑配置文件 package.xml中添加编译依赖与执行依赖

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

CMakeLists.txt编辑 srv 相关配置

find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
  message_generation
)
# 需要加入 message_generation,必须有 std_msgs
add_service_files(
  FILES
  AddInts.srv
)
generate_messages(
  DEPENDENCIES
  std_msgs
)

3.编译 编译后的中间文件查看: C++ 需要调用的中间文件(.../工作空间/devel/include/包名/xxx.h)

4.vscode配置:配置c_cpp_properies.json 文件

"includePath": [
                "/opt/ros/noetic/include/**",
                "/usr/include/**",
                "/xxx/yyy工作空间/devel/include/**" //配置 head 文件的路径 
            ],

5.编写服务端客户端c++代码

6.c++文件 配置 CMakeLists.txt(同二)

7.编译(同一)

四、常用命令

1.话题通信

rostopic bw     显示主题使用的带宽
rostopic delay  显示带有 header 的主题延迟
rostopic echo   打印消息到屏幕
rostopic find   根据类型查找主题
rostopic hz     显示主题的发布频率
rostopic info   显示主题相关信息
rostopic list   显示所有活动状态下的主题
rostopic pub    将数据发布到主题
rostopic type   打印主题类型
rosmsg show    显示消息描述
rosmsg info    显示消息信息
rosmsg list    列出所有消息
rosmsg md5    显示 md5 加密后的消息
rosmsg package    显示某个功能包下的所有消息
rosmsg packages    列出包含消息的功能包

常用笔记:

rostopic list  (查看话题)

rostopic info /话题 (可查看消息类型Type)

rosmsg infor 消息 (查看消息数据格式)

2.服务通信

rosservice args 打印服务参数
rosservice call    使用提供的参数调用服务
rosservice find    按照服务类型查找服务
rosservice info    打印有关服务的信息
rosservice list    列出所有活动的服务
rosservice type    打印服务类型
rosservice uri    打印服务的 ROSRPC uri
rossrv show    显示服务消息详情
rossrv info    显示服务消息相关信息
rossrv list    列出所有服务信息
rossrv md5    显示 md5 加密后的服务消息
rossrv package    显示某个包下所有服务消息
rossrv packages    显示包含服务消息的所有包

 常用笔记:

rosservice list   (查看话题)

rosservice info /话题 (可查看消息类型Type)

rossrv infor 消息 (查看消息数据格式)

3.参数服务(一般在代码里设置参数和获取参数,该命令常用于测试)

rosparam set    设置参数
rosparam get    获取参数
rosparam load    从外部文件加载参数
rosparam dump    将参数写出到外部文件
rosparam delete    删除参数
rosparam list    列出所有参数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值