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

这篇博客记录了作者在学习ROS过程中遇到的问题及其解决方案,包括dpkg资源锁定错误的解决、话题通信的实现要点、自定义msg的创建、参数服务器的操作以及命令行工具的使用。此外,还详细介绍了如何控制小乌龟的运动轨迹、获取乌龟位姿信息、新增小乌龟以及修改背景颜色等实践操作。
摘要由CSDN通过智能技术生成

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.执行相关节点,完成对背景颜色的修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值