《ROS入门21讲》---古月居 学习详细记录

 21讲代码和课件百度网盘链接:https://pan.baidu.com/s/1dTs-IcGECovdRD19otQABQ 
提取码:0000

一、ROS是什么?

ROS是机器人操作系统(Robot Operating System)的英文缩写

一个好比喻:机器人上跑ROS=PC上跑windows=手机上跑安卓

 二、ROS安装及对应版本

2.1鱼香ROS一键安装    其中还可以选择一键安装其它一些应用,推荐

wget http://fishros.com/install -O fishros && bash fishros

2.2  ubuntu16.04对应ros-kinetic;

      ubuntu18.04对应ros-melodic;

      ubuntu20.04对应ros-noetic

2.3 rosdep无法更新,解决:一行代码安装rosdepc

curl http://fishros.com/tools/install/rosdepc | bash

2.4 小海龟测试

roscore                               //启动
rosrun  turtlesim turtlesim_node      //仿真
rosrun  turtlesim turtle_teleop_key   //键盘控制 

三、ros核心概念

3.1   节点-执行单元(各 .cpp文件)

3.2   话题(topic)---异步通信机制

(1)节点间用来传输数据的重要总线

(2)使用发布/订阅模型,数据由发布者传到订阅者,同一个话题的订阅者或发布者可以不唯一。

3.3   消息(message)--话题数据

(1)用编程语言无关的.msg文件定义,编译过程生成对应的代码文件

3.3  服务(service)---同步通信机制

(1)使用客户端/服务端模型,客户端发送请求数据,服务完成处理后返回数据;

(2)使用编程语言无关的.srv文件定义请求和应答数据结构,编译过程生成对应的代码文件;

 四、ROS常用命令行指令

rostopic     查看话题相关  

rosservice  服务相关

rosnode    节点相关

rosparam  参数相关

例如: 输入rosnode   查看后面可接命令及其对应说明,其它命令类似

再例如:输入topic 接pub  -r 10   表示给话题发布一个每秒10次的频率指令

 再一个话题记录和复现指令:

rosbag record -a -O cmd-recode     //开始记录路径,按ctrl+c结束,文件在当前路径下
rosbag play  cmd_record.bag        //重新打开小乌龟,按包的路径行驶

 五、创建工作空间和功能包

