ros入门学习(一)
最近一段时间对ros进行了初步的使用和学习,其中产生的一些问题和实现过程借助博客来进行记录与回顾
    q1:
    
    1.E: 无法获得锁 /var/lib/dpkg/lock-frontend – open (11: 资源暂时不可用)
    
    E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?
   
    
    
    原因是在运行进程之前,有之前未关闭的进程仍在运行,因此解决思路是杀死原有进程。
    
    1.方法一:
    
    ps 查看正在进行的进程
    
    然后:
    
    $sudo kill a
    
    $sudo kill b
    
    杀死原有进程,但是这样有时候不管用。
    
    2.方法二:
    
    sudo rm /var/cache/apt/archives/lock
    
    sudo rm /var/lib/dpkg/lock
    
    在多次查询后,发现18.01系统下,方法三可以稳定解决error11.
    
    **3.方法三(较为有效,基本都可以解决)
    
    sudo rm /var/lib/dpkg/lock-frontend
    
    终于成功。
   
    q2:
    
    **话题通信实现要点
    
    **发布方
    
    1、头文件
    
    2.初始化节点
    
    3.创建句柄
    
    4.创建发布者对象
    
    5.编写发布逻辑
   
     
   
    **订阅方
    
    1、头文件
    
    2.初始化节点
    
    3.创建句柄
    
    4.创建订阅对象
    
    5.处理订阅数据
    
    6.声明spin()
   
     
   
q3:自定义msg
    没有那个文件或目录
    
    在ubuntu 64位下运行 ./xxx 会显示没有这个文件或者目录,但是主文件夹中又有这个文件。
   
    
    
    原因是没有32位的运行库 ia32-libs ,直接安装即可。
    
    用命令sudo apt-get install ia32-libs。
   
    q4 couldn’t find executable错误
    
    找了很多解决办法
    
    最后在编译过程中选择
    
    catkin make isolated:build时可以成功运行出demo03_pub_person
    
    catkin make:build则不可以
   
    
    
    8.12补充:
    
    之前失败的原因找到应该是如下:
    
    编译过程中选择两种其一即可,两种编译都进行过后会产生devel,devel_isolated和build,build_isolated
    
    前后两种分别都出现冗余,因此,找到文件夹中的development——isolated和build——isolated,删除之,之后再未出现有该类错误。
   
    q5参数服务器
    
    *修改参数:可在原有参数下重新设置参数,值会覆盖。
    
    使用的api:ros::param
   
    
    
    *查询参数
    
    参数服务器操作之查询_C++实现:
    
    在 roscpp 中提供了两套 API 实现参数操作
    
    ros::NodeHandle(6个)
    
    和ros::param (同上)
   
    
    
    *删除参数
    
    ros::NodeHandle
    
    deleteParam(“键”)
   
    
     
   
删除成功,返回 true,否则返回 false
    ros::param
    
    del(“键”)
    
    删除成功,返回 true,否则返回 false
   
    
    
    q6命令实现
    
    *rosnode
   
    
    
    *rostopic
   
     
   
    *rosservice
    
    *rosmsg
    
    *rossrv同上
    
    *rosparam
   
     
   
    
    q7小乌龟实操实现
   
    
     *话题发布控制乌龟运动轨迹
    
   
1话题与消息获取
获取消息类型
rostopic type /turtle1/cmd_vel获取消息格式
rosmsg info geometry_msgs/Twist获得的消息格式为
geometry_msgs/Vector3 linear
  float64 x
  float64 y
  float64 z
geometry_msgs/Vector3 angular
  float64 x
  float64 y
  float64 z2.实现发布节点
添加依赖包 roscpp rospy std_msgs geometry_msgs
编辑乌龟运动的线速度,角速度使得乌龟做匀速圆周运动。
3.启动乌龟显示节点;
执行运动控制节点,完成乌龟的圆周运动。
    
    
    
     *话题订阅实现获取乌龟位姿信息
    
   
1.获取话题消息、消息格式。
话题/turtle1/pose
消息turtlesim/Pose
由
rosmsg info turtlesim/Pose获取格式
float32 x
float32 y
float32 theta
float32 linear_velocity
float32 angular_velocity2.构造dopose函数获取节点信息。
void doPose(const turtlesim::Pose::ConstPtr& p)3.启动乌龟显示节点,执行运动控制节点,乌龟位姿订阅节点,最终获取到乌龟当前的位姿信息。
    
    
    *调用服务新增小乌龟
   
1.获取服务名称与消息
通过rossrv获取消息格式
rossrv info turtlesim/Spawn格式为
float32 x
float32 y
float32 theta
string name
---
string name2.添加依赖包 roscpp rospy std_msgs turtlesim,编辑客户端实现
3.运行相关节点,实现小乌龟添加。
    
    
    *设置参数改变小乌龟背景颜色
   
1.获取参数
rosparam list参数为
/turtlesim/background_b
/turtlesim/background_g
/turtlesim/background_r2.在C++文件中对颜色参数进行修改。
3.执行相关节点,完成对背景颜色的修改。
     
   
 
