Wheeltec小车的开发实录(2)

小车初步启动控制

小车终端运行l:

roslaunch turn_on_wheeltec_robot turn_on_wheeltec_robot.launch

控制终端运行(多机通讯设置后,可以不必执行这一步)

export ROS_HOSTNAME=192.168.224.122(控制终端ip)export ROS_MASTER_URI=http://192.168.224.208:11311(小车终端ip)rostopic list

输出

 rostopic: error: you may only specify one input topic

rostopic echo /odom 

键盘控制

roslaunch wheeltec_robot_rc keyboard_teleop.launch

多机通讯设置(源自以下链接,此处只做备份使用)

ROS连接两台设备

利用Ros通信,两台电脑需要处于同一局域网下.
1、查看主机/从机 ip hostname

$ ifconfig           查看ip
如果电脑连接的时有线网,则显示结果中,etho 部分的 inet addr 后面就是该电脑的 IP 地址;

如果电脑连接的是无线,则 wlan0 部分的 inet addr 后就是 IP 地址。

$ cat /etc/hostname           查看hostname

2、修改hosts文件内容

$ sudo gedit /etc/hosts   注意hosts别打错了= =
A电脑(主机)

127.0.0.1     localhost
127.0.1.1     hostname_A

IP_A            hostname_A
IP_B            hostname_B

B电脑(从机)

127.0.0.1     localhost
127.0.1.1     hostname_B

IP_B            hostname_B
IP_A            hostname_A


3、修改bashrc文件内容

$ sudo gedit ~/.bashrc
在文件最后一行添加如下代码

A设备:

export ROS_MASTER_URI=http://hostname_A:11311

export ROS_HOSTNAME=hostname_A

B设备:

export ROS_MASTER_URI=http://hostname_A:11311

export ROS_HOSTNAME=hostname_B

A B 终端分别执行

source ~/.bashrc

4、测试

A:

$ roscore
$ rosrun turtlesim turtlesim_node

B:

$ rosrun turtlesim turtle_teleop_key
then, 就可以在从机B上用键盘控制主机A上小乌龟的移动啦
 

使用ROS连接两台电脑时,只能看到对方设备的IP,但是订阅不到ros消息_ros主从机通讯,从机接收不到主机的话题数据-CSDN博客

 一键终端输入

为了简化在终端的输入步骤我把需要的命令都做成了.sh文件,代码如下,执行方式是在终端中输入./文件名.sh,读者请根据自己的文件夹和ip修改

001start_roscar_PC.sh

echo " " | sudo mount -t nfs 192.168.31.101:/home/wheeltec/wheeltec_robot /mnt/ros1_7000
#export ROS_HOSTNAME=192.168.31.99
#export ROS_MASTER_URI=http://192.168.31.101:11311./001_1SCP_SSH.sh

 001_1SCP_SSH.sh

#!/usr/bin/expect
set login "登录端的用户名"
set addr "192.168.31.101"
set password "登录端的密码"spawn scp 001start_roscar_wheeltec.sh $login@$addr:~/wheeltec_robot/code_shexpect "$login@$addr\'s password:"
send "$password\r"
expect "#"spawn ssh -Y $login@$addrexpect "$login@$addr\'s password:"
send "$password\r"
expect "#"send "./wheeltec_robot/code_sh/001start_roscar_wheeltec.sh\r" # 这是我要执行的指令文件存放在登陆段的文件夹中interact

001start_roscar_wheeltec


cd ~/wheeltec_robot
source devel/setup.bash
#roslaunch turn_on_wheeltec_robot turn_on_wheeltec_robot.launch
#export ROS_IP=191.168.31.99 #这一句加上就打不开ros
roslaunch turn_on_wheeltec_robot mapping.launch

 报错

ERROR: cannot launch node of type [gmapping/slam_gmapping]: gmapping
ROS path [0]=/opt/ros/melodic/share/ros
ROS path [1]=/home/wheeltec/wheeltec_robot/src
ROS path [2]=/opt/ros/melodic/share

在小车终端下输入(不出现此错误则跳过)

sudo apt-get install ros-melodic-gmapping #根据自己的ros版本更改中间的名字我的是melodic

