ros学习笔记一(古月居21讲)

一.自己写代码运行

步骤:
1. 创建工作空间
mkdir catkin_ws
或者mkdir -p ~/catkin_ws/src(创建了文件夹catkin_ws和src)
cd catkin_ws
mkdir src
cd src
catkin_init_workspace:初始化文件夹改变属性使其变成一个工作空间
(直接右键新建文件夹然后在src文件夹下打开终端输入这句话也行)
cd …
cd catkin_ws
catkin_make 编译产生deve(开发空间放置开发过程中的可执行文件和库)l和build(编译过程中的编译文件二进制文件)
catkin_make install 产生install(开发后的可执行文件)文件夹
2. 创建功能包(在src中)
在src中创建一个pkg:
(1)catkin_create_pkg 包名+依赖(roscpp rospy std_msgs(消息)右键新建也行但是创建功能包的依赖没有所以还得catkin_create_pkg)
(2)配置环境source ~/catkin_ws/devel/setup.bash(编译之后系统才知道去哪里找这pkg) 这句话只适用于当前终端,想要适应所有终端需要把这句话加到.bashrc文件中 错误2环境变量要设置,不能只适用于当前窗口的要用全局的: echo “source ~/catkin_ws/devel/setup.bash”>> ~/.bashrc也可以打开主目录下的.bashrc隐藏文件(ctrl+h)把这句话加进去
ros学习笔记一(古月居21讲)_第1张图片
3. 创建自定义话题或者服务
服务数据的定义,根据自己需求。发布订阅是一直发不管接不接收,请求应答是有请求时才发布,而且有应答。

string name
uint8 ageuint8 
sex uint8
 unknown =0
 uint8 male =1
 uint8 female =2
  ---
 string result
 

三个短横线以上为request以下为respons
(1) 在功能包中创建msg或者srv文件夹,创建.msg文件数据接口定义
错误:注意名称的大小写否则编译时找不到,大小写是不同的文件
完成数据接口定义创建文件touch person.msg或者gedit person.msg
(2)定义规则:
1.在xml中添加功能包的依赖
message_generation 编译依赖:动态产生message的功能包message_runtime 运行依赖
ros学习笔记一(古月居21讲)_第2张图片
2.在cmakelist.txt中添加编译选项
设置需要编译的代码和生成的可执行文件
设置链接库
添加依赖项与自定义的消息连接时必须添加
(1)刚刚添加了运行依赖的功能包,在findpackage这里也要添加
(2)把.msg文件编译成运行时依赖的包
(3)添加创建运行的依赖

1.add_executable(person_publisher src/person_publisher.cpp)
2.target_link_libraries(person_publisher ${catkin_LIBRARIES}) 3.add_dependencies(person_publisher ${PROJECT_NAME}_generate_messages_cpp) 1.add_executable(person_subscriber src/person_subscriber.cpp)
2.target_link_libraries(person_subscriber ${catkin_LIBRARIES}) 3.add_dependencies(person_subscriber ${PROJECT_NAME}_generate_messages_cpp)
ros学习笔记一(古月居21讲)_第3张图片
ros学习笔记一(古月居21讲)_第4张图片
ros学习笔记一(古月居21讲)_第5张图片
4.回到工作空间编译
catkin_make
生成头文件
位置在catkin_ws/devel/include/功能包名
ros学习笔记一(古月居21讲)_第6张图片
5. 在功能包的src中创建编写代码
.cpp或者在文件夹scripts中创建.py (错误1.py的属性里面权限一定要为可执行)
ros学习笔记一(古月居21讲)_第7张图片
创建方法gedit +文件名例如gedit velocity_publisher.cpp,或者用touch +文件名,或者右键新建空白文档也行。)

