200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 《ROS入门21讲》---古月居 学习详细记录

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

时间:2022-09-23 09:01:43

相关推荐

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

21讲代码和课件百度网盘链接:/s/1dTs-IcGECovdRD19otQABQ

提取码:0000

一、ROS是什么?

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

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

二、ROS安装及对应版本

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

wget /install -O fishros && bash fishros

2.2 ubuntu16.04对应ros-kinetic;

ubuntu18.04对应ros-melodic;

ubuntu20.04对应ros-noetic

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

curl /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_makesource 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.2CMakeLists.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.4CMakeLists.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语言中的头文件包含

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。