Compare commits

..

4 Commits

Author SHA1 Message Date
winterhalderp 41d1ea87ad Update 'non-ros-files/rpi_install.bash' 2023-03-03 23:29:46 +01:00
Christopher Herr 7b55f1e325 revert 3d0fb1ef73
revert revert ed2f2c95c7

revert ROS actionlib start
2023-01-18 16:13:42 +01:00
Christopher Herr 3d0fb1ef73 revert ed2f2c95c7
revert ROS actionlib start
2023-01-18 16:12:06 +01:00
Christopher Herr f36c5f5424 modified: src/custom_interfaces/CMakeLists.txt
new file:   src/custom_interfaces/srv/InclineControlSRV.srv
	new file:   src/custom_interfaces/srv/MosfetControlSRV.srv
	new file:   src/custom_interfaces/srv/PitchControlSRV.srv
	new file:   src/custom_interfaces/srv/RotationControlSRV.srv
	new file:   src/custom_interfaces/srv/SensorSRV.srv
	new file:   src/custom_interfaces/srv/WatchdogSRV.srv
	new file:   src/pubsub/pubsub/__pycache__/__init__.cpython-310.pyc
	new file:   src/pubsub/test/__pycache__/test_copyright.cpython-310-pytest-6.2.5.pyc
	new file:   src/pubsub/test/__pycache__/test_flake8.cpython-310-pytest-6.2.5.pyc
	new file:   src/pubsub/test/__pycache__/test_pep257.cpython-310-pytest-6.2.5.pyc

Let's see
2023-01-18 15:42:46 +01:00
24 changed files with 360 additions and 29 deletions

View File

@ -4,22 +4,43 @@
# Only the password was changed after first boot
# Everything else is stock
# First Update
## Reference / Source:
# https://docs.ros.org/en/foxy/Installation/Ubuntu-Install-Debians.html
## First Update
sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get dist-upgrade -y
# Install ROS2 Foxy Fitzroy Desktop
sudo apt update && sudo apt install locales
### Install ROS2 Foxy Fitzroy for Raspberry Pi
## Check for UTF-8
locale # check for UTF-8
sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
sudo apt update && sudo apt install -y curl gnupg2 lsb-release
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
sudo sh -c 'echo "deb [arch=$(dpkg --print-architecture)] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" > /etc/apt/sources.list.d/ros2-latest.list'
sudo apt update && sudo apt install -y ros-foxy-ros-base
export LANG=en_US.UTF-8
locale # verify settings
## Setup Sources
sudo apt install software-properties-common
sudo add-apt-repository universe
sudo apt update && sudo apt install curl
sudo apt install -y curl gnupg2 lsb-release
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
# OLD: curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
# OLD: sudo sh -c 'echo "deb [arch=$(dpkg --print-architecture)] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" > /etc/apt/sources.list.d/ros2-latest.list'
## Install ROS2
sudo apt-get update && sudo apt-get upgrade -y
sudo apt install -y ros-foxy-ros-base
source /opt/ros/foxy/setup.bash
# Check to see if installed correctly
echo "ROS_VERSION: "$ROS_VERSION
## Install other Tools
# Install rosdep
sudo apt install -y python3-rosdep2
rosdep update
@ -44,7 +65,6 @@ cd colcon_ws
colcon build
# Install network tools
sudo apt install -y wireless-tools
@ -52,16 +72,16 @@ sudo apt install -y wireless-tools
# Install Git
sudo apt install -y git
# Setup remote git from inside workspace
cd ~/colcon_ws
git init
# Change the URL to your Git repository
git remote add origin https://egit.irs.uni-stuttgart.de/RoverLehre/ROS2_pubsub.git
git fetch --all
git reset --hard origin/master
# Install your project specific python packages
# You can use pip3 as the install tool, eg:
pip3 install python-can

View File