安装成功后输入

roslaunch turn_on_wheeltec_robot mapping.launch

雷达出错

我的雷达是镭神n10p所以我找到了对应的launch驱动文件

复制lsx10p到小车工作空间下src的文件夹

编译

catkin_make -DCATKIN_WHITELIST_PACKAGES="lsx10"

报错

WARNING: package "orb_slam2_ros" should not depend on metapackage "image_common" but on its packages instead

我没有理会

接着按照雷达的型号修改来lsx10功能包下的lslidar_driver/launch/lslidar_serial.launch文件

我的是n10p

接着打开rviz

Global Option下的Fixed Fram下输入laser(下拉菜单没有就自己输入)

增加LaserScan话题

雷达可以正常显示了。

下一步修改ros原雷达驱动。

在wheeltec小车中,雷达启动文件是

roslaunch rplidar_ros rplidar.launch

原有的 rplidar.launch

<launch><node name="rplidarNode"          pkg="rplidar_ros"  type="rplidarNode" output="screen"><param name="serial_port"         type="string" value="/dev/wheeltec_lidar"/><param name="serial_baudrate"     type="int"    value="115200"/><!--A1/A2 --><!-- <param name="serial_baudrate"     type="int"    value="256000"/>--><!--A3 --><!--<param name="serial_baudrate"     type="int"    value="1000000"/>--> <!--S2 --><param name="frame_id"            type="string" value="laser"/><param name="inverted"            type="bool"   value="false"/><param name="angle_compensate"    type="bool"   value="true"/></node>
</launch>

在导航的启动文件中我们发现雷达的launch文件是wheeltec_lidar.launch

开头第一句可以选择雷达型号

<arg name="rplidar_mode"  default="ls_M10_uart" doc="opt:  ls_M10_uart, ls_M10P_uart, ls_M10P_PLUS_uart, ls_M10_net, ls_M10P_net, ls_M10P_PLUS_net, ls_N10, ls_N10P, ld_14, ld_19, rplidar_A1_A2, rplidar_A3, rplidar_S1"/>

 我对应型号修改后是

<arg name="rplidar_mode"  default="ls_N10P" doc="opt:  ls_M10_uart, ls_M10P_uart, ls_M10P_PLUS_uart, ls_M10_net, ls_M10P_net, ls_M10P_PLUS_net, ls_N10, ls_N10P, ld_14, ld_19, rplidar_A1_A2, rplidar_A3, rplidar_S1"/>

编译修改后的包

catkin_make -DCATKIN_WHITELIST_PACKAGES="turn_on_wheeltec_robot"

建图

小车终端下输入:

roslaunch turn_on_wheeltec_robot mapping.launch

电脑控制端打开rviz

在电脑控制端下输入rviz

配置rviz界面

Global Option在的Fixed Frame选择map!

按照显示添加RobotModel、TF;

按照话题添加LaserScan和Map;

此时才会显示地图

新开一个小车控制端口输入键盘控制命令

roslaunch wheeltec_robot_rc keyboard_teleop.launch

操纵小车移动,建立完整的地图

此外如果小车的初始位置不对,去找机身上的reset按键,按一下

保存地图

方法一:

这种方法保存的名字的默认的wheeltec,roslaunch turn_on_wheeltec_robot map_saver.launch;

地图保存在: 工作空间目录/src/turn_on_wheeltec_robot/map

这个方法保存的地图在之后的导航中会直接调用该地图。

方法二:

rosrun map_server map_saver -f 地图名

直接保存在工作空间目录下,但是好处是自主命名。

导航

roslaunch turn_on_wheeltec_robot navigation.launch 

rviz配置

启动rviz和配置rviz的方式初步与建图是一致的

如果出现:点击2D Pose estimate后机器人位置没有改变的问题

仔细检查之前的“多机通讯设置”中的ip是否出错

如果没有设置静态ip 那么机器的ip地址会发生变化,导致出错,建议固定ip

固定ip的方式见以下链接:

Wheeltec小车的开发实录(0)-CSDN博客

总体需要添加的检测项如下

 

其中两个map订阅的话题一个是全局地图一个是局部地图

