固定架
两个框架中最重要的是固定框架。固定框架是用于表示“世界”框架的参考框架。这通常是“地图”或“世界”或类似名称,但也可以是例如里程表框架。
如果将固定框架错误地设置为例如机器人的底座,则机器人曾经见过的所有物体都将出现在机器人前面,相对于检测到它们的位置。为了获得正确的结果,固定框架不应相对于世界移动。
如果更改固定帧,则将清除当前显示的所有数据,而不是重新转换它们。
roscd之前,请构建您的新软件包:
$ cd%YOUR_CATKIN_WORKSPACE_HOME%/ src
$ catkin_create_pkg learning_tf tf roscpp rospy turtlesim
rosparam set set parameter
rosparam get get parameter
rosparam load load parameters from file
rosparam dump dump parameters to file
rosparam delete delete parameter
rosparam list list parameter names
rosservice list print information about active services
rosservice call call the service with the provided args
rosservice type print service type
rosservice find find services by service type
rosservice uri print service ROSRPC uri
rosmsg和rossrv的作用
- msg:msg文件就是一个描述ROS中所使用消息类型的简单文本。它们会被用来生成不同语言的源代码。
- srv:一个srv文件描述一项服务。它包含两个部分:请求和响应。所以srv文件具体描述的就是一个服务中请求和响应分别要求的消息格式。
对上边的内容进行一下总结:
初始化 ROS 系统
在 ROS 网络内广播我们将要在 chatter 话题上发布 std_msgs/String 类型的消息
以每秒 10 次的频率在 chatter 上发布消息
接下来我们要编写一个节点来接收这个消息。
初始化ROS系统
订阅 chatter 话题
进入自循环,等待消息的到达
当消息到达,调用 chatterCallback() 函数
ROS的CMakelists.txt的官方介绍
信息的订阅发布C++官方教程
我直接复制CMakeLists.txt的内容,失败了。总结了下需要以下四个内容:
find_package(catkin REQUIRED COMPONENTS roscpp)
include_directories(include ${catkin_INCLUDE_DIRS})
add_executable(talker src/talker.cpp)
target_link_libraries(talker ${catkin_LIRBARIES})
add_dependencies(talker beginner_tutorials_generate_messages_cpp)
msg和srv的使用
官网的demo一直会报错,报错信息是“Unknow CMake command “add_messages_files”,之后还会面临各样问题。
最终按照另一个博客复现成功:
需要注意的点是:
1.find_package(catkin REQUIRED COMPONENTS)必须放在add_message_files前面,否则将会缺少依赖。这是因为在自动生成的CMakeLists.txt里有两处find_package(catkin REQUIRED COMPONENTS)。
2.catkin_package(CATKIN_DEPENDS message_runtime)中是message_runtime而不是教程中的message_genaration。
更加精简的教程见博客
cmake命令解读
fatal error: ros/ros.h: No such file or directory
这个问题是因为他找不到ros.h这个头文件,首先应该想到是CMakeLists.txt出了问题。检索include_directories字段,将里面的${catkin_INCLUDE_DIRS}
的注释取消掉,若没有,就自己添加进去。
ros的service-client里,service一直在运行等待着client发起请求。
roswtf用于检错,个人用的不多。
安装系统依赖项
rosdep install [package]
roslaunch编写技巧:
1.高层级launch,利用include将系统的组成部分和ROS parameter引用过来。
<include file="$(find pr2_alpha)/$(env ROBOT).machine"/>
# env是给置换符
2.remap
当一个给定类型的信息,在不同的情况下会发布在不同的topic上,我们可以使用remap重新映射。
<remap from="odom" to="pr2_base_odometry/odom"/>
#可以从odom里收到pr2话题的信息。
3.param 和 rosparam
param是node的私有参数,rosparam从yaml中读取参数,yaml支持允许复杂的嵌套域名的参数,相同的参数值可以在多个地方重复使用。
<param name="controller_patience" value="15.0">
<rosparm file="$(find 2dnav_pr2)/config/costmap_common_params.yaml" command="load" ns="global_costmap">
4.roslaunch的重载功能
<launch>
<include file="$(find 2dnav_pr2)/move_base/2dnav_pr2.launch" />
<param name="move_base/local_costmap/resolution" value="0.5"/>
</launch>
假设这个变量在launch文件里定义了,但又需要进行修改,此时由于roslaunch的参数是按顺序赋值的,因此可以直接在后面加一行param来进行设定,而无需一直修改yaml之类的。缺点是使得文件难以理解:想知道一个参数,需要追溯到launch 的引用。(这句话是教程原话,不太能理解。)
ROS是右手坐标系,具体:
Axis Orientation
In relation to a body the standard is:
x forward
y left
z up
For short-range Cartesian representations of geographic locations, use the east north up [5] (ENU) convention:
X east
Y north
Z up
跳过的内容:
snaps:似乎是用于捆绑软件包及其依赖的,但是CSDN博客上缺少对这方面的介绍,也不知道实际应用的时候有何意义,因此跳过。
find的用处
$ roslaunch urdf_tutorial display.launch model:='$(find urdf_tutorial)/urdf/01-myfirst.urdf'
四元数:
可视化软件来自高翔的SLAM十四讲,https://github.com/gaoxiang12/slambook
ch3里有visualizeGeometry,安装按照文件夹中的readme来,需要用到第三方库pangolin,在3rdparty文件夹里.
安装完成后 ./vivisualizeGeometry
运行可执行文件,可能会报错:cannot open shared object file: No such file or directory
这里的意思其实是少了libpangolin.so这个共享库,但我们之前安装了panligo的,肯定是有的.从安装记录可以看到,Installing:/usr/local/lib/libpangolin.so
这意味着,我们的libpangolin.so安装在了/usr/local/lib里,这是由于我们权限不足造成的,因为默认搜索的位置其实是在/lib或者/usr/lib。
解决办法:
#打开ld.so.conf文件,我是用了code
code /etc/ld.so.conf
#在文件中换行输入 /usr/local/lib,即你希望添加的共享库的绝对地址,保存。若权限不够,以sudo运行。
#载入设置,但这是暂时的,每次想要跑这个程序都得ldconfig一下,而且可能权限不够,得要sudo。
ldconfig
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)