@ -0,0 +1,70 @@
cmake_minimum_required(VERSION 3.5)
project(custom_interfaces)
# Default to C99
if(NOT CMAKE_C_STANDARD)
set(CMAKE_C_STANDARD 99)
endif()
# Default to C++14
if(NOT CMAKE_CXX_STANDARD)
set(CMAKE_CXX_STANDARD 14)
endif()
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
add_compile_options(-Wall -Wextra -Wpedantic)
endif()
# find dependencies
find_package(ament_cmake REQUIRED)
find_package(std_msgs REQUIRED)
find_package(builtin_interfaces REQUIRED)
# -->
# ADD THESE LINES: START HERE
find_package(rosidl_default_generators REQUIRED)
find_package(rclcpp REQUIRED)
# CUSTOM LINES: CHANGE FOR YOUR FILENAMES
rosidl_generate_interfaces(${PROJECT_NAME}
"msg/CustomMsg1.msg"
"msg/CustomMsg2.msg"
"srv/CustomSrv1.srv"
"srv/StateMachineSrv.srv"
"srv/InclineControlSRV.srv"
"srv/MosfetControlSRV.srv"
"srv/PitchControlSRV.srv"
"srv/RotationControlSRV.srv"
"srv/SensorSRV.srv"
"srv/WatchdogSRV.srv"
DEPENDENCIES builtin_interfaces
)
# END HERE
# <--
if(BUILD_TESTING)
find_package(ament_lint_auto REQUIRED)
# the following line skips the linter which checks for copyrights
# uncomment the line when a copyright and license is not present in all source files
#set(ament_cmake_copyright_FOUND TRUE)
# the following line skips cpplint (only works in a git repo)
# uncomment the line when this package is not in a git repo
#set(ament_cmake_cpplint_FOUND TRUE)
ament_lint_auto_find_test_dependencies()
endif()
ament_package()

View File