path设置

新加的两个path一个是全局一个是局部

左键选中

单击地图上的一点,便会自动规路径到达目标点

多个目标点

选中后,单击介个地图点就可以,别的方法教学视频有我就不写了。rviz配置那一节里了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/661354.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Tomcat与网络8】从源码看Tomcat的层次结构

在前面我们介绍了如何通过源码来启动Tomcat&#xff0c;本文我们就来看一下Tomcat是如何一步步启动的&#xff0c;以及在启动过程中&#xff0c;不同的组件是如何加载的。 一般&#xff0c;我们可以通过 Tomcat 的 /bin 目录下的脚本 startup.sh 来启动 Tomcat&#xff0c;如果…

【HarmonyOS应用开发】UIAbility实践第二部分(六)

内容接上篇 【HarmonyOS应用开发】UIAbility实践第一部分&#xff08;五&#xff09; 末尾含示例源码 三、UIAbility的生命周期 当用户浏览、切换和返回到对应应用的时候&#xff0c;应用中的UIAbility实例会在其生命周期的不同状态之间转换。 UIAbility类提供了很多回调&a…

关于字符串处理

文章目录 关于字符串处理1、取字符串的长度2、跳过前面的字符3、取字符串右边的字符4、掐头去尾5、取倒数的范围6、删左留右7、删右留左8、查找替换9、大小写转换 关于字符串处理 1、取字符串的长度 [rootlocalhost ~]#strabcd1128 #定义变量 [rootlocalhost ~]#echo ${#str}…

IEEE| IceNet《IceNet for Interactive Contrast Enhancement》论文超详细解读(翻译+精读)

学习资料&#xff1a; 论文题目&#xff1a;《IceNet for Interactive Contrast Enhancement》&#xff08;用于交互式对比度增强的IceNet&#xff09;原文地址&#xff1a;export.arxiv.org/pdf/2109.05838v2.pdf 目录 ABSTRACT—摘要 翻译 精读 I. INTRODUCTION—简介 翻…

通俗易懂三大范式

通俗易懂三大范式 第一范式说的是每个字段不可再分 第二范式说的是不能存在部分依赖&#xff08;不能由联合主键的部分就可以推出其他字段&#xff0c;必须整个联合主键才能推出其他字段&#xff09; 第三范式说的是不能存在间接依赖(A&#xff08;主键&#xff09;→B,B→C…

瑞_23种设计模式_工厂模式

文章目录 1 什么是工厂模式案例案例代码 2 简单工厂模式&#xff08;Simple Factory&#xff09;2.1 简单工厂模式的结构2.2 案例改进——简单工厂模式2.3 案例改进代码实现2.4 简单工厂模式优缺点2.5 拓展——静态工厂 3 工厂方法模式&#xff08;Factory Method&#xff09;★…

【零基础学习CAPL】——CAN报文的发送(按下按钮同时周期性发送)