6. 配置cmakelist.txt的编译规则learning_topic的
在build编译那一块的底部添加
(1)add_executable(person_publishersrc/person_publisher.cpp) #(person_publisher为代码的名字)-----把cpp编译成可执行文件,位置在devel/lib之中
(2)target_link_libraries(person_publisher ${catkin_LIBRARIES}) #把可执行文件与ros做链接
1.add_executable(person_subscriber src/person_subscriber.cpp)
2. target_link_libraries(person_subscriber ${catkin_LIBRARIES})
ros学习笔记一(古月居21讲)_第8张图片
7.回到工作空间catkin_make
设置环境变量echo “source ~/catkin_ws/devel/setup.bash”>> ~/.bashrc
生成可执行文件位置在catkin_ws/devel/lib/功能包名
ros学习笔记一(古月居21讲)_第9张图片
8.运行代码rosrun 功能包名+节点名(.py可直接执行)rosrun learning_topic velocity_publisher这是c++的运行c++一定要配置编译规则才可以(生成的文件在devel/lib/自己的功能包)rosrun learning_topic velocity_publisher.py 这是.py的运行(创建时一定要保证python的文件属性中权限为可执行,

二.命令行的使用

1、
rosnode
rosnode list:显示节点信息
rosnode info +节点名:显示具体信息
rostopic list 显示话题列表
rostopic pub+话题名(-r 10 表示循环频率一秒十次,加在pub后面)
rosparam list 参数列表
rosparam get +参数名 显示参数值
rosparam set +参数名+要更改的值 更改某个参数的值
rosparam dump +自己想保存的文件名.xml
rosparam load +param.xml 然后再刷新就变成更改过得xml的类型了
rosservice call /clear “{}” 请求更改刚刚设置的参数
ros学习笔记一(古月居21讲)_第10张图片

ros学习笔记一(古月居21讲)_第11张图片

sudo apt-get install ros-melodic-turtle-tf

roslaunch turtle_tf turtle_tf_demo.launch

rosrun tf view_frames可视化看到系统中所有tf之间的关系保存在主目录下的,pdf文件。

rosrun tf tf_echo turtle1 turtle2  查看两个坐标系之间的变换
roscoreRosrun rviz rviz -d ’rospack find turtle_tf ‘/rviz/turtle_rviz.rviz

ros学习笔记一(古月居21讲)_第12张图片
2.tf坐标系广播与监听的编程实现
创建learning_tf功能包
在src中编写代码turtle_tf_broadcaster.cpp或者.py
配置编译规则
编译catkin_make
roscore
rosrun turtlesim turtlesim_node
rosrun learning_tf turtle_tf_broadcaster __name:=turtle1_tf_broadcaster /turtle1
rosrun learning_tf turtle_tf_broadcaster __name:=turtle2_tf_broadcaster /turtle2
rosrun learning_tf turtle_tf listenerRosrun turtlesim turtle_teleop_key
以上相当于上一节
roslaunch turtle_tf turtle_tf_demo.launch
3.launch启动文件的使用方法
Launch文件:通过xml文件实现多节点的配置和启动(可自动启动ros master)
创建功能包
ros学习笔记一(古月居21讲)_第13张图片
ros学习笔记一(古月居21讲)_第14张图片
ros学习笔记一(古月居21讲)_第15张图片
编写launch文件
(1)简单的启动两个节点

<launch> 
    <node pkg="learning_topic" type="person_subscriber" name="talker" output="screen" />      
    <node pkg="learning_topic" type="person_publisher" name="listener" output="screen" />
</launch>

(2)用launch文件配置参数

<launch>
   <param name="/turtle_number"   value="2"/>    
   <node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node">  
   <param name="turtle_name1"   value="Tom"/>  
   <param name="turtle_name2" value="Jerry"/>  
   <rosparam file="$(find learning_launch)/config/param.yaml" command="load"/> 
   </node>   搜索功能包    
   <node    pkg="turtlesim"   type="turtle_teleop_key"    name="turtle_teleop_key" output="screen"/>          启动键盘控制
</launch>                                     

(3)启动海龟监听

<launch>
     <!-- Turtlesim Node-->    
     <node pkg="turtlesim" type="turtlesim_node" name="sim"/>
     <node pkg="turtlesim" type="turtle_teleop_key" name="teleop" output="screen"/>
      <node pkg="learning_tf" type="turtle_tf_broadcaster" args="/turtle1" name="turtle1_tf_broadcaster" />   
      <node pkg="learning_tf" type="turtle_tf_broadcaster" args="/turtle2" name="turtle2_tf_broadcaster" />    
      <node pkg="learning_tf" type="turtle_tf_listener" name="listener" /> </launch>

(4)

<launch> 

     <include file="$(find learning_launch)/launch/simple.launch" />  通过这句话包含了simple.launch文件 
     <node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node">		
           <remap from="/turtle1/cmd_vel" to="/cmd_vel"/>   话题名更改
    </node>
</launch>

编译catkin_make
运行自己编写的launch文件
roslaunch learning_launch simple.launch
4.常用可视化工具的使用
1.Qt工具箱
Rqt 综合工具
rqt_bag rqt_dep rqt_image_view显示摄像头图像(插入摄像头并运行) rqt_plot绘制数据曲线
ros学习笔记一(古月居21讲)_第16张图片
rqt_console日志输出工具
ros学习笔记一(古月居21讲)_第17张图片
rqt_graph节点间通信显示 rqt_logger_level
rqt_shell
rqt综合工具箱
ros学习笔记一(古月居21讲)_第18张图片

2.rviz
roscore
rosrun rviz rviz
ros学习笔记一(古月居21讲)_第19张图片
3.Gazebo
仿真与rviz不同他可以自己创建数据,rviz必须有数据才行
编辑虚拟机把3d加载取消掉就可以打开了roslaunch gazebo_ros 按tab自己选择启动项
ros学习笔记一(古月居21讲)_第20张图片 ros学习笔记一(古月居21讲)_第21张图片

你可能感兴趣的:(ros学习笔记)