Ros1
源配置
/etc/apt/sources.list
deb http://packages.aicrobo.com/ros/ubuntu/ focal main
#deb http://packages.aicrobo.com/aicrobo/ focal main
#deb http://packages.aicrobo.com/aicrobo focal main
#deb http://packages.aicrobo.com/aicrobo focal main
#deb http://th.archive.ubuntu.com/ubuntu focal main
# 默认注释了源码仓库,如有需要可自行取消注释
deb https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
/etc/apt/sources.list.d/ros-latest.list
deb http://packages.ros.org/ros/ubuntu focal main
deb https://repo.huaweicloud.com/ros/ubuntu focal main
配置完源后安装公钥
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F42ED6FBAB17C654
udo apt update
#如果现现gpg: 从公钥服务器接收失败:Server indicated a failure
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv F42ED6FBAB17C654
sudo apt update
安装ros noetic
sudo apt install ros-noetic-desktop-full
sudo aptitude install ros-noetic-desktop-full #如果以上安装命令出错可使用些命令安装修复
安装签名
wget -O https://packages.spfrobotics.com/spfrobotics/pool/main/a/aicrobo-keyring/aicrobo-keyring_2021``.07.16.1~20.04.0_all.deb
sudo dpkg -i aicrobo-keyring_2021.07.16.1~20.04.0_all.deb #添加签名证书链`
rosdep配置源
需要配置DNS:172.16.1.1才能连上公司的源。
/etc/ros/rosdep/sources.list.d/20-default.list
yaml https://git.spfbot.com/projects/AICROS/repos/aic_rosdep_rules/raw/noetic.yaml
Ros日志分为五个级别
RCLCPP_DEBUG(this->get_logger(), "我是DEBUG级别的日志,我被打印出来了!");
RCLCPP_INFO(this->get_logger(), "我是INFO级别的日志,我被打印出来了!");
RCLCPP_WARN(this->get_logger(), "我是WARN级别的日志,我被打印出来了!");
RCLCPP_ERROR(this->get_logger(), "我是ERROR级别的日志,我被打印出来了!");
RCLCPP_FATAL(this->get_logger(), "我是FATAL级别的日志,我被打印出来了!");
cartographere安装
编译安装过程
(14条消息) 【安装学习】安装Cartographer ROS(noetic)_ros-noetic-cartographer_Howe_xixi的博客-CSDN博客
需要运行roscore才可以启动cartographere
解决“cartographer: [libabsl-dev] defined as “not available“ for OS version [bionic]”问题
需要删除或者注释在cartographer 包下package.xml文件里的(
编译时报错ninij -j4 -l4错误
原因由于ceres版本不对,按下面地址下载编译安装重新编译
(14条消息) SLAM疑难篇一:ceres安装和编译报错——实践高翔SLAM十四讲_ceres报错_j_shuttworth的博客-CSDN博客
编译ceres按照官方流程Installation — Ceres Solver (ceres-solver.org)
安装扩展包
costmap_2d
sudo apt-get install ros-noetic-costmap-2d
aicrobo
package | - | - |
---|---|---|
aic_msgs | ros—msgs通用协议 | |
aic_auto_dock | 入库装料 | |
aic_dock_param | ||
aic_field_detector | ||
aic_global_planner | 全局路径规划 | |
aic_laser_feature_applicatior | 雷达 | |
aic_laser_filter | 雷达过虑 | |
aic_laser_merge | ||
aic_local_planner | 本地路径规划 | |
aic_move_avoid | 移动避障 | |
aic_move_base | 移动控制 | 由第三方库改 |
aic_mr_nav | ||
aic_nav_core | 自动导航 | |
aic_obstacle_detect | ||
aic_odom_trajetory | ||
aic_rosdep_rules | ||
aicrobot_mr | 机器人启动项 | |
yocs_cmd_vel_mux | ||
yocs_velocity_smoother | ||
aic_laser_verify | ||
cartographer | 建图 | |
cartographer_ros_msgs | ||
cartographer_ros | ||
cartographer_rviz | ||
ceres-solver | 第三方算法库 | |
ar_track_alvar | 二维码 | ros开源的Ar跟踪库ar_track_alvar - ROS Wiki |
ar_track_locate | 二维码定位识别 | |
ros-noetic-mqtt-client | mqtt的ros客户端 |
aicrobo项目配置Apps
注意:需要更新到ubuntu22的boost1.74的库。
安装扩展
- 安装catkin tools
官网安装地址:Installing catkin_tools — catkin_tools 0.0.0 documentation (catkin-tools.readthedocs.io)
No package ‘orocos-bfl‘ found
Ubuntu 20.04 编译报错 No package ‘orocos-bfl‘ found
的解决方法_wongHome的博客-CSDN博客
sudo apt-get install liborocos-bfl-dev
teb_local_planner插件
#安装teb_local_planner
sudo apt-get install ros-noetic-teb-local-planner
#costmap_converter插件
sudo apt-get install ros-noetic-costmap-converter
#mbf-costmap-core
sudo apt-get install ros-noetic-mbf-costmap-core
#mbf-msgs
sudo apt-get install ros-noetic-mbf-msgs
使用catkin_make编译独立包可使用以下命令
catkin_make -DCATKIN_WHITELIST_PACKAGES="teb_local_planner"
#(src文件夹下面你下载的teb功能包文件夹名字)
安装rviz
sudo apt-get install ros-noetic-rviz
Ros
command
rosnode
rosservice
roslaunch
rostopic
TF
tf::Vector3
它的别一个别名:
typedef tf::Vector3 Point;
tf::Vector3(float x, float y, float z)
tf::Transform
它的别一个别名:psoe
typedef tf::Transform Pose;
tf::Quaternion
tf::poseMsgToTF
tf::poseTFToMsg
tf::quaternionMsgToTF
tf::getYaw
launch
<launch>
<!--定义一个machine主机-->
<machine name="local_alt" address="localhost" default="true" ros-root="/u/user/ros/ros/" ros-package-path="/u/user/ros/ros-pkg" />
<!-- 启动节点listener,命名为listener-1 -->
<node name="listener-1" pkg="rospy_tutorials" type="listener" />
<!-- 启动节点listener,命名为listener-2,传入参数 -->
<node name="listener-2" pkg="rospy_tutorials" type="listener" args="-foo arg2" />
<!-- 启动节点listener,命名为listener-3,节点被kill之后自动重启 -->
<node name="listener-3" pkg="rospy_tutorials" type="listener" respawn="true" />
<!--在命名空间wg1中启动listener节点命名为listener-wg1-->
<node ns="wg1" name="listener-wg1" pkg="rospy_tutorials" type="listener" respawn="true" />
<!--在命名空间wg2下启动一个group-->
<group ns="wg2">
<!-- 映射主题chatter->hello,生效范围为group范围内 -->
<remap from="chatter" to="hello"/>
<node pkg="rospy_tutorials" type="listener" name="listener" args="--test" respawn="true"/>
<node pkg="rospy_tutorials" type="talker" name="talker">
<!-- 设置一个私有变量的值 -->
<param name="talker_1_param" value="a value" />
<!-- 映射主题chatter->hello-1,生效范围为node范围内 -->
<remap from="chatter" to="hello-1"/>
<!-- 设置环境变量,作用范围为node范围内 -->
<env name="ENV_EXAMPLE" value="some value" />
</node>
</group>
</launch>
launch
所有的launch文件都由<launch>
开头,由</launch>
结尾,所有的描述标签都要写在<launch></launch>
之间。通过roslaunch启动launch文件
roslaunch package_name demo.launch
node
- name :为节点指派名称,这将会覆盖掉ros::init()定义的node_name
- pkg:节点所在的包名
- type:执行文件的名称如果是用Python编写的就填写xxx.py,如果是cpp就写编译生成的可执行文件名
- output:终端输出转储在当前的控制台上,而不是在日志文件中
rosparam
rosparam标签允许从YAML文件中一次性导入大量参数。
使用方法如下:
<rosparam command="load" file=""$(find pkg-name)/path/name.yaml" />
env
env通常用于设置环境变量,仅用于标签<launch><node><include><machine>
范围内,且只有环境变量定义之后的节点生效。使用方法示例如下:
<env name="dome_env" value="demo_env" />
machine
machine通常用于多主机之间启动节点,可以在本机上启动同一局域网下其他主机上的节点,具体用法示例如下:
<launch>
<!-- 定义一个machine主机并加载环境变量 -->
<machine name="foo" address="foo-address" env-loader="/opt/ros/fuerte/env.sh" user="someone" />
<!-- 启动主机machine上的一个节点 -->
<node machine="foo" name="footalker" pkg="test_ros" type="talker.py" />
include
该标签可以导入另一个roslaunch XML文件到当前文件。
- file:指明我们想要包含进来的文件
- ns:相对NAEM_SPACE命名空间导入文件
remap
remap标签顾名思义重映射,ROS支持topic的重映射,remap标签里包含一个original-name和一个new-name,及原名称和新名称。
比如现在你拿到一个节点,这个节点订阅了"/chatter"topic,然而你自己写的节点只能发布到"/demo/chatter"topic,由于这两个topic的消息类型是一致的,你想让这两个节点进行通讯,那么可以在launch文件中这样写:
<remap from="chatter" to="demo/chatter" />
param
param标签的作用相当于命令行中的rosparam set
例如现在在参数服务器中添加一个名为demo_param,值为666的参数
<param name="demo_param" type="int" value="666" />
group
group标签可以将若干个节点同时划分进某个工作空间。
<group ns="demo_1">
<node name="demo_1" pkg="demo_1" type="demo_pub_1" output="screen" />
<node name="demo_2" pkg="demo_2" type="demo_pub_2" output="screen" />
</group>
<group ns="demo_2">
<node name="demo_3" pkg="demo_3" type="demo_pub_3" output="screen" />
<node name="demo_4" pkg="demo_4" type="demo_pub_4" output="screen" />
</group>
group标签还可以做到对node的批量管理。比如我可以同时终止在同一个group中的节点。
<group if="1-or-0">
......
</group>
<group unless="1-or-0">
......
</group>
第一种情况,当if属性的值为0的时候将会忽略掉
第二种恰好相反,当if属性的值为1的时候将会忽略掉
但是我们通常不会直接用1或0来定义if标签。因为这样不够灵活。
通常会搭配$(arg arg_name)来使用。
test
test标签与node的作用一样,其用于启动测试节点,使用方法示例如下:
<test test-name="test_1_2" pkg="mypkg" type="test_1_2.py" time-limit="10.0" args=“--test1 --test2" />
arg
arg标签用来在launch文件中定义参数,arg和param在ROS里有根本性的区别,就像局部变量和全局变量的区别一样。arg不储存在参数服务器中,不能提供给节点使用,只能在launch文件中使用。param则是储存在参数服务器中,可以被节点使用。
<arg name="demo" />
以上就是简单地声明了一个参数,名叫demo,但是声明不等于定义,我们需要给他赋值,在赋值之后参数才能够发挥作用。
<arg name="demo" value="666"/>
<arg name="demo" default="666"/>
以上是两种简单的赋值方法,两者的区别是使用后者赋值的参数可以在命令行中像下面这样被修改,前者则不行。
roslaunch demo demo.launch demo:=6666
arg还有更加高级,也更加灵活的用法:
$(arg arg_name)
当$(arg arg_name)出现在launch文件任意位置时,将会自动替代为所给参数的值。
C++
setParam();
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具