Linux-ROS学习之旅(一)

##本人使用的是双系统,noetic版本,学习ROS初衷是学习控制机械臂,具体下载方法见B站,观看的教程是古月居早年的教学视频,和ROS_wiki:ROS/Tutorials - ROS Wiki

 ##下一篇文章有具体的实例,但是所用方法与本篇不尽相同

1.创建工作空间

$mkdir -p ~//src
$cd ~//src
$catkin_init_workspace
$cd ~//
$catkin_make
$source devel/setup.bash
$echo $ROS_PACKAGE_PATH

Linux-ROS学习之旅(一)_第1张图片

 2.创建功能包

$cd ~//src
$catkin_create_pkg  [depend1] [depend2]
//常用的依赖有:std_msgs rospy roscpp 

创建完还需编译功能包

Linux-ROS学习之旅(一)_第2张图片

3.工作空间的覆盖

$gedit ~/.bashrc

找到类似的语句,将你的新的路径添加即可

4.ROS通信编程

分为话题编程,服务编程和动作编程

1.话题编程

Linux-ROS学习之旅(一)_第3张图片

如何实现一个发布者:

·初始化ROS

·向ROS Master 注册节点信息,包括发布的主题名,和话题中的消息类型

·按照一定频率循环发布信息

如何实现一个订阅者:

·初始化ROS节点

·订阅需要的话题

·循环等待话题消息,接收到消息后进入回调函数

·在回调函数中完成消息处理

如何编译代码:

·设置需要编译的代码和生成的可执行文件

·设置链接库

·设置依赖

add_executable(talker src/talker.cpp)
target_link_libraries(talker ${catkin_LIBRARIES})
# add_dependencies(talker ${PROJECT_NAME}_generate_messages_cpp)
add_executable(listener src/listener.cpp)
target_link_libraries(listener ${catkin_LIBRARIES})
# add_dependencies(talker ${PROJECT_NAME}_generate_messages_cpp)

CMakeList.txt

Linux-ROS学习之旅(一)_第4张图片

如何自定义话题消息

Linux-ROS学习之旅(一)_第5张图片

2 服务编程

Linux-ROS学习之旅(一)_第6张图片

如何实现一个服务器:

·初始化ROS节点

·创建Server实例

·循环等待服务请求,进入回调函数

·在回调函数中完成服务功能的处理,并反馈应答数据

如何实现一个客户端:

·初始化ROS节点

·创建一个Client实例

·发布服务请求数据

·等待Server处理后的应答结果

如何编译代码:

·设置需要编译的代码和生成的可执行文件

·设置链接库

·设置依赖

add_executable(server src/server.cpp)
target_link_libraries(server ${catkin_LIBRARIES})
add_dependencies(server ${PROJECT_NAME}_gencpp)
add_executable(client src/client.cpp)
target_link_libraries(client ${catkin_LIBRARIES})
add_dependencies(client ${PROJECT_NAME}_gencpp)

CMakeList,txt

Linux-ROS学习之旅(一)_第7张图片

Linux-ROS学习之旅(一)_第8张图片

3.动作编程

什么是动作(action)?

·一种问答通信机制

·带有连续反馈

·可以在任务过程中止运行

·基于ROS的消息机制实现

Action的接口

·goal:发布任务目标

·cancel:请求取消任务

·status:通知客户端当前的状态

·feedback:周期反馈任务运行的监控数据

·result:向客户端发送任务的执行结果,只发布一次

如何实现一个动作服务器:

·初始化ROS节点

·创建动作服务器实例

·启动服务器,等待动作请求

·在回调函数中完成动作服务功能的处理,并反馈进度信息

·动作完成,发送结束信息

如何实现一个动作客户端:

 ·初始化ROS节点

·创建动作客户端实例

·连接动作服务端

·发送动作目标

·根据不同类型的服务端反馈处理回调函数

如何编译代码:

·设置需要编译的代码和生成的可执行文件

·设置链接库

·设置依赖

add_executable(DoDishes_client src/DoDishes_client.cpp)
target_link_libraries( DoDishes_client ${catkin_LIBRARIES})
add_dependencies(DoDishes_client ${${PROJECT_NAME}_EXPORTED_TARGETS})
add_executable(DoDishes_server src/DoDishes_server.cpp)
target_link_libraries( DoDishes_server ${catkin_LIBRARIES})
add_dependencies(DoDishes_server ${${PROJECT_NAME}_EXPORTED_TARGETS})

小结:

这篇文章只是一个很小的入门,还没有介绍ROS的关键组件:Lauch文件,TF坐标变换,Qt工具箱,Rviz,Gazebo;也没介绍ROS的常用命令(很实用,建议去wiki熟悉)

你可能感兴趣的:(ROS,学习,机器人,自动驾驶)