5.1     src:代码空间(装各个功能包     build:编译空间      devel:开发空间     install:安装空间

mkdir -p ~/catkin_ws/src     //创建ros工作空间,我叫它大包
cd ~/catkin_ws/src      //src下每个文件夹代表一个package,每个pakage下的.cpp文件是一个ROS节点
catkin_init_workspace        //初始化src空间

cd ~/catkin_ws/              //进入大包编译,每一次改动工作空间内的内容都要重新进大包编译
catkin_make

source devel/setup.bash      //编译后更新

5.2     创建功能包:进入大包的src下创建,test_pkg代表功能包,这三个std_msgs rospy roscpp等等就是运行test_pkg包所需依赖。出现CM和package表示创建成功。然后回到大包:编译---->更新

catkin_creat_pkg test_pkg std_msgs rospy roscpp

 六、发布者publisher的编程实现---发布velocity_publisher.cpp(将其放入对应功能包的src下)

6.1进入src下创建learning_topic功能包,上面的test_pkg也就是指这种包,后面类似

catkin_creat_pkg  learning_topic roscpp rospy std_msgs geometry_msgs turtlesim

6.2在功能包下的CMakeLists.txt文件中加如相应cmake语句

add_executable(velocity_publisher  src/velocity_publisher.cpp)  //连接可执行程序
target_link_libraries(velocity_publisher  ${catkin_LIBRARIES})  //将此程序连接库

每次作修改都需要回大包编译更新。下面全默认该操作,就不再写了。

6.3 操作及结果如下

roscore                                   //启动
rosrun turtlesim turtlesim_node           //仿真
rosrun learning_topic velocity_publisher  //启动velocity_publisher节点

 七、订阅者Subscriber的编程实现--订阅pose_subscriber.cpp

7.1还是在learning_topic功能包下

7.2在功能包下的CMakeLists.txt文件中加如相应cmake语句

add_executable(pose_subscriber  src/pose_subscriber.cpp  )
target_link_libraries(pose_subscriber  ${catkin_LIBRARIES})

7.3和上面一样,第三步换成启动pose_subscriber节点,结果如下

 八、话题消息的自定义和使用

8.1自定义Person.msg文件,该文件在learning_topic下的msg里

 8.2在packaga.xml文件中加入自定义包依赖

<build_export_depend>message_generation</build_export_depend>
<exec_depend>message_runtime</exec_depend>

 8.3   CMakeLists.txt文件中加如相应cmake语句

find_package(.......message_generation)
add_message_files( FILES  Person.msg)         //连接依赖
generate_messages(  DEPENDENCIES std_msgs)
catkin_package(CATKIN_DEPENDS geometry_msgs roscpp rospy std_msgs turtlesim message_runtime)

add_executable(person_publisher  src/person_publisher.cpp  )       //连接2个节点
target_link_libraries(person_publisher  ${catkin_LIBRARIES})
add_dependencies(person_publisher ${PROJECT_NAME}_generate_messages_cpp)  

add_executable(person_subscriber  src/person_subscriber.cpp )
target_link_libraries(person_subscriber  ${catkin_LIBRARIES})
add_dependencies(person_subscriber ${PROJECT_NAME}_generate_messages_cpp)

8.4  操作及结果如下

 九、客户端client的编程实现----turtle_spawn.cpp

9.1  进入大包的src下---创建learning_service功能包

catkin_create_pkg learning_service roscpp rospy std_msgs geometry_msgs turtlesim

9.2  CMakeLists.txt文件中加如相应cmake语句

add_executable(turtle_spawn  src/turtle_spawn.cpp)
target_link_libraries(turtle_spawn  ${catkin_LIBRARIES})

9.3  操作及结果如下

 十、服务端server的编程实现---turtle_command_server.cpp

10.1 还是在learning_service功能包下

10.2  CMakeLists.txt文件中加如相应cmake语句

add_executable(turtle_command_server  src/turtle_command_server.cpp)
target_link_libraries(turtle_command_server  ${catkin_LIBRARIES})

10.3 操作及结果如下

 十一、服务数据的自定义与使用--person_client.cpp和person_server.cpp

11.1 还是在learning_service功能包下,创建srv文件夹,再在其下创建Person.srv文件

 11.2在package.xml中添加功能包依赖 

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

11.3  CMakeLists.txt文件中加如相应cmake语句

find_package(.......message_generation)
add_message_files( FILES  Person.srv)                     //连接依赖
generate_messages(  DEPENDENCIES std_msgs)
catkin_package(CATKIN_DEPENDS geometry_msgs roscpp rospy std_msgs turtlesim message_runtime)

add_executable(person_server  src/person_server.cpp)      //连接两个节点
target_link_libraries(person_server  ${catkin_LIBRARIES})
add_dependencies(person_server ${PROJECT_NAME}_gencpp)

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

 11.4 操作及结果如下 十二、参数的使用与编程方法--parameter_config.cpp

12.1 rosparam---各后接命令

 12.2  例如操作如下,示范用dump命令 将全部参数转成当前目录的文件

12.3 创建learning_parameter功能包

catkin_creat_pkg learning_parameter roscpp rospy std_srvs

12.4 CMakeLists.txt文件中加如相应cmake语句

add_executable(parameter_config  src/parameter_config.cpp)
target_link_libraries(parameter_config   ${catkin_LIBRARIES})

12.5  操作乌龟背景板变白色

十三、ROS中的坐标系管理系统

 13.1先安装tf包

sudo apt install ros-melodic-turtle-tf   //melodic换成自己对应ros版本 

13.2 操作及结果如下

 13.3 在上述操作基础上再输入  5 6 指令,然后操作7-fixed reame修改为world坐标系,再8-添加tf

 十四、tf坐标系广播与监听的编程实现---turtle_tf_broadcaster.cpp和turtle_tf_listener.cpp

14.1创建learning_tf功能包

catkin_creat_pkg learning_tf roscpp rospy tf turtlesim

14.2配置相应CMakeLists.txt文件

add_executable(turtle_tf_broadcaster src/turtle_tf_broadcaster.cpp)
target_link_libraries(turtle_tf_broadcaster ${catkin_LIBRARIES})

add_executable(turtle_tf_listener src/turtle_tf_listener.cpp)
target_link_libraries(turtle_tf_listener ${catkin_LIBRARIES})

14.3操作及结果如下

 十五、launch启动文件的使用方法

15.1 launch文件:通过xml文件实现多节点的配置和启动

15.2launch文件语法: pkg是功能包名,type是节点(.cpp)文件名,name是这个节点在运行中的起名

 15.3 启动simple.launch     可以看到同时启动了里面的两个节点

 15.4 启动turtlesim_parameter_config.launch节点,可以看到参数加在节点下面,就带节点当前缀

 15.5 同理turtlesim_remap.launch节点,可以看到remap是将参数名字改为了后面的,include则是可以包含其它的launch文件,类似于C语言中的头文件包含

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值