c++实现ros控制乌龟运动及位姿信息获取

  • Post author:
  • Post category:其他


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 z

2.实现发布节点

添加依赖包  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_velocity

2.构造dopose函数获取节点信息。

void doPose(const turtlesim::Pose::ConstPtr& p)

3.启动乌龟显示节点,执行运动控制节点,乌龟位姿订阅节点,最终获取到乌龟当前的位姿信息。



*调用服务新增小乌龟

1.获取服务名称与消息

通过rossrv获取消息格式

rossrv info turtlesim/Spawn

格式为

float32 x
float32 y
float32 theta
string name
---
string name

2.添加依赖包 roscpp rospy std_msgs turtlesim,编辑客户端实现

3.运行相关节点,实现小乌龟添加。



*设置参数改变小乌龟背景颜色

1.获取参数

rosparam list

参数为

/turtlesim/background_b
/turtlesim/background_g
/turtlesim/background_r

2.在C++文件中对颜色参数进行修改。

3.执行相关节点,完成对背景颜色的修改。



版权声明:本文为qq_46055612原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。