##本人使用的是双系统,noetic版本,学习ROS初衷是学习控制机械臂,具体下载方法见B站,观看的教程是古月居早年的教学视频,和ROS_wiki:ROS/Tutorials - ROS Wiki
##下一篇文章有具体的实例,但是所用方法与本篇不尽相同
1.创建工作空间
$mkdir -p ~/<workspace_name>/src
$cd ~/<workspace_name>/src
$catkin_init_workspace
$cd ~/<workspace_name>/
$catkin_make
$source devel/setup.bash
$echo $ROS_PACKAGE_PATH
2.创建功能包
$cd ~/<workspace_name>/src
$catkin_create_pkg <pkg_name> [depend1] [depend2]
//常用的依赖有:std_msgs rospy roscpp
创建完还需编译功能包
3.工作空间的覆盖
$gedit ~/.bashrc
找到类似的语句,将你的新的路径添加即可
4.ROS通信编程
分为话题编程,服务编程和动作编程
1.话题编程
如何实现一个发布者:
·初始化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
如何自定义话题消息
2 服务编程
如何实现一个服务器:
·初始化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
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熟悉)