@ -0,0 +1,40 @@
Use this ROS2 package to create custom interfaces, eg. topic (*.msg) and/or service (*.srv) files.
This package must only be used for interface files and __no__ Python scripts.
The following steps describe how to create a new custom topic or service.
## 1. Create new interface file
Topic *.msg files got into `msg` directory,
Service *.srv files got into `srv` directory.
Create these files according to the example on this [instructions page](https://docs.ros.org/en/foxy/Tutorials/Writing-A-Simple-Py-Service-And-Client.html).
## 2. CMakeLists.txt
Edit the `CMakeLists.txt` file by adding the newly created *.msg or *.srv files to this part:
```cmake
rosidl_generate_interfaces(${PROJECT_NAME}
"msg/CustomMsg1.msg"
"msg/CustomMsg2.msg"
"srv/CustomSrv1.srv"
DEPENDENCIES builtin_interfaces
)
```
## 3. Build colcon workspace
Move back to the root of your _colcon_ workspace and rebuild it: `colcon build --symlink-install`
It should build without any errors. If you encounter errors fix these before continuing.
After a successful build you must __close and reopen all terminals__ in order to source the newly built workspace. For this to happen you must have edited _.bashrc_ and added your current workspace (`sudo nano ~/.bashrc` and follow [this example](https://egit.irs.uni-stuttgart.de/RoverLehre/ROS2_pubsub/src/branch/master/non-ros-files/bashrc_overlay.bash)).
## 4. Import interfaces
Import the newly created interfaces into the Python scripts. These scripts must be located in _Python packages_ inside the same workspace (or another _sourced_ workspace):
* Topics:
```python
from custom_interfaces.msg import CustomMsg1
```
* Services:
```python
from custom_interfaces.srv import CustomSrv1
```
Now you can work with your custom interface in order to exchange custom information between nodes.

View File

@ -0,0 +1,8 @@
# Header data, eg timestamp
# Problem: "header__struct.hpp: No such file or directory"
#Header header
# Sensor Data coming back from an array of atmospheric sensors
float32[] temperature
float32[] pressure
float32[] humidity

View File

@ -0,0 +1,7 @@
# Header data, eg timestamp
# Problem: "header__struct.hpp: No such file or directory"
#Header header
# User inputs, eg. for controlling a camera mast , eg. set angles [rad]
float32 pitch_ctrl
float32 yaw_ctrl

View File

@ -0,0 +1,42 @@
<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
<name>custom_interfaces</name>
<version>0.0.0</version>
<description>TODO: Package description</description>
<maintainer email="rosmobile@todo.todo">rosmobile</maintainer>
<license>TODO: License declaration</license>
<buildtool_depend>ament_cmake</buildtool_depend>
<test_depend>ament_lint_auto</test_depend>
<test_depend>ament_lint_common</test_depend>
<!-- ADD THESE LINES: START HERE -->
<build_depend>builtin_interfaces</build_depend>
<build_depend>rosidl_default_generators</build_depend>
<exec_depend>builtin_interfaces</exec_depend>
<exec_depend>rosidl_default_runtime</exec_depend>
<member_of_group>rosidl_interface_packages</member_of_group>
<!-- END HERE -->
<depend>std_msgs</depend>
<!-- DO NOT ENTER THIS DEPENDENCY WHEN CREATING NEW PACKAGE -->
<!-- <depend>builtin_interfaces</depend> -->
<test_depend>ament_lint_auto</test_depend>
<test_depend>ament_lint_common</test_depend>
<export>
<build_type>ament_cmake</build_type>
</export>
</package>

View File

@ -0,0 +1,3 @@
string command
---
bool success

View File

@ -0,0 +1,6 @@
int32 incline
bool store
bool elevate
bool upright
---
bool success

View File

@ -0,0 +1,3 @@
bool command
---
bool success

View File

@ -0,0 +1,11 @@
int32 degree
uint32 speed
bool status
---
bool success
string error
int32 present_position
int32 present_load
int32 present_temp
uint32 present_v
int32 up_cali

View File

@ -0,0 +1,7 @@
bool abs
int32 degree
int32 local_degree
string center
---
bool success
int32 present_pos

View File

@ -0,0 +1,3 @@
bool triggered
---
bool success

View File

@ -0,0 +1,4 @@
string command
float32 value
---
bool success

View File

@ -0,0 +1,3 @@
string node_name
---
string node_name

View File

@ -15,9 +15,7 @@
<!-- CUSTOM LINE -->
<!-- This is custom for the package you depend on -->
<!-- <exec_depend>pubsub_msg</exec_depend> -->
<exec_depend>custom_interfaces</exec_depend>
<!-- test -->
<exec_depend>pubsub_msg</exec_depend>
<!-- END HERE -->

Binary file not shown.

View File

@ -166,9 +166,7 @@ class MinimalServiceProvider(Node):
# Insert your callback code here
def user_defined(self, request, response):
""" OLD! Use function parameter srv_callback_fct instead!
Write your user defined code here which will be run at every service call
""" Write your user defined code here which will be run at every service call
Input:
* request: srv request class
@ -203,7 +201,7 @@ class MinimalServiceClientAsync(Node):
def send_request(self, request):
"""
Feed request of type "SRV_TYPE.Request()"
Access individual variables using
Access variable using
* request = SRV_TYPE.Request()
* request.<var_name> = ....
"""
@ -248,7 +246,7 @@ class MinimalActionServer(Node):
* act_callback_input: action callback function
Return:
*
*
"""
def __init__(self, NODE_NAME, ACT_NAME, ACT_TYPE, act_callback_input=None):
@ -260,19 +258,19 @@ class MinimalActionServer(Node):
self.execute_callback= self.std_act_callback
else:
self.execute_callback = act_callback_input
# Init above laying class "Node" (super class)
super().__init__(self.NODE_NAME)
print("\tStarting Action Server:\t%s"%(self.ACT_NAME))
self._action_server = ActionServer(self, self.ACT_TYPE, self.ACT_NAME, self.execute_callback)
# standard action callback
def std_act_callback(self, goal_handle):
""" Standard Action Callback Method
""" Standard Action Callback Method
Replace this method by inputting a custom callback method using 'act_callback_input'.
This method MUST return a variable of the type 'action result',
Replace this method by inputting a custom callback method using 'act_callback_input'.
This method MUST return a variable of the type 'action result',
eg. result = ACTION_TYPE.Result()
"""
self.get_logger().info('Executing goal...')
@ -282,7 +280,7 @@ class MinimalActionServer(Node):
#################
result = self.ACT_TYPE.Result()
return result
#******************************************************************************#
class MinimalActionClient(Node):
@ -294,21 +292,21 @@ class MinimalActionClient(Node):
* act_callback_input: action callback function
Return:
*
*
"""
def __init__(self, NODE_NAME, ACT_NAME, ACT_TYPE, act_callback_input=None):
self.NODE_NAME = NODE_NAME
self.ACT_NAME = ACT_NAME
self.ACT_TYPE = ACT_TYPE
# Init above laying class "Node" (super class)
super().__init__(self.NODE_NAME)
print("\tStarting Action Client for:\t%s"%(self.ACT_NAME))
self._action_client = ActionClient(self, self.ACT_TYPE, self.ACT_NAME)
def send_goal(self, input):
return
def abort_goal(self):
return

View File

@ -0,0 +1,59 @@
cmake_minimum_required(VERSION 3.5)
project(pubsub_msg)
# Default to C99
if(NOT CMAKE_C_STANDARD)
set(CMAKE_C_STANDARD 99)
endif()
# Default to C++14
if(NOT CMAKE_CXX_STANDARD)
set(CMAKE_CXX_STANDARD 14)
endif()
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
add_compile_options(-Wall -Wextra -Wpedantic)
endif()
# find dependencies
find_package(ament_cmake REQUIRED)
# uncomment the following section in order to fill in
# further dependencies manually.
# find_package(<dependency> REQUIRED)
# -->
# ADD THESE LINES: START HERE
find_package(builtin_interfaces REQUIRED)
find_package(rosidl_default_generators REQUIRED)
find_package(std_msgs REQUIRED)
find_package(rclcpp REQUIRED)
# CUSTOM LINES: CHANGE FOR YOUR FILENAMES
rosidl_generate_interfaces(${PROJECT_NAME}
"msg/CustomMsg1.msg"
"msg/CustomMsg2.msg"
DEPENDENCIES builtin_interfaces
)
# END HERE
# <--
if(BUILD_TESTING)
find_package(ament_lint_auto REQUIRED)
# the following line skips the linter which checks for copyrights
# uncomment the line when a copyright and license is not present in all source files
#set(ament_cmake_copyright_FOUND TRUE)
# the following line skips cpplint (only works in a git repo)
# uncomment the line when this package is not in a git repo
#set(ament_cmake_cpplint_FOUND TRUE)
ament_lint_auto_find_test_dependencies()
endif()
ament_package()

View File

@ -0,0 +1,8 @@
# Header data, eg timestamp
# Problem: "header__struct.hpp: No such file or directory"
#Header header
# Sensor Data coming back from an array of atmospheric sensors
float32[] temperature
float32[] pressure
float32[] humidity

View File

@ -0,0 +1,7 @@
# Header data, eg timestamp
# Problem: "header__struct.hpp: No such file or directory"
#Header header
# User inputs, eg. for controlling a camera mast , eg. set angles [rad]
float32 pitch_ctrl
float32 yaw_ctrl

View File

@ -0,0 +1,34 @@
<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
<name>pubsub_msg</name>
<version>0.0.0</version>
<description>TODO: Package description</description>
<maintainer email="winterhalder.p@googlemail.com">patrick</maintainer>
<license>TODO: License declaration</license>
<buildtool_depend>ament_cmake</buildtool_depend>
<test_depend>ament_lint_auto</test_depend>
<test_depend>ament_lint_common</test_depend>
<!-- ADD THESE LINES: START HERE -->
<build_depend>builtin_interfaces</build_depend>
<build_depend>rosidl_default_generators</build_depend>
<exec_depend>builtin_interfaces</exec_depend>
<exec_depend>rosidl_default_runtime</exec_depend>
<member_of_group>rosidl_interface_packages</member_of_group>
<!-- END HERE -->
<export>
<build_type>ament_cmake</build_type>
</export>
</package>