🙋‍♂️【零基础学习CAPL】系列💁‍♂️点击跳转 文章目录 1.概述2.面板创建3.系统变量创建4.CAPL实现4.1.函数展示4.2.全量报文展示5.效果1.概述 本章主要介绍使用CAPL和Panel在按下按钮时发送周期性CAN报文。 本章主要在“【零基础学习CAPL】——CAN报文的发送(配合P…

数组与字符串深度巩固

经过再三思考觉得今天就写一篇关于数组与字符串相关的文章吧&#xff01;其中字符串主要通过练习来巩固知识亦或是获得新知识。好接下来将进行我们的学习时刻了。 首先我们来思考一个问题&#xff0c;你真的了解数组的数组名吗&#xff1f;数组名真的就单单一个名字而已吗&…

Mac安装配置JDK

Mac安装配置jdk 下载地址&#xff1a;https://www.oracle.com/java/technologies/downloads/#java8 下载jdk1.8及以上需要Oracle账号及密码 dokidoki811163.com\pass:Zywxmxbt1314… 安装jdk 双击安装包&#xff0c;点击.pkg&#xff0c;按照提示安装&#xff0c;配置环境之前…

微信小程序(二十八)网络请求数据进行列表渲染

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.GET请求的规范 2.数据赋值的方法 源码&#xff1a; index.wxml <!-- 列表渲染基础写法&#xff0c;不明白的看上一篇 --> <view class"students"><view class"item">&…

介绍一个超好用的API管理工具:Apipost

Apipost是一款集API调试、生成文档、Mock、测试于一体的协同工具。单个工具可以同时满足接口测试、生成/分享文档、Mock、流程测试等功能&#xff0c;还有超实用的多人多角色间实时协作的功能。将前端、后端、测试三种角色串联起来&#xff0c;从而实现工作流程无缝衔接、提高研…

【Qt】—— 项⽬⽂件解析

目录 &#xff08;一&#xff09;.pro⽂件解析 &#xff08;二&#xff09;widget.h⽂件解析 &#xff08;三&#xff09;main.cpp⽂件解析 &#xff08;四&#xff09;widget.cpp⽂件解析 &#xff08;五&#xff09;widget.ui⽂件解析 &#xff08;一&#xff09;.pro⽂…

P1083 [NOIP2012 提高组] 借教室

P1083 [NOIP2012 提高组] 借教室 题目描述 在大学期间&#xff0c;经常需要租借教室。大到院系举办活动&#xff0c;小到学习小组自习讨论&#xff0c;都需要向学校申请借教室。教室的大小功能不同&#xff0c;借教室人的身份不同&#xff0c;借教室的手续也不一样。 面对海…

net 一台路由器如何让两个不同网段的终端可以通信。

# 终端设备自己设置就行了 # 路由器的设置 The device is running! #################################################### <Huawei> Feb 1 2024 21:21:09-08:00 Huawei %%01IFPDT/4/IF_STATE(l)[0]:Interface GigabitEt hernet0/0/0 has turned into UP state. <…

C++层uevent获取

本文用的是#include <cutils/uevent.h> 主要讲述android中怎么在C层接收uevent uevent 是 kernel层向用户层发送的一个事件 首先创建一个线程用于循环去获取uevent void testUevent {//创建一个线程一直循环pthread_t thread;int ret pthread_create(&thread, nu…

Win11系统连接带HDMI接口的显示器后,电脑没有声音如何调试

解决这个问题的方法很简单&#xff0c;没有那么复杂。之所以使用HDMI接口连接了显示器后没声音&#xff0c;原因就是HDMI接口是包含音频视频两种信号的接口。当电脑的HDMI接口被使用时&#xff0c;系统就会默认从HDMI设备输出声音信号了&#xff0c;而此时如果HDMI设备没有声音…

取巧方式el-select单选重复选择

前言&#xff1a;之前产品是可以多选&#xff0c;我就一想在el-select 加个multiple不就完事了吗&#xff1f;我兴高采烈几分钟就实现了这个选择框&#xff0c;可是后面说单选也要重复多选几个&#xff0c;顿时我就****,又不想自己写个 首先安装element-plus 一定要安装2.5版本…

OSPF排错

目录 实验拓扑图 实验要求 实验排错 故障一 故障现象 故障分析 故障解决 故障二 故障现象 故障分析 故障解决 故障三 故障现象 故障分析 故障解决 故障四 故障现象 故障分析 故障解决 故障五 故障现象 故障分析 故障解决 故障六 故障现象 故障分析 …

wespeaker项目grpc-java客户端开发

非常重要的原始参考资料&#xff1a; 链接: triton-inference-server/client github/grpc java ps&#xff1a; 使用grpc协议的其它项目python/go可以参考git hub目录client/tree/main/src/grpc_generated下的其它项目 其它链接&#xff1a; 想要系统了解triton-inference-ser…

【linux】运维-磁盘空间不足-用到的命令(简洁)

【linux】运维-磁盘空间不足-用到的命令 常用&#xff1a; 注&#xff1a;du -s 和 -d 不能同时都用, -s | -d n 注&#xff1a;df -H 和 -h 区别 -H 1K1000 -h 1K1024 #-T 显示文件系统类型 -h 高可读性显示 df -Th #-c显示总和 ;sort -r 倒序显示 ;2>/dev/nul…